Ich weiß nicht, wie ich es mit Bash machen soll, aber ich kenne eine andere Shell, die die Benutzerumgebung einschränkt:lshell (eingeschränkte Shell).
Ein kurzer Überblick über die Konfiguration
Lshell wird über eine INI-Datei konfiguriert. Standardmäßig enthält es eine Whitelist mit zulässigen Befehlen, kann jedoch einfach so konfiguriert werden, dass Benutzern die Verwendung eines bestimmten Befehls untersagt wird.
Diese Konfiguration (Standard-conf /etc/lshell.conf
) verbietet Benutzer foo
von der Verwendung von mkdir
:
[foo]
allowed = 'all' - ['mkdir', 'bash', 'sh', 'csh', 'dash', 'env']
Um ein Benutzerkonto so zu konfigurieren, dass es standardmäßig lshell verwendet, müssen Sie:
chsh -s /usr/bin/lshell foo
Lshell kann mehr, wie:
- 3 Granularitätsebenen:Benutzer, Gruppe, alle.
- Kann den Zugriff auf bestimmte Pfade im System einschränken.
- Kann die Verwendung bestimmter Zeichen einschränken (wie
|
). - Kann die Verwendung bestimmter Befehle nur über SSH einschränken.
Und mehr.
Update 1# Testergebnis hinzugefügt:
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
Die Art und Weise, wie ich diese Art von Einschränkungen normalerweise implementiere, erfordert, dass mehrere Bedingungen erfüllt sind, sonst kann die Einschränkung leicht umgangen werden:
- Der Benutzer gehört nicht zu
wheel
Gruppe, die einzige, die berechtigt ist,su
zu verwenden (über PAM erzwungen). -
Der Benutzer erhält einen ordnungsgemäß gesicherten
rbash
mit einem schreibgeschützten PATH, der auf einen privaten~/bin
zeigt , diese~/bin/
Verzeichnis enthält Links zu einfachen Dienstprogrammen:$ 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*
-
dem Benutzer wird eine eingeschränkte, schreibgeschützte Umgebung gegeben (denken Sie an Sachen wie
LESSSECURE
,TMOUT
,HISTFILE
Variablen). - der Benutzer wird dem SELinux-Benutzer
staff_u
zugeordnet und übersudo
Rechte erhalten, um Befehle als anderer Benutzer auszuführen . -
/home
des Benutzers ,/tmp
und möglicherweise/var/tmp
werden über/etc/security/namespace.conf
mehrfach instanziiert :/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
Außerdem
/etc/security/namespace.init
macht alle Skelettdateien für den Benutzer schreibgeschützt und Eigentum vonroot
.
So können Sie auswählen, ob $USER
kann mkdir
ausführen in eigener Sache (über einen Link im privaten ~/bin
Verzeichnis, bereitgestellt über /etc/skel
, wie oben erklärt), im Namen anderer Benutzer (über sudo
) oder gar keine.
Fügen Sie eine Dummy-Gruppe hinzu, fügen Sie den Benutzer zu dieser Gruppe hinzu, chown root:somegroup /bin/mkdir
, chmod g-x /bin/mkdir
. Beachten Sie, dass dies davon abhängt, dass der Benutzer seine Gruppen nicht ändern kann. IIRC dies gilt für GNU/Linux, aber nicht für einige andere Unices.