반응형

오랜만에 글을 끄적 거리게 되었습니다.
아무 생각없이 쓰던 옵션(?)에 대해 정리를 해보고자 끄적거립니다.
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).
물론 알고 계신 분들도 있을테고 알고 계신데 까먹거나 헷갈리시는 분들 또는 필자가 이해하고자 작성한 내용입니다.
잘못된 부분이 있다면 언제나 댓글 부탁 드리겠습니다.

반응형
'운영체제 > Linux' 카테고리의 다른 글
[Linux] readlink - 링크걸린 파일의 원본 파일 출력 (0) | 2024.11.06 |
---|---|
[Linux] Tar를 이용한 원격지 or Local 파일 copy (0) | 2024.01.05 |
[Linux] tee Command를 이용한 stdout / stderr 처리 관련 (0) | 2023.12.06 |
[Linux] Hex <-> Dec 변환 (0) | 2022.11.22 |
[Linux] unix Timestamp 를 date로 변환 (1) | 2022.11.22 |