저는 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가 이름으로 시작되거나 호출 시 또는
rbash
옵션 이 제공되면 쉘이 제한됩니다.--restricted
-r
이제 "이름으로 시작"은 다음을 의미합니다 $0
.0번째 요소argv
그 이름이에요. 그러나 su
로그인 쉘로 시작하면 이름이 -su
. 그리고 -r
옵션도 사용되지 않았으므로 su
로그인 쉘을 시작할 때 제한된 쉘을 시작하는 방법도 사용되지 않았습니다.
login(1)
다른 적절한 로그인 수단(예: SSH 또는 TTY를 통한) 에도 여전히 적용됩니다 .