私はDebian 9(Stretch)を使用しています。シェルをdeploy
設定したユーザーがいます/bin/rbash
。/etc/passwd
deploy:x:9000:9000::/home/deploy:/bin/rbash
ルートで実行する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 が name で起動または呼び出されるとき、またはオプションが指定された場合、
rbash
シェルは制限されます。--restricted
-r
今「名前で始まる」は$0
、または0番目の要素argv
その名前です。ただし、su
ログインシェルで起動すると名前がに設定され、-su
そのオプションも使用されないため、ログインシェルを起動するときに制限付き-r
シェルを起動する方法はありません。su
他の正しいログイン方法(SSHやTTYなど)では引き続きlogin(1)
機能します。