deploy
私は Debian 9 (Stretch) を使用しています。シェルを に設定したユーザーがいます/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
、またはの0番目の要素argv
はその名前です。しかし、su
がログイン シェルとして起動すると、名前が に設定されます-su
。また、-r
オプションも使用されなかったため、 がログイン シェルを起動するときには、制限付きシェルを起動するどちらの方法も使用されませんでしたsu
。
他の適切なログイン手段 (SSH やlogin(1)
TTY 経由など) でも有効になるはずです。