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


169

기술적으로, pam쉘을 확인 하지 않으면 쉘을 사용 pam_shells하지 않으면 실제로 로그인을 막을 수 없습니다. 내 시스템에서는 크기가 다르기 때문에 실제로 무언가를하고 있다고 생각합니다. 차이점은 무엇입니까? 왜 둘 다 존재합니까? 왜 다른 것을 사용합니까?

-rwxr-xr-x 1 root root  21K Feb  4 17:01 /bin/false
-rwxr-xr-x 1 root root 4.7K Mar  2 14:59 /sbin/nologin


경로는 /bin/false어디에나 있지만 존재한다 /sbin/nologin: '/ sbin에 / nologin으로': 그런 파일이나 디렉토리. 왜 데비안과 우분투 가 /usr/sbin/nologin아닌 이유가 /sbin/nologin있습니까?
세례

4
왜 / bin / false가 "1"리턴 코드를 리턴하기 위해 21k 코드를 필요로하는지 궁금합니다! (그리고 경우 / sbin / nologin으로는 4.7K 소요)
마크 스튜어트


1
@nxnev 그래 ELF의 오버 헤드는 생각하지 않았다. 그리고 이전 IBM 시절부터 간단한 하나의 op-code 어셈블리 명령어 인 IEFBR14 프로그램이있었습니다.
마크 스튜어트

답변:


198

/sbin/nologin그 쉘 사용자가 로그인하면, 그들은 말을 정중 메시지를 얻을 것이다, 쉘로 설정 '이 계정은 현재 사용할 수 없습니다를.' 이 메시지는 파일을 사용하여 변경할 수 있습니다 /etc/nologin.txt.

/bin/falsefalse쉘 이있는 누군가가 로그인하면 false종료 될 때 즉시 로그 아웃 됩니다. 셸을 설정하면 /bin/true다른 사람이 로그인하지 못하게하는 것과 같은 효과가 있지만 셸이 없다는 개념을 전달하는 것이 훨씬 낫기 때문에 false아마도 관습으로 사용됩니다 true.

nologin의 매뉴얼 페이지를 살펴보면 4.4 BSD (1990 년대 초) false에 만들어 졌으므로 오래 전에 만들어졌습니다. false쉘로 사용 하는 것은 아마도 유닉스 초기부터 계속 된 관습 일 것입니다.

nologin보다 사용자 친화적 인 옵션으로, 로그인을 시도하는 사용자에게 사용자 정의 가능한 메시지가 제공되므로 이론적으로 사용하려고합니다. 하지만 모두 nologinfalse누군가가 쉘을 가지고 있지 및에 ssh를 할 수없는 동일한 최종 결과있을 것이다.


10
/usr/sbin/nologin데비안 기반 배포판.
Diemo

3
최소한 BSD 구현은 opensource.apple.com/source/system_cmds/system_cmds-735/… 에서 볼 수 있듯이 로그인 시도를 syslog에 기록 하지만 / bin / false는 아무것도 기록하지 않습니다.
Sergiy Kolodyazhnyy

28

일부 FTP 서버는 유효한 쉘이있는 경우에만 FTP 액세스를 허용합니다. /sbin/nologin유효한 쉘로 간주되지만 /bin/false그렇지는 않습니다.

( "유효 함"은 종료 상태가 0임을 의미하지만 /etc/shells시스템, FTP 소프트웨어 및 구성에 따라 다를 수 있습니다.)


1
예, 아마도 pam을 사용하는 ftp 프로그램의 일부 일 것이고, pam_shells를 사용하는 pam은 아마도 /etc/shells. 그냥 추측 ... 내가 틀릴 수 있습니다.
xenoterracide

4
방금 우분투 8.04와 14.04를 모두 확인했습니다. nologin 명령은 false와 비슷한 상태 1로 종료되며 true, false 또는 nologin은 / etc / shells에 포함되지 않습니다. 만약 그렇다면, 사용자는 chsh를 사용하여 그러한 쉘을 선택하고 자신의 계정에서 자신을 잠글 수 있습니다.
penguin359

12

/bin/false오류로 종료하는 것 외에는 아무것도하지 않는 프로그램에 명령을 전달해야 할 때마다 사용되는 시스템 명령입니다. 의 동반자 /bin/true입니다. 둘 다 매우 오래된 표준 POSIX 유틸리티이며 정의에 따라 출력을 생성하지 않습니다. true는 때때로 다음과 같이 무한 루프되어야하는 쉘 스크립트에 사용됩니다.

while true; do
    ...
    # Waste time
    if [ $wasted_time -gt 100000 ]; then
        exit 0
    fi
    ...
done

/usr/sbin/nologin쉘을 대체하기 위해 특별히 설계되었으며 로그인 할 수 없다는 불만을 출력합니다. 존재하기 전에 /bin/false더미 사용자 를 위해 사용하는 것이 일반적 이었지만 사용자가 왜 시작했는지 알지 못하기 때문에 혼란 스러울 수 있습니다.


4
가치가 그것을 지적 /bin/true하고 /bin/false당신이 쉘 스크립트 드릴 것입니다 무엇을 항상하지 않습니다. 에서 zsh truefalse내장 기능이며, bash용도 /bin/*버전
xenoterracide

4

내 컴퓨터에서 nologin인수를 무시하고 항상 같은 메시지를 영어로 표시합니다. /bin/false에 응답 --version하고 --help로 표시되는 언어 $LC_CTYPE. 이러한 외관상의 차이점 외에도 동일한 효과가 있습니다.

nologin영어를 사용하는 실제 사람의 계정에 사용하면 유용성 이 더 좋습니다. 보안 측면에서는 차이가 없습니다.


4
아마 것 같아 false실제 사용자가없는 시스템 계정에 대한 더, 그리고 nologin비활성 계정입니다.
xenoterracide

1
당신의 OS는 무엇입니까? Centos nologin버전은 인수를받지 않지만에서 메시지를 읽을 수 있습니다 /etc/nologin.txt.
Alexander Gonchiy

3

/ bin / false 작업은 0이 아닌 종료 코드로 종료하는 것입니다.

커맨드 라인에서 시도하십시오 :

$:> /bin/false
$:> echo $?
1
$:>

일부 기관은 비밀번호 파일의 쉘 필드에서 / bin / false를 사용합니다. 사용자가 로그인을 시도하면 쉘은 / bin / false이므로 즉시 종료됩니다.


2

리눅스에서는 util-linux 프로젝트 /sbin/nologin에서 나오고 GNU Coreutils의 일부입니다 . 그것들은 다른 역할을 수행하며, nologin은 로그인 한 쉘로 메시지를 가지고있는 사람들을 위해 메시지를 인쇄 할 수있는 옵션을 가지고 있습니다. FreeBSD의는 단순히 1을 반환 그동안, 검사가있어 확인 터미날에서 실행 및 로그인 시도시 syslog에 메시지를 전송합니다. 리눅스 버전은 조금 더 복잡하지만 ( --help의 결과를 위해 국제화로 모든 종류의 재미있는 작업을 수행합니다) 본질적으로 동일한 방식으로 수행합니다./bin/falsefalsenologinfalse


1

그들은 같은 프로그램이 될 수 있지만 다른 의미를 가지고 있습니다. 프로그램 이름이 모든 것을 알려줍니다.

  • / bin / false는 잘못된 값을 반환하기위한 것입니다. 프로그램으로 실행됩니다.
  • / bin / nologin은 사용자에게 계정에 대한 로그인이 허용되지 않음을 나타냅니다. (로그인 쉘로 사용됩니다.)

-4

둘 다 거의 같은 작업을 수행하지만 /bin/false권한이없는 사용자에게 유용합니다. 반면 /sbin/nologin에 권한이있는 사용자를위한 것입니다.


4
오, 어떻게 그 결론에 도달 했습니까?
fpmurphy

아마 그는 조사했다 /etc/passwd. 방금 /etc/passwd새로 설치된 데비안 스트레치를 살펴 보았습니다 . 이 상자에서 거의 모든 시스템 계정 (사용자 ID <1000)은 /usr/sbin/nologin몇 가지 예외를 제외하고 셸로 사용됩니다. @pythondetective의 답변에 동의하지 않습니다. 나는 그를이 결론으로 ​​이끌 수 있었던 것을 추측하고있다. 내 의견은 조금 늦었습니다.
Binarus

아니! 기본 로그인 쉘은 권한과 다릅니다.
MUY Belgium

위대한 "형사"가 아닙니다
Emobe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.