
Systemd Hardening Helper - Mirror of https://github.com/desbma/shh

strace प्रोफाइलिंग द्वारा निर्देशित स्वचालित systemd सेवा हार्डनिंग।
SHH आपकी प्रत्येक सेवा के लिए हार्डनिंग विकल्पों का एक इष्टतम सेट उत्पन्न कर सकता है, ताकि आप अत्यधिक प्रतिबंधात्मक सैंडबॉक्सिंग के कारण प्रोडक्शन में होने वाली आकस्मिक त्रुटियों की चिंता किए बिना अपने सिस्टम का सुरक्षा स्तर बढ़ा सकें।
आधिकारिक रिपॉजिटरी - मिरर रिपॉजिटरी
Strace स्थापित होना आवश्यक है और इसका executable PATH में उपलब्ध होना चाहिए। वर्तमान में Strace संस्करण >= 6.6 आवश्यक है।
आपको एक Rust बिल्ड वातावरण की आवश्यकता है, उदाहरण के लिए rustup से।
वर्तमान रिपॉजिटरी में चलाएँ:
cargo build --release
install -Dm 755 -t /usr/local/bin target/release/shh
crates.io सेsudo cargo install --root /usr/local systemd-hardening-helper
प्रत्येक टैग किए गए संस्करण के लिए निर्मित Debian पैकेज हेतु GitHub releases देखें।
Arch Linux उपयोगकर्ता shh AUR package स्थापित कर सकते हैं।
Nixos/Nix उपयोगकर्ता unstable branch से नवीनतम पैकेज स्थापित कर सकते हैं।
SERVICE.service नामक system unit को हार्डन करने के लिए:
shh service start-profile SERVICE। सेवा को strace प्रोफाइलिंग के साथ पुनः प्रारंभ किया जाएगा।shh service finish-profile SERVICE -a चलाएँ। सेवा को पिछले रनटाइम प्रोफाइलिंग से निर्मित हार्डन कॉन्फ़िगरेशन के साथ पुनः प्रारंभ किया जाएगा, ताकि यह प्रोफाइलिंग अवधि के दौरान देखे गए अनुसार सुरक्षित रूप से चल सके और अन्य खतरनाक सिस्टम क्रियाओं को अस्वीकार कर सके।पूर्ण कमांड लाइन संदर्भ के लिए shh -h चलाएँ, या सहायता पाने के लिए किसी subcommand के अंत में -h जोड़ें।
[!WARNING]
shhद्वारा उत्पन्न हार्डनिंग विकल्प स्वभावतः विभिन्न प्रणालियों पर पोर्टेबल नहीं होते हैं। वे कई कारकों पर निर्भर करते हैं, और उनमें से कोई भी बदलने पर सेवा टूट सकती है:
- प्रोफाइलिंग के दौरान कवर किया गया कोड पथ
- Linux कर्नेल संस्करण
- प्रयुक्त libc
- systemd संस्करण
shhद्वारा उत्पन्न विकल्पों को भिन्न वातावरण (यानी भिन्न Linux वितरण) वाली प्रणाली पर पुनः उपयोग करने से सेवा के टूटने की अत्यधिक संभावना है।
यदि आप यह देखने के लिए एक त्वरित परीक्षण चलाना चाहते हैं कि कौन से विकल्प उत्पन्न होंगे, तो आप shh run -- COMMAND का उपयोग कर सकते हैं।
वर्तमान निर्देशिका और PATH पर्यावरण चर दोनों प्रोग्राम निष्पादन को प्रभावित करते हैं; पहले इन्हें रीसेट करें:
$ cd /
export PATH=/usr/local/bin:/usr/bin:/bin
फिर यह देखने के लिए कि curl https://www.example.com चलाने पर कौन से विकल्प उत्पन्न होंगे:
$ shh run -- curl https://www.example.com
...
-------- Start of suggested service options --------
ProtectSystem=strict
ProtectHome=true
PrivateTmp=disconnected
PrivateDevices=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectKernelLogs=true
ProtectControlGroups=true
ProtectProc=ptraceable
LockPersonality=true
RestrictRealtime=true
ProtectClock=true
MemoryDenyWriteExecute=true
RestrictAddressFamilies=AF_INET AF_INET6 AF_NETLINK AF_UNIX
SocketBindDeny=ipv4:tcp
SocketBindDeny=ipv4:udp
SocketBindDeny=ipv6:tcp
SocketBindDeny=ipv6:udp
CapabilityBoundingSet=~CAP_BLOCK_SUSPEND CAP_BPF CAP_CHOWN CAP_MKNOD CAP_NET_RAW CAP_PERFMON CAP_SYS_BOOT CAP_SYS_CHROOT CAP_SYS_MODULE CAP_SYS_NICE CAP_SYS_PACCT CAP_SYS_PTRACE CAP_SYS_TIME CAP_SYSLOG CAP_WAKE_ALARM
SystemCallFilter=~@aio:EPERM @chown:EPERM @clock:EPERM @cpu-emulation:EPERM @debug:EPERM @ipc:EPERM @keyring:EPERM @memlock:EPERM @module:EPERM @mount:EPERM @obsolete:EPERM @pkey:EPERM @privileged:EPERM @raw-io:EPERM @reboot:EPERM @resources:EPERM @sandbox:EPERM @setuid:EPERM @swap:EPERM @sync:EPERM @timer:EPERM
-------- End of suggested service options --------
या जितना संभव हो सैंडबॉक्स करने के लिए:
$ shh run --mode aggressive --filesystem-whitelisting --network-firewalling -- curl https://www.example.com -o /dev/null
...
-------- Start of suggested service options --------
ProtectSystem=strict
ProtectHome=true
PrivateTmp=disconnected
PrivateDevices=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectKernelLogs=true
ProtectControlGroups=true
ProtectProc=ptraceable
LockPersonality=true
RestrictRealtime=true
ProtectClock=true
MemoryDenyWriteExecute=true
SystemCallArchitectures=native
ReadOnlyPaths=-/
ReadWritePaths=-/dev
InaccessiblePaths=-/boot -/home -/lost+found -/media -/mnt -/opt -/root -/srv -/sys -/tmp -/var
TemporaryFileSystem=/usr:ro
BindReadOnlyPaths=-/usr/bin -/usr/lib -/usr/lib64 -/usr/local -/usr/share
NoExecPaths=-/
ExecPaths=-/usr/bin/curl -/usr/lib/x86_64-linux-gnu
RestrictAddressFamilies=AF_INET AF_INET6 AF_NETLINK AF_UNIX
SocketBindDeny=ipv4:tcp
SocketBindDeny=ipv4:udp
SocketBindDeny=ipv6:tcp
SocketBindDeny=ipv6:udp
IPAddressDeny=any
IPAddressAllow=[redacted]
CapabilityBoundingSet=~CAP_BLOCK_SUSPEND CAP_BPF CAP_CHOWN CAP_MKNOD CAP_NET_RAW CAP_PERFMON CAP_SYS_BOOT CAP_SYS_CHROOT CAP_SYS_MODULE CAP_SYS_NICE CAP_SYS_PACCT CAP_SYS_PTRACE CAP_SYS_TIME CAP_SYSLOG CAP_WAKE_ALARM
SystemCallFilter=~@aio:EPERM @chown:EPERM @clock:EPERM @cpu-emulation:EPERM @debug:EPERM @ipc:EPERM @keyring:EPERM @memlock:EPERM @module:EPERM @mount:EPERM @obsolete:EPERM @pkey:EPERM @privileged:EPERM @raw-io:EPERM @reboot:EPERM @resources:EPERM @sandbox:EPERM @setuid:EPERM @swap:EPERM @sync:EPERM @timer:EPERM
-------- End of suggested service options --------