SSH sebagai Teknologi Pengganti Sudo
(whynothugo.nl)Tujuan
- Hanya pengguna yang berwenang yang dapat menjalankan perintah dengan hak root
- Tidak menggunakan eskalasi hak istimewa
Implementasi
-
Membuat kunci SSH khusus untuk digunakan dalam autentikasi root
mkdir /root/.ssh/ echo ssh-ed25519 AAAAC3Nza... > /root/.ssh/local_keys -
Menjalankan instance server
sshdyang diikat ke soket domain Unixmkdir /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 -
Mengunci akun root dan mengatur agar login dengan kata sandi tidak dimungkinkan
# Ubah kata sandi root di file /etc/passwd -
Menggunakan opsi
ProxyCommanduntuk terhubung ke instancesshdlokalssh -o ProxyCommand='socat STDIO UNIX-CONNECT:/run/sshd/sshd.sock' \ -i .ssh/root-key.pub \ -t \ root@root \ "cd $(pwd); '$SHELL' --login" -
Menulis skrip yang menggunakan opsi
ProxyUseFdpassuntuk meneruskan file descriptor soket#!/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) -
Pada akhirnya menjalankan perintah
sshssh -o ProxyCommand='/home/hugo/tmp/passfd.py' \ -i .ssh/root-key.pub \ -o ProxyUseFdpass=yes \ -t \ root@root \ "cd $(pwd); '$SHELL' --login"
Kesimpulan
- Teknik ini menggunakan OpenSSH untuk menangani detail keamanan
- Mendukung berbagai metode autentikasi, termasuk kunci SSH berbasis perangkat keras
- Proses penyiapan di host baru tidak rumit
- Skrip
passfd.pyadalah solusi sementara untuk eksperimen; untuk penggunaan sehari-hari, lebih baik ditulis sebagai executable kecil
Opini GN⁺
- Metode ini dapat meningkatkan keamanan sebagai alternatif untuk
sudoataudoas - Pendekatan yang menggunakan SSH untuk memperkuat autentikasi mendukung berbagai metode autentikasi, termasuk autentikasi berbasis perangkat keras
- Konfigurasi sistem relatif sederhana sehingga engineer pemula pun dapat mengikutinya dengan mudah
- Akan lebih praktis jika skrip
passfd.pydijadikan executable kecil dan ditempatkan di/usr/local/bin - Metode ini hanya berjalan secara lokal tanpa eksposur jaringan, sehingga keamanannya tinggi
1 komentar
Komentar Hacker News
Masalah kompleksitas tambahan: Alih-alih satu biner suid yang sudah ada, dibutuhkan dua biner yang berjalan sebagai root dan menggunakan soket UNIX. Ini menambah kompleksitas, termasuk operasi kriptografi asimetris.
Keamanan sistem: Jika biner sudo dibatasi ke grup tertentu (
wheel) dan izinnya disesuaikan, tingkat keamanan yang mirip dengan pendekatan sshd dapat dipertahankan. Jika pengelola paket sistem merusak izin sudo, hal itu juga bisa diperbaiki secara berkala dengan cron atau dengan memasang sudo langsung dari source.run0 milik systemd: Alat
run0milik systemd bekerja mirip sudo, tetapi bukan SUID. Sebagai gantinya, ia meminta manajer layanan untuk menjalankan perintah. Ini menunjukkan perilaku yang lebih mirip ssh.Perbandingan ssh dan sudo: Dipertanyakan apakah login sebagai root melalui ssh benar-benar lebih aman daripada sudo. Perlu ada pembahasan tentang cara mencegah akses pengguna jarak jauh ke sshd. Dibandingkan dengan pembatasan sudo, pendekatan ssh bisa lebih rentan.
Masalah layanan jaringan: Jika ssh tidak dimulai saat boot, login konsol pun menjadi tidak mungkin. Ini bisa menimbulkan lebih banyak masalah daripada sudo atau su.
Pendekatan yang mirip systemd run0: Ada pendekatan yang serupa dengan alat
run0milik systemd.Kontrol terperinci sudo: sudo dapat mengontrol perintah, argumen, pembuatan sub-shell, dan lain-lain secara rinci. Pendekatan baru akan kehilangan kontrol terperinci ini, dan pengelolaan kunci tepercaya menjadi lebih sulit.
Konfigurasi konsol SSH: Cara mengelola akses root dengan menggunakan konsol SSH khusus. Keamanan diperkuat melalui Yubikey dan pengaturan firewall.
Batasan protokol SSH: SSH bukan menjadikan pembuatan proses sebagai bagian dari protokol, dan tidak dapat meneruskan resource lokal ke proses anak. Untuk digunakan sebagai pengganti sudo, diperlukan ekstensi yang mirip dengan POSIX spawn.
Manajemen pengguna: Penting untuk tidak memperlakukan pengguna seperti anak kecil, melainkan menetapkan default yang masuk akal agar masalah potensial bisa dihindari. Jika akses root diperlukan, masuk melalui konsol lebih disarankan.
Masalah mode pengguna tunggal: Jika tidak bisa login sebagai root dalam mode pengguna tunggal, pemulihan sistem menjadi sulit. Ini diperlukan untuk menyelesaikan masalah yang dapat terjadi selama upgrade sistem.