/ sbin / nologin과 / bin / false의 차이점은 무엇입니까?


69

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

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

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

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

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



1
작동하는 일반적인 정보로. 시스템 관리의 관점에서 구체적으로 생각하고 있습니다.
— Michael Hampton

배경 기술자로서의 의미입니다.
— dmourati 2016 년

답변:


70

/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입니다. 이렇게하면 설정을 통해 사용자가 암호없이 유닉스 계정에 대해 인증 할 수 있고 사용중인 서비스에 쉘이 필요하지 않은 경우 로그인이 방지됩니다.


9
이 답변은 다양한 옵션을 완벽하게 요약하고 (질문에 대한 답변), 최소한이 데비안 리포지토리의 titantools패키지 에서 사용할 수있는이 유스 케이스에 대한 유용한 리소스를 가리킬 필요가 있다고 느꼈습니다 noshell. 이 의사 셸은 감사 기능을 제공하며 syslog에 로깅하면 계정을 noshell셸로 사용하여 액세스를 허용하지 않습니다.
— dawud

1
결코 묵시적인 것은 아니지만, 특정 빈티지 (기침)의 시스템 관리자들 사이 /bin/false에서는 로그인하지 않아야하는 사람들을위한 로그인 쉘로 사용 하는 것이 일반적입니다.
— MadHatter

2
외경은 원래 의도 된 용도가 아님을 의미합니다. 나는 구식이라고 말하지 않았다. 나는 매일 본다 :)
— Falcon Momot

1
유효하지 않은 비밀번호로 계정을 비활성화하면 ssh에서 제대로 작동하지 않습니다. 사용자가 이전에 공개 키 인증을 설정 한 경우 어쨌든 들어갈 수 있습니다.
— joshudson

3
sshd는 pubkey auth에서도 특정 방식으로 잠긴 계정 (!로 시작하는 비밀번호 해시가 언급 됨)을 확인하도록 문서화되어 있습니다.
— Falcon Momot

13

이것에 대한 연구를 한 후에, 당신이 사용하는 방법은 잠그는 것에 달려 있습니다. 사용자가이 세트로 쉘에 로그인 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 / 지역 이외의 서비스에 로그인 할 수 있습니다 콘솔을 잠 가야합니다.


2

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

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

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


당신은 그것을 가지고 /etc/shells있습니까? FTP 서버는 어떻게 구성되어 있습니까?
— Michael Hampton

FTP 서버에 로그인하기 위해 쉘이 필요하다는 규칙은 없습니다.
— Petter H

일부 FTP 데몬에서는 허용하지 않으며 다른 FTP 데몬에서는 허용하지 않습니다. 다양한 기능 간에는 기능에 많은 차이가 있습니다. 고전적인 구현은 쉘이 아닌 사람에게는 액세스를 허용하지 않지만 모든 구현이 반드시 그런 것은 아닙니다.
— Falcon Momot
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.