suid рдлрд╛рдЗрд▓рд╣рд░реВрдмрд╛рдЯ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдЙрди sudo рдХреЛ рд╕рдЯреНрдЯрд╛ UNIX рд╕рдХреЗрдЯрдорд╛ SSH рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

Red Hat рдмрд╛рдЯ Timothee Ravier, Fedora Silverblue рд░ Fedora Kinoite рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдХреЛ рдорд░реНрдорддрдХрд░реНрддрд╛, sudo рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирдмрд╛рдЯ рдмрдЪреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рддрд░рд┐рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░реЗ, рдЬрд╕рд▓реЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░рд╣рд░реВ рдмрдврд╛рдЙрди suid рдмрд┐рдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред sudo рдХреЛ рд╕рдЯреНрдЯрд╛, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓рд╛рдЧрд┐ рд░реВрдЯ рдЕрдзрд┐рдХрд╛рд░ рд╕рдВрдЧ рдЖрджреЗрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА, рдпреЛ UNIX рд╕рдХреЗрдЯ рдорд╛рд░реНрдлрдд рд╕реНрдерд╛рдиреАрдп рдЬрдбрд╛рди рд╕рдВрдЧ ssh рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдЙрдкрдпреЛрдЧ рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ SSH рдХреБрдЮреНрдЬреАрд╣рд░реБ рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрдорддрд┐рд╣рд░реБ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдХрд░рдгред

sudo рдХреЛ рд╕рдЯреНрдЯрд╛ ssh рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирд╛рд▓реЗ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдкреНрд░рдгрд╛рд▓реАрдорд╛ suid рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВрдмрд╛рдЯ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдЙрди рд░ Fedora Silverblue, Fedora Kinoite, Fedora Sericea рд░ Fedora Onyx рдЬрд╕реНрддрд╛ рдХрдиреНрдЯреЗрдирд░ рдЖрдЗрд╕реЛрд▓реЗрд╕рди рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╡рд┐рддрд░рдгрдХреЛ рд╣реЛрд╕реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдЖрджреЗрд╢рд╣рд░реВрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдХреНрд╖рдо рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдкрд╣реБрдБрдЪ рдкреНрд░рддрд┐рдмрдиреНрдз рдЧрд░реНрди, рдПрдХ USB рдЯреЛрдХрди (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, Yubikey) рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдгрдХреЛ рдкреБрд╖реНрдЯрд┐ рдердк рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рд╕реНрдерд╛рдиреАрдп рдпреБрдирд┐рдХреНрд╕ рд╕рдХреЗрдЯ рдорд╛рд░реНрдлрдд рдкрд╣реБрдБрдЪрдХреЛ рд▓рд╛рдЧрд┐ OpenSSH рд╕рд░реНрднрд░ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдг (рдЕрд▓рдЧ sshd рдЙрджрд╛рд╣рд░рдг рдпрд╕рдХреЛ рдЖрдлреНрдиреИ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рдХреЛ рд╕рд╛рде рд╕реБрд░реВ рдЧрд░рд┐рдиреЗрдЫ):

/etc/systemd/system/sshd-unix.socket: [рдЗрдХрд╛рдИ] рд╡рд┐рд╡рд░рдг=OpenSSH рд╕рд░реНрднрд░ рдпреБрдирд┐рдХреНрд╕ рд╕рдХреЗрдЯ рдХрд╛рдЧрдЬрд╛рдд=man:sshd(8) man:sshd_config(5) [рд╕рдХреЗрдЯ] ListenStream=/run/sshd.sock Accept=yes [рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН] WantedBy=sockets.target

/ etc / systemd / system /[рдИрдореЗрд▓ рд╕реБрд░рдХреНрд╖рд┐рдд]: [рдЗрдХрд╛рдИ] рд╡рд┐рд╡рд░рдг=OpenSSH рдкреНрд░рддрд┐-рдЬрдбрд╛рди рд╕рд░реНрднрд░ рдбреЗрдорди (рдпреБрдирд┐рдХреНрд╕ рд╕рдХреЗрдЯ) рдХрд╛рдЧрдЬрд╛рдд=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [рд╕реЗрд╡рд╛] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # рдХреБрдЮреНрдЬреА рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдорд╛рддреНрд░ рдЫреЛрдбреНрдЫ PermitRootLogin рдирд┐рд╖реЗрдз-рдкрд╛рд╕рд╡рд░реНрдб рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреБрдиреИ PermitEmptyPasswords рдХреБрдиреИ GSSAPIA рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЫреИрди # рдЪрдпрди рдЧрд░рд┐рдПрдХрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдкрд╣реБрдБрдЪ рдкреНрд░рддрд┐рдмрдиреНрдзрд┐рдд рдЧрд░реНрджрдЫ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рд░реВрдЯ рдкреНрд░рд╢рд╛рд╕рдХ рдирд╛рдо # рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред 2 рдЕрдзрд┐рдХреГрдд рдХреБрдЮреНрдЬреА рдлрд╛рдЗрд▓ .ssh /рдЕрдзрд┐рдХреГрдд_ рдХреБрдЮреНрдЬреАрд╣рд░реВ # sftp рдЙрдкрдкреНрд░рдгрд╛рд▓реА рд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН sftp /usr/libexec/openssh/sftp-рд╕рд░реНрднрд░

рд╕рдХреНрд░рд┐рдп рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ systemd рдПрдХрд╛рдЗ рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН: sudo systemctl deemon-reload sudo systemctl enable тАФ now sshd-unix.socket

рдЖрдлреНрдиреЛ SSH рдХреБрдЮреНрдЬреА /root/.ssh/authorized_keys рдорд╛ рдердкреНрдиреБрд╣реЛрд╕реН

SSH рдЧреНрд░рд╛рд╣рдХ рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИред

socat рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН: sudo dnf socat рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рд╣рд╛рдореА /.ssh/config рд▓рд╛рдИ UNIX рд╕рдХреЗрдЯ рдорд╛рд░реНрдлрдд рдкрд╣реБрдБрдЪрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░реЛрдХреНрд╕реАрдХреЛ рд░реВрдкрдорд╛ socat рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реЗрд░ рдкреВрд░рдХ рдЧрд░реНрдЫреМрдВ: рд╣реЛрд╕реНрдЯ host.local рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд░реВрдЯ # рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдмрд╛рдЯ рдХрд╛рдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ /run/host/run рдХреЛ рд╕рдЯреНрдЯрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН ProxyCommand socat - UNIX-CLIENT: / run/host/run/sshd.sock # SSH рдХреБрдЮреНрдЬреА IdentityFile рдХреЛ рд▓рд╛рдЧрд┐ рдкрде ~/.ssh/keys/localroot # рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╢реЗрд▓рдХреЛ рд▓рд╛рдЧрд┐ TTY рд╕рдорд░реНрдерди рд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН RequestTTY рд╣реЛ # рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЖрдЙрдЯрдкреБрдЯ рд╣рдЯрд╛рдЙрдиреБрд╣реЛрд╕реН LogLevel QUIET

рдпрд╕рдХреЛ рд╣рд╛рд▓рдХреЛ рдлрд╛рд░рдордорд╛, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╢рд╛рд╕рдХ рдирд╛рдорд▓реЗ рдЕрдм рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯ рдирдЧрд░реА рд░реВрдЯрдХреЛ рд░реВрдкрдорд╛ рдЖрджреЗрд╢рд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреЗрдЫред рд╕рдЮреНрдЪрд╛рд▓рди рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ: $ ssh host.local [рд░реВрдЯ ~]#

рд╣рд╛рдореАрд▓реЗ sudo: sudohost() { if [[ ${#} -eq 0 ]] рдЬрд╕реНрддреИ, "ssh host.local" рдЪрд▓рд╛рдЙрди bash рдорд╛ sudohost рдЙрдкрдирд╛рдо рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВ; рддреНрдпрд╕рдкрдЫрд┐ ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \"${@}\"┬╗ fi }

рдЬрд╛рдБрдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН: $ sudohost id uid=0(root) gid=0(root) group=0(root)

рд╣рд╛рдореА рдкреНрд░рдорд╛рдгрд╣рд░реВ рдердкреНрдЫреМрдВ рд░ Yubikey USB рдЯреЛрдХрди рд╕рдореНрдорд┐рд▓рд┐рдд рд╣реБрдБрджрд╛ рдорд╛рддреНрд░ рд░реВрдЯ рдкрд╣реБрдБрдЪ рдЕрдиреБрдорддрд┐ рджрд┐рдБрджреИ рджреБрдИ-рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдХреНрд╖рдо рдЧрд░реНрдЫреМрдВред

рд╣рд╛рдореА рдЕрд╡рд╕реНрдерд┐рдд 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 [рдИрдореЗрд▓ рд╕реБрд░рдХреНрд╖рд┐рдд],[рдИрдореЗрд▓ рд╕реБрд░рдХреНрд╖рд┐рдд]

рд╣рд╛рдореАрд▓реЗ рдпреБрдирд┐рдХреНрд╕ рд╕рдХреЗрдЯрдорд╛ рдкрд╣реБрдБрдЪрд▓рд╛рдИ рд╕реАрдорд┐рдд рдЧрд░реНрдЫреМрдВ рдЬрд╕рд▓реЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░рд╣рд░реВ рдорд╛рдерд┐ рдЙрдард╛рдЙрди рд╕рдХреНрдЫ (рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рдкреНрд░рд╢рд╛рд╕рдХ рдирд╛рдо)ред /etc/systemd/system/sshd-unix.socket рдорд╛ рдердкреНрдиреБрд╣реЛрд╕реН: [рд╕рдХреЗрдЯ] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

рд╕реНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди