Ubuntu에서 사용자의 로그인 기능을 제한하는 방법
소개
시스템 관리의 기본 부분은 사용자와 그룹을 구성하고 관리하는 것입니다. 이 작업의 일부에는 모든 시스템 엔터티의 로그인 기능을 모니터링하는 작업이 포함됩니다.
이 가이드에서는 사용자 관리 및 인증 로깅에 대한 아이디어를 소개합니다.
Ubuntu 22.04 서버에서 이러한 개념을 살펴보겠지만 모든 최신 Linux 배포판에서 따라할 수 있습니다. Ubuntu 22.04의 초기 서버 설정 가이드에 따라 이 자습서용 Ubuntu 22.04 서버를 설정할 수 있습니다.
이 시리즈의 이전 자습서에서 언급했듯이 서버의 일부 사용자는 서비스와 연결될 수 있으며 일반 계정으로 사용되지 않습니다.
이 섹션에서는 다양한 방법으로 이러한 사용자의 로그인 기능을 제한하는 방법을 검토합니다.
/etc/passwd로 액세스를 제한하는 방법
로그인 기능을 제한하는 한 가지 방법은 계정의 로그인 셸을 특수 값으로 설정하는 것입니다.
이에 대한 예는 messagebus
사용자이며, grep을 사용하여 /etc/passwd
파일 내에서 검색할 수 있습니다.
- less /etc/passwd | grep messagebus
Outputmessagebus:x:102:105::/nonexistent:/usr/sbin/nologin
최종 값은 로그인 성공 시 실행되는 쉘 또는 명령입니다. 이 경우 값은 /usr/sbin/nologin
으로 설정됩니다.
sudo su
를 사용하여 messagebus
사용자로 전환하려고 하면 실패합니다.
- sudo su messagebus
OutputThis account is currently not available.
messagebus
의 셸이 /usr/sbin/nologin
으로 설정되어 있기 때문에 이 메시지를 수신합니다.
필요한 경우 usermod
도구를 사용하여 사용자의 기본 로그인 셸(일반적으로 /bin/bash
)을 nologin
과 같은 존재하지 않는 셸로 변경할 수 있습니다. 로그인하지 못하도록 합니다.
- sudo usermod -s /usr/sbin/nologin username
/etc/shadow로 액세스를 제한하는 방법
액세스를 제한하는 또 다른 유사한 방법은 /etc/shadow
파일을 사용하는 것입니다. 이 파일에는 시스템에 있는 모든 사용자의 해시된 비밀번호 값이 들어 있습니다.
less
를 사용하여 전체 파일을 볼 수 있습니다.
- sudo less /etc/shadow
Output. . .
uuidd:*:19105:0:99999:7:::
tcpdump:*:19105:0:99999:7:::
sshd:*:19105:0:99999:7:::
pollinate:*:19105:0:99999:7:::
landscape:*:19105:0:99999:7:::
lxd:!:19180::::::
sammy:$y$j9T$4gyOQ5ieEWdx1ZdggX3Nj1$AbEA9FsG03aTsQhl.ZVMXatwCAvnxFbE/GHUKpjf9u6:19276:0:99999:7:::
두 번째 필드(마지막 줄에서 $y$j9T$4gyO…
로 시작하는 필드)에는 해시된 암호 값이 포함됩니다.
시스템 계정에는 복잡한 해시 값 대신 별표(*
)가 있습니다. 두 번째 필드에 별표가 있는 계정은 암호가 설정되어 있지 않으며 이를 변경하지 않으면 암호로 인증할 수 없습니다.
해시 값 앞에 느낌표(!
)를 붙여 암호 값을 비활성화할 수 있습니다(사실상 별표 값과 동일한 암호로 계정 만들기).
두 도구는 지정된 계정을 \잠금\하여 이를 수행할 수 있습니다.
passwd
명령은 -l
플래그로 잠그고 -u
플래그로 잠금 해제할 수 있습니다.
- sudo passwd -l sammy
- sudo less /etc/shadow | grep sammy
Outputsammy:!$y$j9T$4gyOQ5ieEWdx1ZdggX3Nj1$AbEA9FsG03aTsQhl.ZVMXatwCAvnxFbE/GHUKpjf9u6:19276:0:99999:7::::::
보시다시피 해시된 암호는 유지되지만 암호 앞에 !
를 추가하면 유효하지 않게 됩니다.
다음을 입력하여 계정을 다시 잠금 해제할 수 있습니다.
- sudo passwd -u sammy
usermod
명령을 사용하여 동등한 작업을 사용할 수 있습니다. 해당 플래그는 잠금을 위한 -L
이고 잠금 해제를 위한 -U
입니다.
- sudo usermod -L sammy
- sudo usermod -U sammy
참고: 이 액세스 제한 방법은 모든 암호 기반 로그인에 대해 올바르게 작동하지만 암호 없이 로그인하는 방법(예: ssh 키 사용)은 계속 사용할 수 있습니다.
/etc/nologin으로 액세스를 제한하는 방법
루트 이외의 모든 계정 로그인을 비활성화해야 하는 상황이 있을 수 있습니다.
이는 심층적인 유지 관리 때문이거나 하나 이상의 사용자 계정이 손상되었기 때문일 수 있습니다.
어떤 경우든 /etc/nologin
에 파일을 생성하면 됩니다.
- sudo touch /etc/nologin
이렇게 하면 수퍼유저 권한이 없는 계정은 로그인할 수 없습니다.
빈 /etc/nologin
파일을 사용하면 설명 없이 사용자를 로컬 셸로 다시 덤프합니다.
실제로 일어나는 일은 파일의 내용이 사용자에게 반환된다는 것입니다. 메시지를 추가하면 사용자는 로그인 실패에 대한 설명을 받게 됩니다.
- sudo sh -c 'echo "Planned maintenance. Log in capabilities will be restored at 1545 UTC" > /etc/nologin'
이제 비밀번호로 로그인하려고 하면 다음 메시지가 표시됩니다.
- ssh sammy@host
Outputsammy@host's password:
Planned maintenance. Log in capabilities will be restored at 1545 UTC
Connection closed by host
루트 사용자는 여전히 정상적으로 로그인할 수 있습니다. 로그인 제한을 되돌리려면 "/etc/nologin” 파일을 제거하십시오.
- sudo rm /etc/nologin
결론
Linux에서 사용자 인증은 비교적 유연한 시스템 관리 영역입니다. 널리 사용되는 도구를 사용하여 동일한 목표를 달성하는 방법에는 여러 가지가 있습니다.
다양한 방법으로 사용량을 제한하는 방법을 이제 알았을 것입니다.
이 자습서 시리즈의 다음 부분에서는 사용자 로그인을 모니터링하는 방법을 검토합니다.