Թիմոթի Ռավիերը Red Hat-ից, Fedora Silverblue և Fedora Kinoite նախագծերի սպասարկող, առաջարկել է sudo կոմունալից խուսափելու միջոց, որն օգտագործում է suid բիթը՝ արտոնությունները մեծացնելու համար: Sudo-ի փոխարեն սովորական օգտագործողի համար արմատային իրավունքներով հրամաններ կատարելու համար առաջարկվում է օգտագործել ssh կոմունալը նույն համակարգին տեղական միացումով UNIX վարդակի միջոցով և թույլտվությունների ստուգում՝ հիմնված SSH ստեղների վրա:
Sudo-ի փոխարեն ssh-ի օգտագործումը թույլ է տալիս ձերբազատվել համակարգում suid ծրագրերից և միացնել արտոնյալ հրամանների կատարումը բաշխումների հյուրընկալող միջավայրում, որոնք օգտագործում են կոնտեյների մեկուսացման բաղադրիչներ, ինչպիսիք են Fedora Silverblue, Fedora Kinoite, Fedora Sericea և Fedora Onyx: Մուտքը սահմանափակելու համար կարող է լրացուցիչ օգտագործվել լիազորությունների հաստատումը USB նշանի միջոցով (օրինակ՝ Yubikey):
OpenSSH սերվերի բաղադրիչները տեղական Unix վարդակից մուտք գործելու համար կազմաձևելու օրինակ (առանձին sshd օրինակ կգործարկվի իր սեփական կազմաձևման ֆայլով).
/etc/systemd/system/sshd-unix.socket: [Unit] Նկարագրություն=OpenSSH Server Unix Socket Documentation=man:sshd(8) man:sshd_config(5) [Socket] ListenStream=/run/sshd.sock Accept=yes [Տեղադրեք] WantedBy=sockets.target
/ etc / systemd / system /[էլեկտրոնային փոստով պաշտպանված][Միավոր] Նկարագրություն=OpenSSH յուրաքանչյուր միացման սերվերի դաեմոն (Unix վարդակից) Documentation=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 արգելել-գաղտնաբառ PasswordAuthentication առանց PermitEmptyPasswords ոչ GSSAPIA նույնականացում ոչ # սահմանափակում է մուտքը ընտրված օգտվողներին AllowUsers root adminusername # Թողնում է միայն օգտագործման համարը: 2 AuthorizedKeysFile .ssh /authorized_ keys # enable sftp Ենթահամակարգ sftp /usr/libexec/openssh/sftp-server
Ակտիվացրեք և գործարկեք systemd միավորը. sudo systemctl daemon-reload sudo systemctl միացնել — այժմ 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 այո # Հեռացնել ավելորդ ելքը LogLevel QUIET
Ներկա ձևով օգտվողի ադմինիստրատորի անունը այժմ կկարողանա հրամաններ կատարել որպես root առանց գաղտնաբառ մուտքագրելու: Գործողության ստուգում. $ ssh host.local [root ~]#
Մենք bash-ում ստեղծում ենք sudohost կեղծանուն՝ «ssh host.local» գործարկելու համար, որը նման է sudo-ին. sudohost() { if [[ ${#} -eq 0 ]]; ապա ssh host.local «cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }
Ստուգեք՝ $ sudohost id uid=0(root) gid=0(root) խմբեր=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 [էլեկտրոնային փոստով պաշտպանված],[էլեկտրոնային փոստով պաշտպանված]
Մենք սահմանափակում ենք Unix վարդակից մուտքը միայն այն օգտվողին, ով կարող է բարձրացված արտոնություններ ունենալ (մեր օրինակում՝ ադմինիստրատորի անուն): /etc/systemd/system/sshd-unix.socket-ում ավելացրեք՝ [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660
Source: opennet.ru