suid ဖိုင်များကိုဖယ်ရှားရန် sudo အစား UNIX socket မှ SSH ကိုအသုံးပြုခြင်း။

Fedora Silverblue နှင့် Fedora Kinoite ပရောဂျက်များကိုထိန်းသိမ်းသူ Red Hat မှ Timothee Ravier သည် အခွင့်ထူးများတိုးမြင့်ရန်အတွက် suid bit ကိုအသုံးပြုသည့် sudo utility ကိုအသုံးပြုခြင်းကိုရှောင်ရှားရန်နည်းလမ်းကိုအဆိုပြုခဲ့သည်။ sudo အစား၊ ပုံမှန်အသုံးပြုသူတစ်ဦးအတွက် root လုပ်ပိုင်ခွင့်ရှိသော command များကိုလုပ်ဆောင်ရန်အတွက်၊ ၎င်းသည် UNIX socket မှတစ်ဆင့် တူညီသောစနစ်သို့ local connection တစ်ခုဖြင့် ssh utility ကိုအသုံးပြုရန်နှင့် SSH keys များကိုအခြေခံသည့်ခွင့်ပြုချက်များကိုအတည်ပြုခြင်းမှအဆိုပြုထားသည်။

sudo အစား ssh ကိုအသုံးပြုခြင်းဖြင့် သင်သည် စနစ်ရှိ suid ပရိုဂရမ်များကို ဖယ်ရှားနိုင်ပြီး Fedora Silverblue၊ Fedora Kinoite၊ Fedora Sericea နှင့် Fedora Onyx ကဲ့သို့သော ကွန်တိန်နာအထီးကျန်အစိတ်အပိုင်းများကို အသုံးပြုသည့် ဖြန့်ဖြူးမှုများ၏ host ပတ်၀န်းကျင်တွင် အခွင့်ထူးခံအမိန့်များကို လုပ်ဆောင်နိုင်စေမည်ဖြစ်သည်။ ဝင်ရောက်ခွင့်ကို ကန့်သတ်ရန်၊ USB တိုကင် (ဥပမာ၊ Yubikey) ကို အသုံးပြု၍ အခွင့်အာဏာ၏ အတည်ပြုချက်ကို ထပ်လောင်းအသုံးပြုနိုင်ပါသည်။

Local Unix socket မှတဆင့် ဝင်ရောက်အသုံးပြုနိုင်ရန်အတွက် OpenSSH ဆာဗာအစိတ်အပိုင်းများကို ပြင်ဆင်သတ်မှတ်ခြင်း၏ ဥပမာတစ်ခု (သီးခြား sshd instance ကို ၎င်း၏ကိုယ်ပိုင် configuration file ဖြင့် စတင်ပါမည်)

/etc/systemd/system/sshd-unix.socket: [ယူနစ်] ဖော်ပြချက်=OpenSSH ဆာဗာ Unix Socket Documentation=man:sshd(8) man:sshd_config(5) [Socket] ListenStream=/run/sshd.sock Accept=yes [Install] WantedBy=sockets.target

/ etc / systemd / system /[အီးမေးလ်ကိုကာကွယ်ထားသည်]: [ယူနစ်] ဖော်ပြချက်=OpenSSH တစ်ခုချင်းချိတ်ဆက်မှု ဆာဗာ daemon (Unix socket) 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 no PermitEmptyPasswords no GSSAPIAuthentication no # သည် ရွေးချယ်ထားသောအသုံးပြုသူများထံသို့ ဝင်ရောက်ခွင့်ကို ကန့်သတ်ထားပါ AllowUsers root adminusername # ၏အသုံးပြုမှုကိုသာ ချန်ထားခဲ့သည် .skey/authorized (authorized) .ssh /authorized_ သော့များ # sftp စနစ်ခွဲ sftp /usr/libexec/openssh/sftp-server ကိုဖွင့်ပါ

systemd ယူနစ်ကို အသက်သွင်းပြီး စတင်ပါ- sudo systemctl daemon-reload sudo systemctl ကိုဖွင့်ပါ —ယခု sshd-unix.socket

/root/.ssh/authorized_keys တွင် သင်၏ SSH ကီးကို ထည့်ပါ။

SSH client ကို စနစ်ထည့်သွင်းခြင်း။

socat utility ကို install လုပ်ပါ- sudo dnf socat ကို install လုပ်ပါ။

UNIX socket မှတဆင့်ဝင်ရောက်ခွင့်အတွက် socat ကို proxy အဖြစ် သတ်မှတ်ခြင်းဖြင့် ကျွန်ုပ်တို့သည် /.ssh/config အားဖြည့်သွင်းသည်- Host host.local User root # အသုံးပြုပါ /run/host/run ကွန်တိန်နာများမှ ProxyCommand socat - UNIX-CLIENT: /run အစား /run/host/run ကိုအသုံးပြုပါ။ run/host/run/sshd.sock # SSH သော့ IdentityFile သို့လမ်းကြောင်း ~/.ssh/keys/localroot # အပြန်အလှန်အကျိုးသက်ရောက်သော shell အတွက် TTY ပံ့ပိုးမှုကို ဖွင့်ပါ RequestTTY yes # မလိုအပ်သော output LogLevel QUIET ကို ဖယ်ရှားပါ

၎င်း၏လက်ရှိပုံစံတွင်၊ အသုံးပြုသူစီမံခန့်ခွဲသူအမည်သည် စကားဝှက်မထည့်ဘဲ root အနေဖြင့် အမိန့်ပေးမှုများကို လုပ်ဆောင်နိုင်မည်ဖြစ်သည်။ လုပ်ဆောင်ချက်ကို စစ်ဆေးနေသည်- $ssh host.local [root ~]#

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) groups=0(root)

ကျွန်ုပ်တို့သည် အထောက်အထားများကို ပေါင်းထည့်ကာ Yubikey USB တိုကင်ကို ထည့်သွင်းထားမှသာ အမြစ်ဝင်ရောက်ခွင့်ကို ခွင့်ပြုပေးပါသည်။

လက်ရှိ Yubikey မှ မည်သည့် algorithms ကို ပံ့ပိုးထားသည်ကို ကျွန်ုပ်တို့ စစ်ဆေးသည်- 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 socket သို့ ဝင်ရောက်ခွင့်ကို ကန့်သတ်ထားပါသည် (ကျွန်ုပ်တို့၏ ဥပမာအားဖြင့်၊ စီမံခန့်ခွဲသူအမည်) ရှိသော အသုံးပြုသူကိုသာ ကန့်သတ်ထားပါသည်။ /etc/systemd/system/sshd-unix.socket တွင် ပေါင်းထည့်ပါ- [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

source: opennet.ru

မှတ်ချက် Add