Sử dụng SSH qua ổ cắm UNIX thay vì sudo để loại bỏ các tệp suid

Timothee Ravier từ Red Hat, người duy trì dự án Fedora Silverblue và Fedora Kinoite, đã đề xuất một cách để tránh sử dụng tiện ích sudo, tiện ích này sử dụng bit suid để nâng cao đặc quyền. Thay vì sudo, để người dùng bình thường thực thi các lệnh có quyền root, người dùng nên sử dụng tiện ích ssh có kết nối cục bộ với cùng hệ thống thông qua ổ cắm UNIX và xác minh quyền dựa trên khóa SSH.

Việc sử dụng ssh thay vì sudo cho phép bạn loại bỏ các chương trình suid trên hệ thống và cho phép thực thi các lệnh đặc quyền trong môi trường máy chủ của các bản phân phối sử dụng các thành phần cách ly vùng chứa, chẳng hạn như Fedora Silverblue, Fedora Kinoite, Fedora Sericea và Fedora Onyx. Để hạn chế quyền truy cập, có thể sử dụng thêm xác nhận quyền sử dụng mã thông báo USB (ví dụ: Yubikey).

Một ví dụ về cách định cấu hình các thành phần máy chủ OpenSSH để truy cập thông qua ổ cắm Unix cục bộ (một phiên bản sshd riêng sẽ được khởi chạy với tệp cấu hình riêng của nó):

/etc/systemd/system/sshd-unix.socket: [Unit] Description=OpenSSH Server Unix Socket Documentation=man:sshd(8) man:sshd_config(5) [Socket] ListenStream=/run/sshd.sock Accept=yes [Cài đặt] WantedBy=sockets.target

/ etc / systemd / system /[email được bảo vệ]: [Unit] Description=OpenSSH trên mỗi kết nối daemon máy chủ (Unix socket) Documentation=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [Service] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # Chỉ để lại xác thực khóa PermitRootLogin cấm mật khẩu Mật khẩuAuthentication không PermitEmptyPasswords không GSSAPIAuthentication không # hạn chế quyền truy cập đối với những người dùng đã chọn Tên người dùng quản trị viên gốc AllowUsers # Chỉ cho phép sử dụng .ssh/authorized_keys (không có .ssh/authorized_keys2 AuthorizedKeysFile .ssh /authorized_ key # kích hoạt sftp Hệ thống con sftp /usr/libexec/openssh/sftp-server

Kích hoạt và khởi chạy đơn vị systemd: sudo systemctl daemon-reload sudo systemctl kích hoạt —now sshd-unix.socket

Thêm khóa SSH của bạn vào /root/.ssh/authorized_keys

Thiết lập máy khách SSH.

Cài đặt tiện ích socat: sudo dnf install socat

Chúng tôi bổ sung /.ssh/config bằng cách chỉ định socat làm proxy để truy cập qua ổ cắm UNIX: Host Host.local User root # Sử dụng /run/host/run thay vì /run để làm việc từ vùng chứa ProxyCommand socat - UNIX-CLIENT: / run/ Host/run/sshd.sock # Đường dẫn đến khóa SSH IdentityFile ~/.ssh/keys/localroot # Kích hoạt hỗ trợ TTY cho shell tương tácRequestTTY có # Xóa đầu ra không cần thiết LogLevel QUIET

Ở dạng hiện tại, tên người dùng quản trị viên giờ đây sẽ có thể thực thi các lệnh với quyền root mà không cần nhập mật khẩu. Kiểm tra hoạt động: $ ssh Host.local [root ~]#

Chúng tôi tạo bí danh sudohost trong bash để chạy “ssh Host.local”, tương tự như sudo: sudohost() { if [[ ${#} -eq 0 ]]; sau đó ssh Host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh Host.local "cd \"${PWD}\"; thực thi \»${@}\»» fi }

Kiểm tra: $ sudohost id uid=0(root) gid=0(root)groups=0(root)

Chúng tôi thêm thông tin xác thực và bật xác thực hai yếu tố, chỉ cho phép truy cập root khi cắm mã thông báo USB Yubikey.

Chúng tôi kiểm tra những thuật toán nào được Yubikey hiện có hỗ trợ: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | ôi '{print $2}'

Nếu đầu ra là 5.2.3 trở lên, hãy sử dụng ed25519-sk khi tạo khóa, nếu không hãy sử dụng ecdsa-sk: ssh-keygen -t ed25519-sk hoặc ssh-keygen -t ecdsa-sk

Thêm khóa chung vào /root/.ssh/authorized_keys

Thêm loại khóa liên kết với cấu hình sshd: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [email được bảo vệ],[email được bảo vệ]

Chúng tôi hạn chế quyền truy cập vào ổ cắm Unix chỉ đối với người dùng có thể nâng cao đặc quyền (trong ví dụ của chúng tôi là tên người dùng quản trị viên). Trong /etc/systemd/system/sshd-unix.socket thêm: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Nguồn: opennet.ru

Thêm một lời nhận xét