4 पॉइंट द्वारा GN⁺ 2024-06-24 | 1 टिप्पणियां | WhatsApp पर शेयर करें

लक्ष्य

  • केवल अधिकृत उपयोगकर्ता ही root अधिकारों के साथ कमांड चला सकें
  • privilege escalation का उपयोग न किया जाए

कार्यान्वयन

  • एक समर्पित SSH key बनाकर उसे root authentication के लिए उपयोग करें

    mkdir /root/.ssh/
    echo ssh-ed25519 AAAAC3Nza... > /root/.ssh/local_keys
    
  • Unix domain socket से bind की गई sshd server instance चलाएँ

    mkdir /run/sshd/
    chown root:wheel /run/sshd/
    chmod 750 /run/sshd/
    s6-ipcserver /run/sshd/sshd.sock sshd -ie -o AuthorizedKeysFile=/root/.ssh/local_keys -o PermitRootLogin=yes
    
  • root account को lock करें और password से login असंभव करें

    # /etc/passwd फ़ाइल में root password बदलें
    
  • local sshd instance से कनेक्ट करने के लिए ProxyCommand विकल्प का उपयोग करें

    ssh -o ProxyCommand='socat STDIO UNIX-CONNECT:/run/sshd/sshd.sock' \
        -i .ssh/root-key.pub \
        -t \
        root@root \
        "cd $(pwd); '$SHELL' --login"
    
  • socket file descriptor पास करने के लिए ProxyUseFdpass विकल्प के साथ एक script लिखें

    #!/usr/bin/env python3
    import sys
    import socket
    import array
    
    s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    s.connect("/run/sshd/sshd.sock")
    
    fds = array.array("i", [s.fileno()])
    ancdata = [(socket.SOL_SOCKET, socket.SCM_RIGHTS, fds)]
    socket.socket(fileno=1).sendmsg([b'\0'], ancdata)
    
  • अंत में ssh कमांड चलाएँ

    ssh -o ProxyCommand='/home/hugo/tmp/passfd.py' \
        -i .ssh/root-key.pub \
        -o ProxyUseFdpass=yes \
        -t \
        root@root \
        "cd $(pwd); '$SHELL' --login"
    

निष्कर्ष

  • यह तकनीक OpenSSH का उपयोग करके security details को संभालती है
  • यह hardware-based SSH keys सहित विभिन्न authentication methods को support करती है
  • नए host पर इसे सेट up करने की प्रक्रिया जटिल नहीं है
  • passfd.py script प्रयोग के लिए एक अस्थायी उपाय है, लेकिन रोज़मर्रा के उपयोग के लिए इसे एक छोटे executable के रूप में लिखना बेहतर होगा

GN⁺ की राय

  • यह तरीका sudo या doas के विकल्प के रूप में security बढ़ा सकता है
  • SSH का उपयोग कर authentication मजबूत करने वाला यह approach hardware-based authentication सहित विभिन्न authentication methods को support करता है
  • system configuration अपेक्षाकृत सरल है, इसलिए शुरुआती engineer भी इसे आसानी से follow कर सकते हैं
  • passfd.py script को एक छोटे executable में बदलकर /usr/local/bin में रखने से इसका उपयोग और सुविधाजनक हो सकता है
  • यह तरीका network exposure के बिना केवल local में काम करता है, इसलिए security अधिक है

1 टिप्पणियां

 
GN⁺ 2024-06-24
Hacker News राय
  • अतिरिक्त जटिलता की समस्या: मौजूदा एकल suid binary की जगह root के रूप में चलने वाली binary और UNIX socket का उपयोग करने वाली दो binaries की ज़रूरत पड़ती है। इससे asymmetric cryptography operations समेत जटिलता बढ़ जाती है.

  • सिस्टम सुरक्षा: sudo binary को किसी खास group (wheel) तक सीमित करके और permissions को समायोजित करके, sshd approach के समान सुरक्षा स्तर बनाए रखा जा सकता है। अगर सिस्टम package manager sudo permissions को खराब कर दे, तो cron का उपयोग करके उन्हें समय-समय पर ठीक किया जा सकता है या sudo को सीधे source से install किया जा सकता है.

  • systemd का run0: systemd का "run0" टूल sudo की तरह काम करता है, लेकिन यह SUID नहीं है। इसके बजाय यह service manager से command चलाने का अनुरोध करता है। यह व्यवहार में ssh से ज़्यादा मिलता-जुलता है.

  • ssh और sudo की तुलना: यह सवाल है कि ssh के ज़रिए root के रूप में login करना क्या sudo से ज़्यादा सुरक्षित है। sshd की remote user access को रोकने के तरीकों पर चर्चा की ज़रूरत है। sudo की सीमाओं की तुलना में, ssh approach अधिक कमजोर हो सकती है.

  • नेटवर्क service की समस्या: अगर ssh boot के समय शुरू नहीं होता, तो console login भी असंभव हो जाता है। इससे sudo या su की तुलना में ज़्यादा समस्याएँ पैदा हो सकती हैं.

  • systemd run0 जैसा समान approach: systemd के run0 टूल जैसा एक समान approach मौजूद है.

  • sudo का सूक्ष्म नियंत्रण: sudo commands, arguments और child shell बनाने जैसी चीज़ों पर बारीकी से नियंत्रण दे सकता है। नया approach यह सूक्ष्म नियंत्रण खो देता है, और trusted key management भी अधिक कठिन हो जाता है.

  • SSH console configuration: dedicated SSH console का उपयोग करके root access को manage करने का तरीका। Yubikey और firewall settings के माध्यम से सुरक्षा को मज़बूत किया जाता है.

  • SSH protocol की सीमाएँ: SSH में process creation protocol का हिस्सा नहीं है, और local resources को child process तक pass नहीं किया जा सकता। sudo के विकल्प के रूप में इसका उपयोग करने के लिए POSIX spawn जैसे extension की ज़रूरत होगी.

  • यूज़र management: यूज़र्स के साथ छोटे बच्चों जैसा व्यवहार करने के बजाय, समझदारी भरे defaults सेट करना ज़रूरी है ताकि संभावित समस्याओं से बचा जा सके। अगर root access चाहिए, तो console के ज़रिए login करना बेहतर है.

  • single-user mode की समस्या: अगर single-user mode में root के रूप में login नहीं किया जा सकता, तो सिस्टम recovery मुश्किल हो जाती है। सिस्टम upgrade के दौरान होने वाली समस्याओं को हल करने के लिए इसकी ज़रूरत पड़ सकती है.