Օգտագործելով SSH UNIX վարդակից sudo-ի փոխարեն՝ suid ֆայլերից ազատվելու համար

Թիմոթի Ռավիերը 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

Добавить комментарий