suid ఫైల్‌లను వదిలించుకోవడానికి sudoకి బదులుగా UNIX సాకెట్‌లో SSHని ఉపయోగించడం

Red Hat నుండి Timothee Ravier, Fedora Silverblue మరియు Fedora Kinoite ప్రాజెక్ట్‌ల నిర్వహణదారు, సుడో యుటిలిటీని ఉపయోగించకుండా ఉండటానికి ఒక మార్గాన్ని ప్రతిపాదించారు, ఇది అధికారాలను పెంచడానికి suid బిట్‌ను ఉపయోగిస్తుంది. sudoకి బదులుగా, ఒక సాధారణ వినియోగదారు రూట్ హక్కులతో ఆదేశాలను అమలు చేయడానికి, UNIX సాకెట్ మరియు SSH కీల ఆధారంగా అనుమతుల ధృవీకరణ ద్వారా అదే సిస్టమ్‌కు స్థానిక కనెక్షన్‌తో ssh యుటిలిటీని ఉపయోగించాలని ప్రతిపాదించబడింది.

sudoకి బదులుగా sshని ఉపయోగించడం వలన సిస్టమ్‌లోని సూయిడ్ ప్రోగ్రామ్‌లను వదిలించుకోవడానికి మరియు Fedora Silverblue, Fedora Kinoite, Fedora Sericea మరియు Fedora Onyx వంటి కంటైనర్ ఐసోలేషన్ భాగాలను ఉపయోగించే డిస్ట్రిబ్యూషన్‌ల హోస్ట్ ఎన్విరాన్‌మెంట్‌లో ప్రివిలేజ్డ్ కమాండ్‌లను అమలు చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. యాక్సెస్‌ని పరిమితం చేయడానికి, USB టోకెన్‌ని (ఉదాహరణకు, Yubikey) ఉపయోగించి అధికార నిర్ధారణను అదనంగా ఉపయోగించవచ్చు.

స్థానిక Unix సాకెట్ ద్వారా యాక్సెస్ కోసం OpenSSH సర్వర్ భాగాలను కాన్ఫిగర్ చేయడానికి ఒక ఉదాహరణ (ఒక ప్రత్యేక sshd ఉదాహరణ దాని స్వంత కాన్ఫిగరేషన్ ఫైల్‌తో ప్రారంభించబడుతుంది):

/etc/systemd/system/sshd-unix.socket: [యూనిట్] వివరణ=OpenSSH సర్వర్ Unix సాకెట్ డాక్యుమెంటేషన్=man:sshd(8) man:sshd_config(5) [సాకెట్] ListenStream=/run/sshd.sock అంగీకరించు=అవును [ఇన్‌స్టాల్] WantedBy=sockets.target

/ Etc / systemd / వ్యవస్థ /[ఇమెయిల్ రక్షించబడింది]: [యూనిట్] వివరణ=OpenSSH పర్-కనెక్షన్ సర్వర్ డెమోన్ (Unix సాకెట్) డాక్యుమెంటేషన్=man:sshd(8) మనిషి: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 నిషేధిత-పాస్‌వర్డ్ పాస్‌వర్డ్ ప్రామాణీకరణ లేదు అనుమతి ఖాళీ పాస్‌వర్డ్‌లు లేవు GSSAPIAప్రామాణీకరణ సంఖ్య # ఎంచుకున్న వినియోగదారులకు ప్రాప్యతను పరిమితం చేస్తుంది keys2 AuthorizedKeysFile .ssh /authorized_ keys # sftp సబ్‌సిస్టమ్ sftp /usr/libexec/openssh/sftp-serverని ప్రారంభించండి

systemd యూనిట్‌ని సక్రియం చేయండి మరియు ప్రారంభించండి: sudo systemctl డెమోన్-రీలోడ్ sudo systemctl ఎనేబుల్ —ఇప్పుడు sshd-unix.socket

మీ SSH కీని /root/.ssh/authorized_keysకి జోడించండి

SSH క్లయింట్‌ని సెటప్ చేస్తోంది.

Socat యుటిలిటీని ఇన్‌స్టాల్ చేయండి: sudo dnf ఇన్‌స్టాల్ socat

మేము UNIX సాకెట్ ద్వారా ప్రాక్సీ కోసం socatని ప్రాక్సీగా పేర్కొనడం ద్వారా /.ssh/configని సప్లిమెంట్ చేస్తాము: హోస్ట్ హోస్ట్.లోకల్ యూజర్ రూట్ # కంటైనర్‌ల నుండి పని చేయడానికి /రన్/రన్ చేయడానికి బదులుగా /రన్/హోస్ట్/రన్ ఉపయోగించండి ProxyCommand socat - UNIX-క్లయింట్: / run/ host/run/sshd.sock # SSH కీ IdentityFileకి మార్గం ~/.ssh/keys/localroot # ఇంటరాక్టివ్ షెల్ కోసం TTY మద్దతును ప్రారంభించండి

దాని ప్రస్తుత రూపంలో, వినియోగదారు నిర్వాహక వినియోగదారు పేరు పాస్‌వర్డ్‌ను నమోదు చేయకుండా రూట్‌గా ఆదేశాలను అమలు చేయగలదు. ఆపరేషన్‌ని తనిఖీ చేస్తోంది: $ ssh host.local [రూట్ ~]#

మేము sudo మాదిరిగానే “ssh host.local”ని అమలు చేయడానికి బాష్‌లో sudohost అలియాస్‌ని సృష్టిస్తాము: sudohost() { if [[ ${#} -eq 0 ]]; తర్వాత ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

తనిఖీ చేయండి: $ sudohost id uid=0(రూట్) gid=0(రూట్) సమూహాలు=0(రూట్)

మేము ఆధారాలను జోడించి, రెండు-కారకాల ప్రమాణీకరణను ప్రారంభిస్తాము, Yubikey USB టోకెన్ చొప్పించినప్పుడు మాత్రమే రూట్ యాక్సెస్‌ని అనుమతిస్తాము.

మేము ఇప్పటికే ఉన్న Yubikey ద్వారా ఏ అల్గారిథమ్‌లకు మద్దతు ఇస్తాయో తనిఖీ చేస్తాము: lsusb -v 2>/dev/null | grep -A2 యుబికో | 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లో జోడించు: [సాకెట్] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి