Menggunakan SSH melalui soket UNIX dan bukannya sudo untuk menyingkirkan fail suid

Timothee Ravier dari Red Hat, penyelenggara projek Fedora Silverblue dan Fedora Kinoite, mencadangkan cara untuk mengelak daripada menggunakan utiliti sudo, yang menggunakan bit suid untuk meningkatkan keistimewaan. Daripada sudo, untuk pengguna biasa melaksanakan arahan dengan hak akar, adalah dicadangkan untuk menggunakan utiliti ssh dengan sambungan tempatan ke sistem yang sama melalui soket UNIX dan pengesahan kebenaran berdasarkan kekunci SSH.

Menggunakan ssh dan bukannya sudo membolehkan anda menyingkirkan program suid pada sistem dan membolehkan pelaksanaan perintah istimewa dalam persekitaran hos pengedaran yang menggunakan komponen pengasingan kontena, seperti Fedora Silverblue, Fedora Kinoite, Fedora Sericea dan Fedora Onyx. Untuk menyekat akses, pengesahan kuasa menggunakan token USB (contohnya, Yubikey) boleh digunakan tambahan.

Contoh mengkonfigurasi komponen pelayan OpenSSH untuk akses melalui soket Unix tempatan (contoh sshd yang berasingan akan dilancarkan dengan fail konfigurasinya sendiri):

/etc/systemd/system/sshd-unix.socket: [Unit] Penerangan=OpenSSH Server Unix Socket Documentation=man:sshd(8) man:sshd_config(5) [Socket] ListenStream=/run/sshd.sock Accept=yes [Pasang] WantedBy=sockets.target

/ etc / systemd / system /[e-mel dilindungi]: [Unit] Penerangan=Daemon pelayan per-sambungan OpenSSH (soket Unix) Dokumentasi=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [Perkhidmatan] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=soket

/etc/ssh/sshd_config_unix: # Tinggalkan pengesahan kunci sahaja PermitRootLogin prohibit-password PasswordAuthentication no PermitEmptyPasswords no GSSAPIAuthentication no # menyekat akses kepada pengguna terpilih AllowUsers root adminusername # Meninggalkan hanya penggunaan .ssh/authorized_keyssh.Kekunci_diizinkan /authorized_ keys # enable sftp Subsystem sftp /usr/libexec/openssh/sftp-server

Aktifkan dan lancarkan unit systemd: sudo systemctl daemon-reload sudo systemctl enable β€”now sshd-unix.socket

Tambahkan kunci SSH anda pada /root/.ssh/authorized_keys

Menyediakan klien SSH.

Pasang utiliti socat: sudo dnf install socat

Kami menambah /.ssh/config dengan menentukan socat sebagai proksi untuk akses melalui soket UNIX: Host host.local User root # Gunakan /run/host/run dan bukannya /run untuk bekerja dari bekas ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # Laluan ke kunci SSH IdentityFile ~/.ssh/keys/localroot # Dayakan sokongan TTY untuk shell interaktif RequestTTY ya # Alih keluar keluaran yang tidak diperlukan LogLevel QUIET

Dalam bentuk semasa, nama pengguna pentadbir pengguna kini akan dapat melaksanakan arahan sebagai akar tanpa memasukkan kata laluan. Menyemak operasi: $ ssh host.local [root ~]#

Kami mencipta alias sudohost dalam bash untuk menjalankan "ssh host.local", serupa dengan sudo: sudohost() { if [[ ${#} -eq 0 ]]; kemudian ssh hos.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; eksekutif \»${@}\»» fi }

Semak: $ sudohost id uid=0(root) gid=0(root) kumpulan=0(root)

Kami menambah bukti kelayakan dan mendayakan pengesahan dua faktor, membenarkan akses root hanya apabila token USB Yubikey dimasukkan.

Kami menyemak algoritma mana yang disokong oleh Yubikey sedia ada: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $2}'

Jika output adalah 5.2.3 atau lebih besar, gunakan ed25519-sk apabila menjana kekunci, jika tidak gunakan ecdsa-sk: ssh-keygen -t ed25519-sk atau ssh-keygen -t ecdsa-sk

Menambah kunci awam pada /root/.ssh/authorized_keys

Tambahkan jenis kunci yang mengikat pada konfigurasi sshd: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [e-mel dilindungi],[e-mel dilindungi]

Kami mengehadkan akses kepada soket Unix kepada hanya pengguna yang boleh mempunyai keistimewaan yang dinaikkan (dalam contoh kami, adminusername). Dalam /etc/systemd/system/sshd-unix.socket tambah: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Sumber: opennet.ru

Tambah komen