Ich verwende Debian 9 (Stretch). Ich habe einen deploy
Benutzer, bei dem ich die Shell auf eingestellt habe /bin/rbash
. Hier ist die Zeile von /etc/passwd
:
deploy:x:9000:9000::/home/deploy:/bin/rbash
su - deploy
Wenn ich der Root-Benutzer bin und oder ausführe su -l deploy
, wird es gestartet rbash
( echo $SHELL # => /bin/rbash
), aber die Befehle werden nicht eingeschränkt:
~$ echo $SHELL
/bin/rbash
~$ cd /tmp
/tmp$ echo asdf > /tmp/file
/tmp$ /bin/cat /tmp/file
asdf
# (Should not allow any commands with a slash)
Wenn ich einfach ausführe su deploy
:
~$ echo $SHELL
/bin/rbash
~$ cd /tmp
rbash: cd: restricted
~$ /bin/cat /etc/passwd
rbash: /bin/cat: restricted: cannot specify `/' in command names
Warum werden keine rbash
Einschränkungen angewendet, wenn dies eine Login-Shell ist?
Antwort1
Aus dem Bash-Handbuch:
Wenn Bash mit dem Namen gestartet wird
rbash
oder beim Aufruf die Option--restricted
oder-r
angegeben wird, wird die Shell eingeschränkt.
Nun, „begann mit dem Namen“ bedeutet $0
, dass oderdas nullte Element vonargv
ist dieser Name. Aber wenn su
es als Login-Shell gestartet wird, wird der Name auf gesetzt -su
. Und die -r
Option wurde auch nicht verwendet, also wurde keine der Methoden zum Starten einer eingeschränkten Shell verwendet, als su
eine Login-Shell gestartet wurde.
Für andere, ordnungsgemäße Anmeldemethoden (wie etwa SSH oder login(1)
über ein TTY) sollte es dennoch wirksam sein.