/ 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.