Suid dosyalarından kurtulmak için sudo yerine UNIX soketi üzerinden SSH kullanma

Fedora Silverblue ve Fedora Kinoite projelerinin sorumlusu Red Hat'ten Timothee Ravier, ayrıcalıkları artırmak için suid bitini kullanan sudo yardımcı programını kullanmaktan kaçınmanın bir yolunu önerdi. Normal bir kullanıcının komutları kök haklarıyla çalıştırabilmesi için sudo yerine, UNIX soketi aracılığıyla aynı sisteme yerel bağlantıyla ssh yardımcı programının kullanılması ve SSH anahtarlarına dayalı izinlerin doğrulanması önerilmektedir.

Sudo yerine ssh kullanmak, sistemdeki suid programlarından kurtulmanıza ve Fedora Silverblue, Fedora Kinoite, Fedora Sericea ve Fedora Onyx gibi konteyner izolasyon bileşenlerini kullanan dağıtımların ana bilgisayar ortamında ayrıcalıklı komutların yürütülmesine olanak sağlar. Erişimi kısıtlamak için, bir USB belirteci (örneğin Yubikey) kullanılarak yetki onayı ek olarak kullanılabilir.

OpenSSH sunucu bileşenlerini yerel bir Unix soketi aracılığıyla erişim için yapılandırmaya bir örnek (kendi yapılandırma dosyasıyla ayrı bir sshd örneği başlatılacaktır):

/etc/systemd/system/sshd-unix.socket: [Birim] Açıklama=OpenSSH Sunucusu Unix Socket Documentation=man:sshd(8) man:sshd_config(5) [Socket] ListenStream=/run/sshd.sock Accept=yes [Yükle] WantedBy=sockets.target

/ Etc / systemd / sistem /[e-posta korumalı]: [Birim] Açıklama=Bağlantı başına OpenSSH sunucusu arka plan programı (Unix soketi) Documentation=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [Servis] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # Yalnızca anahtar kimlik doğrulamasını bırakır PermitRootLogin yasaklama-şifresi Şifre Kimlik Doğrulaması hayır PermitEmptyPasswords hayır GSSAPIAuthentication hayır # seçilen kullanıcılara erişimi kısıtlar AllowUsers root adminusername # Yalnızca .ssh/authorized_keys kullanımını bırakır (.ssh/authorized_keys2 olmadan AuthorizedKeysFile .ssh /yetkili_ anahtarlar # sftp'yi etkinleştir Altsistem sftp /usr/libexec/openssh/sftp-server

Systemd birimini etkinleştirin ve başlatın: sudo systemctl daemon-reload sudo systemctl active —now sshd-unix.socket

SSH anahtarınızı /root/.ssh/authorized_keys'e ekleyin

SSH istemcisini kurma.

socat yardımcı programını yükleyin: sudo dnf install socat

Bir UNIX soketi aracılığıyla erişim için socat'ı proxy olarak belirterek /.ssh/config'i tamamlıyoruz: Ana makine host.local Kullanıcı kökü # Kaplardan çalışmak için /run yerine /run/host/run kullanın ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # SSH anahtarının yolu IdentityFile ~/.ssh/keys/localroot # Etkileşimli kabuk için TTY desteğini etkinleştirin requestTTY evet # Gereksiz çıktıyı kaldırın LogLevel QUIET

Mevcut haliyle adminkullanıcı adı kullanıcısı artık şifre girmeden root olarak komutları çalıştırabilecektir. İşlem kontrol ediliyor: $ ssh host.local [root ~]#

“ssh host.local” komutunu çalıştırmak için bash'ta sudo'ya benzer bir sudohost takma adı oluştururuz: sudohost() { if [[ ${#} -eq 0 ]]; sonra ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

Kontrol edin: $ sudohost id uid=0(root) gid=0(root)groups=0(root)

Kimlik bilgileri ekliyoruz ve iki faktörlü kimlik doğrulamayı etkinleştiriyoruz; yalnızca Yubikey USB belirteci takıldığında kök erişimine izin veriyoruz.

Mevcut Yubikey tarafından hangi algoritmaların desteklendiğini kontrol ediyoruz: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{$2 yazdır}'

Çıkış 5.2.3 veya daha büyükse, anahtarları oluştururken ed25519-sk kullanın, aksi halde ecdsa-sk kullanın: ssh-keygen -t ed25519-sk veya ssh-keygen -t ecdsa-sk

Genel anahtarı /root/.ssh/authorized_keys'e ekler

Sshd yapılandırmasına bir anahtar türü bağlaması ekleyin: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [e-posta korumalı],[e-posta korumalı]

Unix soketine erişimi yalnızca yükseltilmiş ayrıcalıklara sahip olabilecek kullanıcıyla (örneğimizde yönetici kullanıcı adı) sınırlandırıyoruz. /etc/systemd/system/sshd-unix.socket dosyasına şunu ekleyin: [Socket] ... SocketUser=yöneticikullanıcı adı SocketGroup=yöneticikullanıcı adı SocketMode=0660

Kaynak: opennet.ru

Yorum ekle