Nevím, jak to udělat s bashem, ale znám jiný shell, který omezuje uživatelské prostředí:lshell (limited shell).
Rychlý přehled konfigurace
Lshell se konfiguruje pomocí souboru INI. Ve výchozím nastavení obsahuje seznam povolených příkazů, ale lze jej snadno nakonfigurovat tak, aby uživateli zakázal používat konkrétní příkaz.
Tato konfigurace (výchozí conf /etc/lshell.conf
) zakazuje uživateli foo
z použití mkdir
:
[foo]
allowed = 'all' - ['mkdir', 'bash', 'sh', 'csh', 'dash', 'env']
Chcete-li nakonfigurovat uživatelský účet tak, aby ve výchozím nastavení používal lshell, musíte:
chsh -s /usr/bin/lshell foo
Lshell umí více, například:
- 3 úrovně podrobnosti:uživatel, skupina, vše.
- Může omezit přístup k určitým cestám v systému.
- Může omezit použití určitých znaků (např.
|
). - Může omezit použití určitých příkazů pouze přes SSH.
A další.
Aktualizace 1# Přidán výsledek testu:
rahul:~$ which bash
/bin/bash
rahul:~$ dd if=$(which bash) of=my_bash
*** forbidden syntax: dd if=$(which bash) of=my_bash
rahul:~$ bash
*** forbidden command: bash
rahul:~$ cp /bin/bash my_bash
*** forbidden path: /bin/bash
rahul:~$ /bin/bash
*** forbidden command: /bin/bash
rahul:~$ sh
*** forbidden command: sh
rahul:~$ dash
*** forbidden command: dash
rahul:~$ env bash
*** forbidden command: env
rahul:~$ cp /bin/mkdir mycreatedir
*** forbidden path: /bin/mkdir
Způsob, jakým obvykle implementuji tento druh omezení, vyžaduje splnění několika podmínek, jinak lze omezení snadno obejít:
- Uživatel nepatří do skupiny
wheel
skupina, jediná oprávněná používatsu
(vynuceno prostřednictvím PAM). -
Uživateli je přiděleno řádně zabezpečené
rbash
s PATH určenou pouze pro čtení ukazující na soukromý~/bin
, tento~/bin/
adresář obsahuje odkazy na jednoduché nástroje:$ ll ~/bin total 0 lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear* lrwxrwxrwx. 1 root dawud 7 Sep 17 08:58 df -> /bin/df* lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep* lrwxrwxrwx. 1 root dawud 8 Sep 17 08:58 env -> /bin/env* lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep* lrwxrwxrwx. 1 root dawud 9 Sep 17 08:58 grep -> /bin/grep* lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview* lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim* lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo* lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit* lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail* lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
-
uživateli je poskytnuto omezené prostředí pouze pro čtení (přemýšlejte o věcech jako
LESSSECURE
,TMOUT
,HISTFILE
proměnné). - uživatel je namapován na uživatele SELinux
staff_u
a udělená práva k provádění příkazů jako jiný uživatel podle potřeby prostřednictvímsudo
. -
/home
uživatele ,/tmp
a možná/var/tmp
jsou polyinstanciovány pomocí/etc/security/namespace.conf
:/tmp /tmp/.inst/tmp.inst-$USER- tmpdir:create root /var/tmp /tmp/.inst/var-tmp.inst-$USER- tmpdir:create root $HOME $HOME/$USER.inst/ tmpdir:create root
Také
/etc/security/namespace.init
dělá všechny základní soubory pouze pro čtení pro uživatele a vlastní jeroot
.
Tímto způsobem můžete zvolit, zda $USER
může spustit mkdir
vlastním jménem (přes odkaz v soukromém ~/bin
adresář, poskytovaný prostřednictvím /etc/skel
, jak je vysvětleno výše), jménem jiného uživatele (prostřednictvím sudo
) nebo vůbec žádné.
Přidejte fiktivní skupinu, přidejte uživatele do této skupiny, chown root:somegroup /bin/mkdir
, chmod g-x /bin/mkdir
. Všimněte si, že to závisí na tom, že uživatel nebude moci upravovat své skupiny. IIRC to platí v GNU/Linuxu, ale ne v některých jiných Unicích.