Jak omezit uživatele SSH?

hknmtt

  • ****
  • 250
    • Zobrazit profil
    • E-mail
Jak omezit uživatele SSH?
« kdy: 21. 03. 2025, 14:57:12 »
Mam dedikovaneho pouzivatela, ktory sa ako jediny moze SSHnut na server. Nasledne sa pouzivatel musi prehlasit do roota(schvalne nemam sudo pouzivatelov). Chcel by som tohto "ssh" pouzivatela obmedzit v tom, ze nemoze na serveri nic realne robit. Je to nejak mozne? Pozeral som, ze by mozno bolo mozne obmedzit pouzivatela aby nemohol vyjst zo svojej domacej zlozky, pripadne upravit bash config, ale neviem ktory postup je najvhodnejsi. Prakticky uloha tohto pouzivatela je len spominany ssh login + moznost nahravat subory do svojej home slozky, ktore potom root moze prekopirovat kam je potreba.


Re:Jak omezit uživatele SSH?
« Odpověď #1 kdy: 21. 03. 2025, 15:09:37 »

hknmtt

  • ****
  • 250
    • Zobrazit profil
    • E-mail
Re:Jak omezit uživatele SSH?
« Odpověď #2 kdy: 21. 03. 2025, 15:29:25 »
To je iba obmedzenie pre sftp zlozky, mne ide skor o to ked sa pouzivatel sshne do systemu, aby realne jedine co mohol urobit, okrem uploadu suboru, sa mohol prakticky iba prehlasit cez su do roota. Cize nechcem aby sa prechadzal po systeme alebo spustal akekolvek prikazy. Ratam ze asi najvhodnejsie je upravit jeho bash skript a povolit len nejake prikazy, tzn. nemoze napriklad cd / alebo rm /foo/bar


Re:Jak omezit uživatele SSH?
« Odpověď #4 kdy: 21. 03. 2025, 18:40:39 »
Já bych začal provedením "mozkového přemýšlení". Ty chceš, aby mohl su do roota, takže mu dáváš admina, ale chceš, aby ten admin nemohl nic dělat. To mi nějako nevychádza.

To je iba obmedzenie pre sftp zlozky, mne ide skor o to ked sa pouzivatel sshne do systemu, aby realne jedine co mohol urobit, okrem uploadu suboru, sa mohol prakticky iba prehlasit cez su do roota. Cize nechcem aby sa prechadzal po systeme alebo spustal akekolvek prikazy. Ratam ze asi najvhodnejsie je upravit jeho bash skript a povolit len nejake prikazy, tzn. nemoze napriklad cd / alebo rm /foo/bar


Wasper

  • ***
  • 158
    • Zobrazit profil
    • E-mail
Re:Jak omezit uživatele SSH?
« Odpověď #5 kdy: 21. 03. 2025, 19:00:31 »
Já bych začal provedením "mozkového přemýšlení". Ty chceš, aby mohl su do roota, takže mu dáváš admina, ale chceš, aby ten admin nemohl nic dělat. To mi nějako nevychádza.
Ale vychadza, v podstate se snazi vybudovat jump host, resp. jump ucet ktery nemuze vubec nic. (su na roota chce heslo/2FA pokud tam ma nejaky ten pam_radius apod.)

Na prvni pohled mi to prijde jako netrivialni, urcite neco jde udelat pres openssh (zakazat vsechny mozne forwardingy) a pres iptables -m owner, z chrootu by se su-ckovalo blbe, takze spis neco jako forced firejail mozna, urcite by toho slo dosahnout pres selinux, ale tam bych (pokud uz nekdo reseni nema hotove) to jako moc trivialni nevidel.

vcunat

  • ***
  • 148
    • Zobrazit profil
    • E-mail
Re:Jak omezit uživatele SSH?
« Odpověď #6 kdy: 21. 03. 2025, 19:02:59 »
Účet který "nemůže nic", jen změnit na roota (tedy vlastně může všechno)?  K čemu to je?

Možná jsme to špatně pochopili a nejde o stejného uživatele?

Re:Jak omezit uživatele SSH?
« Odpověď #7 kdy: 21. 03. 2025, 19:18:23 »
command="/bin/su -" na zacatek radku v authorized_keys jsi zkusil?

Re:Jak omezit uživatele SSH?
« Odpověď #8 kdy: 21. 03. 2025, 20:43:46 »
Takže by se to celé neobešlo bez plného admina, který může všechno?

Já bych začal provedením "mozkového přemýšlení". Ty chceš, aby mohl su do roota, takže mu dáváš admina, ale chceš, aby ten admin nemohl nic dělat. To mi nějako nevychádza.
Ale vychadza, v podstate se snazi vybudovat jump host, resp. jump ucet ktery nemuze vubec nic. (su na roota chce heslo/2FA pokud tam ma nejaky ten pam_radius apod.)

Na prvni pohled mi to prijde jako netrivialni, urcite neco jde udelat pres openssh (zakazat vsechny mozne forwardingy) a pres iptables -m owner, z chrootu by se su-ckovalo blbe, takze spis neco jako forced firejail mozna, urcite by toho slo dosahnout pres selinux, ale tam bych (pokud uz nekdo reseni nema hotove) to jako moc trivialni nevidel.

hknmtt

  • ****
  • 250
    • Zobrazit profil
    • E-mail
Re:Jak omezit uživatele SSH?
« Odpověď #9 kdy: 21. 03. 2025, 21:10:07 »
Este raz teda:

- system nema ziadnych sudo pouzivatelov
- existuje iba jeden pouzivatel, nazvime ho ssh-user, ktory sa moze sshnut do systemu, iba s klucom(tzn. nie heslo alebo ina forma autentifikacie)
- tento pouzivatel moze neobmedzene nahratvat  subory do svojej home zlozky
- tento ssh-user by nemal mat moznost inak robit nic v systeme, okrem "su root", cize nemoze mutovat system alebo subory mimo svojej home zlozky, taktiez by nemal mat moznost vypisovat obsah zloziek mimo svojej home zlozky

jedinym ucelom tohto ssh-user pouzivatela je pristup do systemu, povedzme len do "predsiene" ale nie to celeho domu, a moznost nahrat do povolenej zlozky(/home/ssh-user) subory(sftp).

pre objasnenie, tieto subory su aplikacia + konfiguracne subory, ktora na serveri bezi ako hlavny ucel serveru. v pripade ze unikne ssh kluc von, utocnik sa dostane len do home zlozky tohto pouzivatela a nemoze robit nic co by ovplyvnilo system pretoze by musel bruteforcnut roota.

normalne by sa po nahrati suborov mal pouzivatel prehlasit na roota a ako root potom premiestnit nahrane subory, nova verzia aplikacie, na pozadovane miesto a vykona pozadovane ukony(restart sluby a podobne).

Re:Jak omezit uživatele SSH?
« Odpověď #10 kdy: 21. 03. 2025, 21:50:45 »
chroot?

Re:Jak omezit uživatele SSH?
« Odpověď #11 kdy: 21. 03. 2025, 22:20:46 »

- tento ssh-user by nemal mat moznost inak robit nic v systeme, okrem "su root", cize nemoze mutovat system alebo subory mimo svojej home zlozky, taktiez by nemal mat moznost vypisovat obsah zloziek mimo svojej home zlozky


Hmmm, tak normálně uživatel v Linuxu může mutovat jenom soubory v $HOME a v /tmp.  Proč by nemohl vypisovat obsah jiných adresářů? Třeba když zakážete vypisovat (RX) /usr/bin/ tak to nebude fungovat.

Zase lehko zakážete přístup do /home/tajny_user, jestli šlo v první řadě o toto. Většina distribucí má práva tak, že si uživatelé navzájem nevidí soubory. Pokud bude znát heslo na su, tak se tam dostane.

Re:Jak omezit uživatele SSH?
« Odpověď #12 kdy: 21. 03. 2025, 22:42:10 »
Este raz teda:

- system nema ziadnych sudo pouzivatelov
- existuje iba jeden pouzivatel, nazvime ho ssh-user, ktory sa moze sshnut do systemu, iba s klucom(tzn. nie heslo alebo ina forma autentifikacie)
- tento pouzivatel moze neobmedzene nahratvat  subory do svojej home zlozky
- tento ssh-user by nemal mat moznost inak robit nic v systeme, okrem "su root", cize nemoze mutovat system alebo subory mimo svojej home zlozky, taktiez by nemal mat moznost vypisovat obsah zloziek mimo svojej home zlozky

jedinym ucelom tohto ssh-user pouzivatela je pristup do systemu, povedzme len do "predsiene" ale nie to celeho domu, a moznost nahrat do povolenej zlozky(/home/ssh-user) subory(sftp).

pre objasnenie, tieto subory su aplikacia + konfiguracne subory, ktora na serveri bezi ako hlavny ucel serveru. v pripade ze unikne ssh kluc von, utocnik sa dostane len do home zlozky tohto pouzivatela a nemoze robit nic co by ovplyvnilo system pretoze by musel bruteforcnut roota.

normalne by sa po nahrati suborov mal pouzivatel prehlasit na roota a ako root potom premiestnit nahrane subory, nova verzia aplikacie, na pozadovane miesto a vykona pozadovane ukony(restart sluby a podobne).

Pořád se to snažím pochopit, ale vlastně mi moc nedává smysl nepoužít sudo, polkit nebo doas, kde si můžu vcelku rozumně nakonfigurovat, co může daný uživatel spouštět. Hlavně na rozdíl od příkazu su pak se může vyžadovat heslo toho uživatele a ne roota.
Další věc co mě pak napadá. Je opravdu na správu té aplikace nějakým externím adminem potřeba kopírovat soubory přes scp, někam pak rozbalovat archivy a hrabat se v systému s nejvyššími právy?
Pro řešení aktualizací (resp. lifecycle a deploymentu) aplikací je spousta popsaných a ozkoušených řešení počínaje kontejnerizace s Kubernetes, přes hostování nějakého vlastního docker registry, spousty nějakých dalších relativně sofistikovaných orchestrací až po třeba po relativně jednoduchá řešení na bázi pevných aktualizačních skriptů.
Ty mi pak například můžou udělat pull z nějaké specifické větve git repozitáře, odkud se to také předtím otestovalo, zastavit služby, spustit připravené migrační skripty, znovu služby nahodit a zalogovat někam výsledek.
Celé tohle může být v jednom bash skriptu, který pak bude moct být spouštěný tím sudem pod jiným uživatelem.
Navíc se to výrazně zjednoduší, pokud byste dělal tenhle proces na víc než na jednom serveru - i když počítám minimálně testovací a produkční.

hknmtt

  • ****
  • 250
    • Zobrazit profil
    • E-mail
Re:Jak omezit uživatele SSH?
« Odpověď #13 kdy: 21. 03. 2025, 22:46:21 »

- tento ssh-user by nemal mat moznost inak robit nic v systeme, okrem "su root", cize nemoze mutovat system alebo subory mimo svojej home zlozky, taktiez by nemal mat moznost vypisovat obsah zloziek mimo svojej home zlozky


Hmmm, tak normálně uživatel v Linuxu může mutovat jenom soubory v $HOME a v /tmp.  Proč by nemohl vypisovat obsah jiných adresářů? Třeba když zakážete vypisovat (RX) /usr/bin/ tak to nebude fungovat.

Zase lehko zakážete přístup do /home/tajny_user, jestli šlo v první řadě o toto. Většina distribucí má práva tak, že si uživatelé navzájem nevidí soubory. Pokud bude znát heslo na su, tak se tam dostane.

Je mozne, ze to zbytocne komplikujem. Na druhu stranu, ak je pouzivatela mozne takto obmedzit, nejakou jednouchou formou, tak preco nie.

Re:Jak omezit uživatele SSH?
« Odpověď #14 kdy: 21. 03. 2025, 23:38:20 »
Napísať vlastný shell.

P. S.: /usr/sbin/nologin