Π’ΠΈΠΌΠΎΡΠΈ Π Π°Π²ΡΠ΅ (Timothee Ravier) ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Red Hat, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ½ΠΈΠΊ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ Fedora Silverblue ΠΈ Fedora Kinoite, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈ Π½Π°ΡΠΈΠ½ Π·Π° ΠΈΠ·Π±ΡΠ³Π²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° sudo, ΠΊΠΎΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° suid-Π±ΠΈΡ Π·Π° ΠΏΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈΡΠ΅. ΠΠΌΠ΅ΡΡΠΎ sudo, Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Ρ ΠΏΡΠ°Π²Π° root ΠΎΡ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° ssh Ρ Π»ΠΎΠΊΠ°Π»Π½Π° Π²ΡΡΠ·ΠΊΠ° ΠΊΡΠΌ ΡΡΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΡΠ΅Π· UNIX-ΡΠΎΠΊΠ΅Ρ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠ°Π²Π°ΡΠ° Ρ SSH-ΠΊΠ»ΡΡΠΎΠ²Π΅.
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ssh Π²ΠΌΠ΅ΡΡΠΎ sudo ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π°Ρ suid-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΈ Π΄Π° ΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π² Ρ ΠΎΡΡ-ΡΡΠ΅Π΄Π° Π½Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½Π° ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅, ΠΊΠ°ΡΠΎ Fedora Silverblue, Fedora Kinoite, Fedora Sericea ΠΈ Fedora Onyx. ΠΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈ ΠΏΠΎΡΠ²ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ°Π²Π°ΡΠ° ΡΡΠ΅Π· USB-ΡΠΎΠΊΠ΅Π½ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Yubikey).
ΠΡΠΈΠΌΠ΅Ρ Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΡΡΡΠ²ΡΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π½Π° OpenSSH Π·Π° Π΄ΠΎΡΡΡΠΏ ΡΡΠ΅Π· Π»ΠΎΠΊΠ°Π»Π΅Π½ Unix-ΡΠΎΠΊΠ΅Ρ (ΡΠ΅ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΎΡΠ΄Π΅Π»Π΅Π½ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π° sshd ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π΅Π½ ΡΠ°ΠΉΠ»):
/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 [Install] WantedBy=sockets.target
/etc/systemd/system/sshd-unix@.service: [Unit] Description=OpenSSH per-connection server daemon (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: # ΠΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΏΠΎ ΠΊΠ»ΡΡΠ°ΠΌ PermitRootLogin prohibit-password PasswordAuthentication no PermitEmptyPasswords no GSSAPIAuthentication no # ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΠΌ Π΄ΠΎΡΡΡΠΏ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ AllowUsers root adminusername # ΠΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ .ssh/authorized_keys (Π±Π΅Π· .ssh/authorized_keys2 AuthorizedKeysFile .ssh/authorized_keys # Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ sftp Subsystem sftp /usr/libexec/openssh/sftp-server
ΠΠΊΡΠΈΠ²ΠΈΡΠ°ΠΌΠ΅ ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠ½ΠΈΡΠ° systemd: sudo systemctl daemon-reload sudo systemctl enable βnow sshd-unix.socket
ΠΠΎΠ±Π°Π²ΡΠΌΠ΅ ΡΠ²ΠΎΡ SSH-ΠΊΠ»ΡΡ Π² /root/.ssh/authorized_keys
ΠΠ°ΡΡΡΠΎΠΉΠ²Π°ΠΌΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° SSH-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° socat: sudo dnf install socat
ΠΠΎΠΏΡΠ»Π²Π°ΠΌΠ΅ /.ssh/config, ΡΠΊΠ°Π·Π²Π°ΠΉΠΊΠΈ socat ΠΊΠ°ΡΠΎ ΠΏΡΠΎΠΊΡΠΈ Π·Π° Π΄ΠΎΡΡΡΠΏ ΠΏΡΠ΅Π· UNIX-ΡΠΎΠΊΠ΅Ρ: Host host.local User root # ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ /run/host/run Π²ΠΌΠ΅ΡΡΠΎ /run Π·Π° ΡΠ°Π±ΠΎΡΠ° ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ProxyCommand socat β UNIX-CLIENT:/run/host/run/sshd.sock # ΠΡΡ ΠΊΡΠΌ SSH-ΠΊΠ»ΡΡΠ° IdentityFile ~/ .ssh/keys/localroot # ΠΠΊΠ»ΡΡΠ²Π°ΠΌΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° TTY Π·Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° RequestTTY yes # ΠΡΠ΅ΠΌΠ°Ρ Π²Π°ΠΌΠ΅ ΠΈΠ·Π»ΠΈΡΠ½ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄ LogLevel QUIET
Π ΡΠ΅Π³Π°ΡΠ½ΠΈΡ Π²ΠΈΠ΄, ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ adminusername ΡΠ΅Π³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Ρ ΠΏΡΠ°Π²Π° root Π±Π΅Π· Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΠ°ΡΠΎΠ»Π°. ΠΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΠ°: $ ssh host.local [root ~]#
Π‘ΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π² bash ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ sudohost Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Β«ssh host.localΒ» ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ Ρ sudo: sudohost() { if [[ ${#} -eq 0 ]]; then ssh host.local Β«cd \β${PWD}\βΒ»; exec \Β»${SHELL}\Β» βloginΒ» else ssh host.local Β«cd \β${PWD}\βΒ»; exec \Β»${@}\»» fi }
ΠΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅: $ sudohost id uid=0(root) gid=0(root) groups=0(root)
ΠΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠ°Π²Π°ΡΠ° ΠΈ Π²ΠΊΠ»ΡΡΠ²Π°ΠΌΠ΅ Π΄Π²ΡΡΠ°ΠΊΡΠΎΡΠ½Π° Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡ, Π΄ΠΎΠΏΡΡΠΊΠ°ΡΠ° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ root ΡΠ°ΠΌΠΎ ΠΏΡΠΈζΠ²Π°Π½Π΅ Π½Π° USB-ΡΠΎΠΊΠ΅Π½ Yubikey.
ΠΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ ΠΊΠΎΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π½Π°Π»ΠΈΡΠ½ΠΈΡΡ Yubikey: lsusb -v 2>/dev/null | grep -A2 Yubico | grep Β«bcdDeviceΒ» | awk β{print $2}β
ΠΠΊΠΎ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΎΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΅ 5.2.3 ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ed25519-sk ΠΏΡΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠ»ΡΡΠΎΠ²Π΅, Π² ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ β ecdsa-sk: ssh-keygen -t ed25519-sk ΠΈΠ»ΠΈ ssh-keygen -t ecdsa-sk
ΠΠΎΠ±Π°Π²Ρ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈΡ ΠΊΠ»ΡΡ Π² /root/.ssh/authorized_keys
ΠΠΎΠ±Π°Π²ΡΠΌΠ΅ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠΏΠ° ΠΊΠ»ΡΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° sshd: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes sk-ecdsa-sha2-nistp256@openssh.com,sk-ssh-ed25519@openssh.com
ΠΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°ΠΌΠ΅ Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ Unix-ΡΠΎΠΊΠ΅ΡΠ° ΡΠ°ΠΌΠΎ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ, Π½Π° ΠΊΠΎΠ³ΠΎΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ²ΠΈΡΠ°Ρ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈΡΠ΅ (Π² Π½Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ β adminusername). Π /etc/systemd/system/sshd-unix.socket Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅: [Socket] β¦ SocketUser=adminusername SocketGroup=adminusername SocketMode=0660
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
