/ sbin / nologin과 / bin / false의 차이점은 무엇입니까? 계정이 비활성화되었다는 메시지를 사용자에게 인쇄 한

쉘을로 설정하여 사용자 계정을 비활성화해야한다고 권장하는 경우가 종종 있습니다 /bin/false. 그러나 기존 Linux 시스템에서 많은 기존 계정 (모두 서비스 계정)에 쉘이있는 /sbin/nologin것을 알 수 있습니다.

매뉴얼 페이지 /sbin/nologin에서 계정이 비활성화되었다는 메시지를 사용자에게 인쇄 한 다음 종료됩니다. 아마도 /bin/false아무것도 인쇄하지 않을 것입니다.

또한 /sbin/nologin에 나열되어 /etc/shells있지만 /bin/false그렇지 않습니다.

매뉴얼 페이지는 FTP가 쉘에 나열 되지 않은 사용자의 액세스를 비활성화 /etc/shells하며 다른 프로그램이 동일한 작업을 수행 할 수 있음을 나타냅니다. 누군가가 /sbin/nologin셸 계정을 가진 FTP를 통해 FTP를 이용할 수 있다는 의미 입니까?

차이점은 무엇입니까? 이 중 어떤 것을 사용하여 사용자 계정을 비활성화해야합니까? 어떤 상황에서? 리스팅에 어떤 다른 효과가 /etc/shells있습니까?



답변

/bin/false/bin/true유닉스가 기능을 완벽하게 수행 할 수 있도록 추상적 인 의미로 유용한 유틸리티 프로그램 입니다. 그러나 이러한 프로그램에 대한 긴급한 목적이 발견되었습니다. BASH 문을 고려하십시오.이 문 /some/program || /bin/true$? = 0의 반환에 관계없이 항상 true ( ) 로 부울 평가됩니다 /some/program.

/bin/false사용자가 식별 한대로 긴급 사용은 사용자가 로그인 할 수없는 널 쉘입니다.이 경우 시스템은 쉘 실행에 실패한 것처럼 정확하게 작동합니다.

POSIX (잘못되어 있고 SUS 일 수도 있지만)는이 두 명령이 적절한 부울 값을 반환하는 것 외에는 아무것도하지 않도록 제한합니다.

/sbin/nologinBSD 유틸리티는 /bin/false(부울 거짓을 반환) 과 비슷한 동작을 갖지만 /bin/false금지 된 출력도 출력 합니다. 실제로 많은 터미널 에뮬레이터가 쉘이 종료 될 때 단순히 닫히고 메시지를 읽을 수는 없지만 어떤 경우에는 읽을 수 없지만 사용자가 발생한 상황을 이해하는 데 도움이됩니다.

목록에 약간의 목적이 /sbin/nologin에가 /etc/shells. 표준 효과는 사용자가 자신의 셸을 변경할 때 /etc/shells사용할 수있는 프로그램을 나열하는 chsh것입니다 (자신의 셸을로 변경해야하는 확실한 이유는 없습니다 /sbin/nologin). 수퍼 유저는 모든 사람의 셸을 다른 것으로 변경할 수 있습니다. 그러나 in /sbin/nologin/bin/falsein을 모두 나열 /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입니다. 이렇게하면 설정을 통해 사용자가 암호없이 유닉스 계정에 대해 인증 할 수 있고 사용중인 서비스에 쉘이 필요하지 않은 경우 로그인이 방지됩니다.


답변

이것에 대한 연구를 한 후에, 당신이 사용하는 방법은 잠그는 것에 달려 있습니다. 사용자가이 세트로 쉘에 로그인 This account is currently unavailable.하면 /etc/nologin.txt최소한 RHEL 파생물에 파일 을 작성하여이를 변경할 수 있다는 메시지가 표시됩니다 .

아시다시피 /bin/false껍질이 아닙니다. 그것들이 작동하는 방식은 바이너리가 종료 된 직후 로그 아웃되는 false를 반환한다는 것입니다. 참고 /bin/true동일한 효과를 얻을 것입니다.

FTP 질문과 관련하여 : 그렇습니다. 셸을 설정 /sbin/nologin하면 사용자가 FTP에 로그인 할 수있게 /bin/false하거나 사용자가 서비스에 로그인하는 /bin/true것을 완전히 차단할 있습니다.

따라서, /bin/false또는 /bin/true하면서, 모든 서비스에 로그인에서 사용자를 방지하는 것이 가장 좋습니다 /sbin/nologin여전히 사용자가 SSH 또는 로컬 콘솔 계정이 비활성화되어 최상의 사용되는 사용자에게 피드백을 제공하면서 단지 SSH / 지역 이외의 서비스에 로그인 할 수 있습니다 콘솔을 잠 가야합니다.


답변

음, 누구든지 / bin / false가 FTP 액세스를 허용하지 않음을 증명 하려고 했 습니까?

방금 사용자의 쉘을 / bin / false로 변경했으며 FTP를 잘 수행 할 수있었습니다.

/ dev / null을 사용 하여 사용자 를 완전히 잠급니다 (이메일을 제외하고는 여전히 POP3 가능).


답변