운영체제/Linux

[Linux] user shell 차이- /usr/sbin/nologin vs /usr/bin/false

louky 2025. 4. 4. 16:31
반응형

오랜만에 글을 끄적 거리게 되었습니다. 

 

아무 생각없이 쓰던 옵션(?)에 대해 정리를 해보고자 끄적거립니다. 

 

Linux의 user 계정을 생성하다보면 보통 shell부분에 /bin/bash 또는 /bin/sh  같은 쉘환경을 넣게 되는데 이때 특정 계정에 한해서는 

로그인을 못하도록 설정하기도 합니다. 

예를 들어  /usr/bin/flase 또는 /usr/sbin/nologin 과 같은... 

평소 아무 생각없이 사용하다가 문득 둘의 차이는 뭘까라는 생각이 들어 찾아 보고 확인하게 되었습니다. 

 

환경은 다음과 같습니다. 

 

 

- Ubuntu 24.04   기준

# 서버 설정등에 따라 필자와 출력이 조금 다를 수 있습니다. 

 

먼저 "/usr/sbin/nologin" 으로 설정을 하면 아래와 같이 로그인 자체가 실패를 하게 됩니다. 

# user 설정 - 로그인 계정이 있는 서버에서 설정  여기서는 => B-server : 192.168.10.100 
vi /etc/passwd
test:x:1000:1000:create 2024-12-17:/home/test:/usr/sbin/nologin



# ssh login - A-server에서 B-server로 로그인 시도
[test1@test_server ~] $ ssh test@192.168.10.100
This account is currently not available.
Connection to test@192.168.10.100 closed.

 

 

그에 비해 "/usr/bin/false" 로 설정을 하면 로그인까지 했다가 종료가됩니다. 즉, 로그인 되었다가 바로 로그아웃이 됩니다. 

# user 설정 - 로그인 계정이 있는 서버에서 설정  여기서는 => B-server : 192.168.10.100 
vi /etc/passwd
test:x:1000:1000:create 2024-12-17:/home/test:/usr/bin/false



# ssh login - A-server에서 B-server로 로그인 시도
[test1@test-server ~] $ ssh test@192.168.10.100
Warning: Permanently added 'test@192.168.10.100o' (ED25519) to the list of known hosts.
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-55-generic x86_64)

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

Connection to test@192.168.10.100 closed.
[test1@test-server ~] $

 

여기서 ChatGPT의 설명을 인용하겠습니다. 

1. /usr/sbin/nologin
용도: /usr/sbin/nologin은 사용자가 시스템에 로그인할 수 없도록 막는 프로그램입니다.
사용자에게 로그인할 수 있는 쉘을 제공하지 않지만, 시스템이 로그인 시도를 시각적으로 처리하는 데 약간의 메시지를 표시할 수 있습니다.

동작: 사용자가 로그인할 때 /usr/sbin/nologin을 실행하면, 로그인을 거부하는 메시지가 출력되고, 
로그인 시도를 종료합니다. 대개 "This account is currently not available" 또는 유사한 메시지를 표시합니다.

주요 용도: 일반적으로 시스템 계정이나 서비스를 위한 계정에서 로그인 자체를 금지할 때 사용됩니다. 
예를 들어, nobody, systemd 계정 등에서는 직접 로그인을 막고 서비스만 동작하도록 설정할 때 사용됩니다.


2. /usr/bin/false
용도: /usr/bin/false는 항상 "거짓"을 반환하는 프로그램입니다. 
즉, 실행되자마자 종료되며, 종료 상태 코드는 1입니다. 이 프로그램은 사용자가 로그인할 수 없도록 하지만, 
그 자체로는 로그인을 차단하는 메시지를 출력하지 않습니다.

동작: 사용자가 로그인하려고 시도하면 /usr/bin/false가 실행되고, 
즉시 종료 상태 코드 1을 반환하여 로그인을 거부합니다. 이때 로그인 메시지는 출력되지 않습니다.

주요 용도: false는 로그인을 막는 역할을 하면서도 사용자가 로그인할 때 
별도의 메시지를 출력하지 않기를 원하는 경우 사용됩니다.

 

표로 정리하면 아래와 같습니다. 

항목 /usr/sbin/nologin /usr/bin/false
주 용도 로그인 차단, 로그인 시도 사용자에게 메시지 제공 로그인 차단, 메시지 없음
로그인메세지 로그인 시 거부 메시지 출력 로그인시 메시지 출력 없음
프로그램 종료 종료코드 1을 반환, 메시지 출력후 종료 종료코드 1을 반환, 메시지 없음
일반적인 사용 시스템 계정, 서비스 계정, 로그인 금지 계정 로그인 금지를 윈한 사용자 계정
ssh 로그인시 로그인 후 거부 메시지 출력 후 바로 로그아웃 로그인 후 바로 로그아웃 됨

 

만약 "/bin/nologin"같이 없는 파일로 설정할 경우 아래와 같은 동작으로 로그인 자체가 거부 됩니다. 

# B-server설정
[test@test-B-server ~] $ ls -al /bin/nologin
ls: cannot access '/bin/nologin': No such file or directory

[test@test-B-server ~] $ sudo vi /etc/passwd
test:x:1000:1000:create 2024-12-17:/home/test:/bin/nologin


#############################################################
# A-server 에서 B-server로 로그인
[test1@test-A-server  ~] $ ssh test@192.168.10.100
Warning: Permanently added 'test@192.168.10.100' (ED25519) to the list of known hosts.
test@192.168.10.100: Permission denied (publickey).

 

물론 알고 계신 분들도 있을테고 알고 계신데 까먹거나 헷갈리시는 분들 또는 필자가 이해하고자 작성한 내용입니다. 

잘못된 부분이 있다면 언제나 댓글 부탁 드리겠습니다. 

 

 

 

반응형