/bin/false
은 /bin/true
유닉스가 기능을 완벽하게 수행 할 수 있도록 추상적 인 의미로 유용한 유틸리티 프로그램 입니다. 그러나 이러한 프로그램에 대한 긴급한 목적이 발견되었습니다. BASH 문을 고려하십시오.이 문 /some/program || /bin/true
은 $? = 0
의 반환에 관계없이 항상 true ( ) 로 부울 평가됩니다 /some/program
.
/bin/false
사용자가 식별 한대로 긴급 사용은 사용자가 로그인 할 수없는 널 쉘입니다.이 경우 시스템은 쉘 실행에 실패한 것처럼 정확하게 작동합니다.
POSIX (잘못되어 있고 SUS 일 수도 있지만)는이 두 명령이 적절한 부울 값을 반환하는 것 외에는 아무것도하지 않도록 제한합니다.
/sbin/nologin
BSD 유틸리티는 /bin/false
(부울 거짓을 반환) 과 비슷한 동작을 갖지만 /bin/false
금지 된 출력도 출력 합니다. 실제로 많은 터미널 에뮬레이터가 쉘이 종료 될 때 단순히 닫히고 메시지를 읽을 수는 없지만 어떤 경우에는 읽을 수 없지만 사용자가 발생한 상황을 이해하는 데 도움이됩니다.
목록에 약간의 목적이 /sbin/nologin
에가 /etc/shells
. 표준 효과는 사용자가 자신의 셸을 변경할 때 /etc/shells
사용할 수있는 프로그램을 나열하는 chsh
것입니다 (자신의 셸을로 변경해야하는 확실한 이유는 없습니다 /sbin/nologin
). 수퍼 유저는 모든 사람의 셸을 다른 것으로 변경할 수 있습니다. 그러나 in /sbin/nologin
및 /bin/false
in을 모두 나열 /etc/rsh
하면 셸을 chsh
얻는 불행한 상황 에서 이러한 셸을 사용하는 사용자가 셸을 변경하지 못하게됩니다 .
FTP 데몬은 / etc / shells에없는 쉘을 가진 사용자에게 액세스를 허용하지 않거나 원하는 다른 로직을 사용할 수 있습니다. sftp
(유사한 기능을 제공하는) 유사하지만 안전 하므로 FTP 실행은 피해야 합니다. 일부 사이트에서는 /sbin/nologin
쉘 액세스를 비활성화하고 sftp 액세스를 허용하여 쉘 액세스를 비활성화합니다 /etc/shells
. 사용자가 cronjob을 작성할 수있는 경우 백도어를 열 수 있습니다.
두 경우 모두 scp
유효하지 않은 쉘로 작동하지 않습니다. scponly
이 인스턴스에서 쉘로 사용될 수 있습니다.
또한 쉘 선택은 su -
(AKA su -l
) 작업에 영향을줍니다 . 특히 /sbin/nologin
셸인 경우 출력은 표준 출력 으로 인쇄됩니다. 이 경우에는 해당되지 않습니다 /bin/false
. 두 경우 모두 실행 명령 su -cl
이 실패합니다.
마지막으로 답은 다음과 같습니다.
계정을 비활성화하려면 둘 중 하나에 의존하지 말고 /sbin/nologin
정보 제공 목적으로 셸을 설정하십시오 (에있는 경우를 제외하고 /sbin/nologin
는 /etc/shells
사용 /bin/false
하지 않아야합니다). 대신 비밀번호 필드를 /etc/passwd
로 설정하십시오. 비밀번호 !
가 crypt
없으면 유효합니다. /etc/shadow
버그를 피하기 위해 해시를 같은 방식으로 설정하는 것이 좋습니다. passwd -l
당신을 위해 이것을 할 것입니다.
계정을 비활성화하는 세 번째 방법은 계정 만료 날짜 필드를 고대 날짜 (예 :)로 설정하는 것 usermod --expiredate 1
입니다. 이렇게하면 설정을 통해 사용자가 암호없이 유닉스 계정에 대해 인증 할 수 있고 사용중인 서비스에 쉘이 필요하지 않은 경우 로그인이 방지됩니다.