4 puan yazan GN⁺ 2024-06-24 | 1 yorum | WhatsApp'ta paylaş

Amaç

  • Yalnızca yetkili kullanıcıların root yetkisiyle komut çalıştırabilmesini sağlamak
  • Yetki yükseltme kullanmamak

Uygulama

  • Root kimlik doğrulamasında kullanmak için özel bir SSH anahtarı oluşturmak

    mkdir /root/.ssh/
    echo ssh-ed25519 AAAAC3Nza... > /root/.ssh/local_keys
    
  • Unix etki alanı soketine bağlanmış bir sshd sunucu örneği çalıştırmak

    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 hesabını kilitlemek ve parola ile giriş yapılamayacak şekilde ayarlamak

    # /etc/passwd dosyasında root parolasını değiştirin
    
  • Yerel sshd örneğine bağlanmak için ProxyCommand seçeneğini kullanmak

    ssh -o ProxyCommand='socat STDIO UNIX-CONNECT:/run/sshd/sshd.sock' \
        -i .ssh/root-key.pub \
        -t \
        root@root \
        "cd $(pwd); '$SHELL' --login"
    
  • Soket dosya tanımlayıcısını iletmek için ProxyUseFdpass seçeneğini kullanan bir betik yazmak

    #!/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)
    
  • Son olarak ssh komutunu çalıştırmak

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

Sonuç

  • Bu teknik, güvenlik ayrıntılarını ele almak için OpenSSH kullanır
  • Donanım tabanlı SSH anahtarları dahil çeşitli kimlik doğrulama yöntemlerini destekler
  • Yeni bir ana makinede kurulum süreci karmaşık değildir
  • passfd.py betiği deney amaçlı geçici bir çözümdür; günlük kullanım için küçük bir çalıştırılabilir dosya olarak yazmak daha iyidir

GN⁺ görüşü

  • Bu yöntem, sudo veya doas için daha güvenli bir alternatif olabilir
  • SSH kullanarak kimlik doğrulamayı güçlendiren bu yaklaşım, donanım tabanlı kimlik doğrulama dahil çeşitli yöntemleri destekler
  • Sistem yapılandırması görece basittir; bu yüzden başlangıç seviyesindeki mühendisler bile kolayca uygulayabilir
  • passfd.py betiği küçük bir çalıştırılabilir dosyaya dönüştürülüp /usr/local/bin altına yerleştirilirse daha kullanışlı olabilir
  • Bu yöntem ağ üzerinden açılmadan yalnızca yerelde çalıştığı için güvenliği yüksektir

1 yorum

 
GN⁺ 2024-06-24
Hacker News görüşü
  • Ek karmaşıklık sorunu: Mevcut tek bir suid ikilisi yerine, root olarak çalışan bir ikili ve UNIX soketi kullanan iki ikili gerekiyor. Bu da asimetrik kriptografi işlemleri dahil karmaşıklığı artırıyor.

  • Sistem güvenliği: sudo ikilisini belirli bir grupla (wheel) sınırlandırıp izinleri ayarlarsanız, sshd yaklaşımına benzer bir güvenlik düzeyi korunabilir. Sistem paket yöneticisi sudo yetkilerini bozarsa, cron ile bunu periyodik olarak düzeltmek veya sudoyu doğrudan kaynaktan kurmak da mümkün.

  • systemd'nin run0 aracı: systemd'nin run0 aracı sudoya benzer şekilde çalışır, ancak SUID değildir. Bunun yerine komutun çalıştırılmasını hizmet yöneticisinden ister. Bu davranış olarak sshye daha çok benzer.

  • ssh ve sudo karşılaştırması: ssh üzerinden root olarak giriş yapmanın sudodan daha güvenli olup olmadığı sorgulanıyor. sshd üzerinden uzak kullanıcı erişimini engelleme yöntemlerinin de tartışılması gerekiyor. sudonun kısıtlarıyla karşılaştırıldığında ssh yaklaşımı daha zayıf olabilir.

  • Ağ hizmeti sorunu: ssh açılışta başlamazsa konsol oturumu açmak da imkansız hale gelir. Bu, sudo veya suya kıyasla daha fazla soruna yol açabilir.

  • systemd run0ya benzer yaklaşım: systemd'nin run0 aracına benzer bir yaklaşım da mevcut.

  • sudonun ayrıntılı denetimi: sudo, komutları ve argümanları, alt kabuk oluşturmayı vb. ayrıntılı biçimde denetleyebilir. Yeni yaklaşım bu ayrıntılı denetimi kaybeder ve güvenilir anahtar yönetimi daha da zorlaşır.

  • SSH konsol yapılandırması: Root erişimini yönetmek için ayrılmış bir SSH konsolu kullanma yöntemi. Güvenlik, Yubikey ve güvenlik duvarı ayarlarıyla güçlendiriliyor.

  • SSH protokolünün sınırları: SSH'de süreç oluşturma protokolün bir parçası değildir ve yerel kaynaklar alt sürece aktarılamaz. Bunu sudo yerine kullanmak için POSIX spawn benzeri bir genişletme gerekir.

  • Kullanıcı yönetimi: Kullanıcılara küçük çocukmuş gibi davranmamak ve olası sorunlardan kaçınmak için makul varsayılanlar belirlemek önemlidir. Root erişimi gerekiyorsa konsol üzerinden oturum açmak daha uygundur.

  • Tek kullanıcı modu sorunu: Tek kullanıcı modunda root olarak oturum açılamıyorsa sistem kurtarma zorlaşır. Bu, sistem yükseltmeleri sırasında ortaya çıkabilecek sorunları çözmek için gereklidir.