Sudo için alternatif bir teknik olarak SSH
(whynothugo.nl)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
sshdsunucu örneği çalıştırmakmkdir /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çinProxyCommandseçeneğini kullanmakssh -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
ProxyUseFdpassseç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
sshkomutunu çalıştırmakssh -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.pybetiğ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,
sudoveyadoasiç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.pybetiği küçük bir çalıştırılabilir dosyaya dönüştürülüp/usr/local/binaltı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
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:
sudoikilisini belirli bir grupla (wheel) sınırlandırıp izinleri ayarlarsanız,sshdyaklaşımına benzer bir güvenlik düzeyi korunabilir. Sistem paket yöneticisisudoyetkilerini bozarsa,cronile bunu periyodik olarak düzeltmek veyasudoyu doğrudan kaynaktan kurmak da mümkün.systemd'nin run0 aracı: systemd'nin
run0aracısudoya benzer şekilde çalışır, ancak SUID değildir. Bunun yerine komutun çalıştırılmasını hizmet yöneticisinden ister. Bu davranış olaraksshye daha çok benzer.sshvesudokarşılaştırması:sshüzerinden root olarak giriş yapmanınsudodan 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ığındasshyaklaşımı daha zayıf olabilir.Ağ hizmeti sorunu:
sshaçılışta başlamazsa konsol oturumu açmak da imkansız hale gelir. Bu,sudoveyasuya kıyasla daha fazla soruna yol açabilir.systemd
run0ya benzer yaklaşım: systemd'ninrun0aracı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
sudoyerine kullanmak için POSIXspawnbenzeri 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.