Я на Debian 9 (Stretch). У меня есть deploy
пользователь, для которого я установил оболочку /bin/rbash
. Вот строка из /etc/passwd
:
deploy:x:9000:9000::/home/deploy:/bin/rbash
Если я являюсь пользователем root и запускаю su - deploy
или su -l deploy
, то запускается rbash
( echo $SHELL # => /bin/rbash
), но команды не ограничиваются:
~$ 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)
Если я просто запущу su deploy
:
~$ echo $SHELL
/bin/rbash
~$ cd /tmp
rbash: cd: restricted
~$ /bin/cat /etc/passwd
rbash: /bin/cat: restricted: cannot specify `/' in command names
Почему не rbash
применяются никакие ограничения, если это оболочка входа?
решение1
Из руководства Bash:
Если Bash запущен с именем
rbash
или при вызове указан параметр--restricted
или-r
, оболочка становится ограниченной.
Теперь, «начало с имени» означает, что $0
, илинулевой элементargv
это имя. Но когда su
он запускается как оболочка входа, он устанавливает имя в -su
. И эта -r
опция также не использовалась, поэтому ни один из методов запуска ограниченной оболочки не использовался при su
запуске оболочки входа.
Он по-прежнему должен действовать для других правильных способов входа в систему (например, SSH или login(1)
через TTY).