웹사이트 검색

Ubuntu에서 사용자의 로그인 기능을 제한하는 방법


소개

시스템 관리의 기본 부분은 사용자와 그룹을 구성하고 관리하는 것입니다. 이 작업의 일부에는 모든 시스템 엔터티의 로그인 기능을 모니터링하는 작업이 포함됩니다.

이 가이드에서는 사용자 관리 및 인증 로깅에 대한 아이디어를 소개합니다.

Ubuntu 22.04 서버에서 이러한 개념을 살펴보겠지만 모든 최신 Linux 배포판에서 따라할 수 있습니다. Ubuntu 22.04의 초기 서버 설정 가이드에 따라 이 자습서용 Ubuntu 22.04 서버를 설정할 수 있습니다.

이 시리즈의 이전 자습서에서 언급했듯이 서버의 일부 사용자는 서비스와 연결될 수 있으며 일반 계정으로 사용되지 않습니다.

이 섹션에서는 다양한 방법으로 이러한 사용자의 로그인 기능을 제한하는 방법을 검토합니다.

/etc/passwd로 액세스를 제한하는 방법

로그인 기능을 제한하는 한 가지 방법은 계정의 로그인 셸을 특수 값으로 설정하는 것입니다.

이에 대한 예는 messagebus 사용자이며, grep을 사용하여 /etc/passwd 파일 내에서 검색할 수 있습니다.

  1. less /etc/passwd | grep messagebus
Output
messagebus:x:102:105::/nonexistent:/usr/sbin/nologin

최종 값은 로그인 성공 시 실행되는 쉘 또는 명령입니다. 이 경우 값은 /usr/sbin/nologin으로 설정됩니다.

sudo su를 사용하여 messagebus 사용자로 전환하려고 하면 실패합니다.

  1. sudo su messagebus
Output
This account is currently not available.

messagebus의 셸이 /usr/sbin/nologin으로 설정되어 있기 때문에 이 메시지를 수신합니다.

필요한 경우 usermod 도구를 사용하여 사용자의 기본 로그인 셸(일반적으로 /bin/bash)을 nologin과 같은 존재하지 않는 셸로 변경할 수 있습니다. 로그인하지 못하도록 합니다.

  1. sudo usermod -s /usr/sbin/nologin username

/etc/shadow로 액세스를 제한하는 방법

액세스를 제한하는 또 다른 유사한 방법은 /etc/shadow 파일을 사용하는 것입니다. 이 파일에는 시스템에 있는 모든 사용자의 해시된 비밀번호 값이 들어 있습니다.

less를 사용하여 전체 파일을 볼 수 있습니다.

  1. 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 플래그로 잠금 해제할 수 있습니다.

  1. sudo passwd -l sammy
  1. sudo less /etc/shadow | grep sammy
Output
sammy:!$y$j9T$4gyOQ5ieEWdx1ZdggX3Nj1$AbEA9FsG03aTsQhl.ZVMXatwCAvnxFbE/GHUKpjf9u6:19276:0:99999:7::::::

보시다시피 해시된 암호는 유지되지만 암호 앞에 !를 추가하면 유효하지 않게 됩니다.

다음을 입력하여 계정을 다시 잠금 해제할 수 있습니다.

  1. sudo passwd -u sammy

usermod 명령을 사용하여 동등한 작업을 사용할 수 있습니다. 해당 플래그는 잠금을 위한 -L이고 잠금 해제를 위한 -U입니다.

  1. sudo usermod -L sammy
  2. sudo usermod -U sammy

참고: 이 액세스 제한 방법은 모든 암호 기반 로그인에 대해 올바르게 작동하지만 암호 없이 로그인하는 방법(예: ssh 키 사용)은 계속 사용할 수 있습니다.

/etc/nologin으로 액세스를 제한하는 방법

루트 이외의 모든 계정 로그인을 비활성화해야 하는 상황이 있을 수 있습니다.

이는 심층적인 유지 관리 때문이거나 하나 이상의 사용자 계정이 손상되었기 때문일 수 있습니다.

어떤 경우든 /etc/nologin에 파일을 생성하면 됩니다.

  1. sudo touch /etc/nologin

이렇게 하면 수퍼유저 권한이 없는 계정은 로그인할 수 없습니다.

/etc/nologin 파일을 사용하면 설명 없이 사용자를 로컬 셸로 다시 덤프합니다.

실제로 일어나는 일은 파일의 내용이 사용자에게 반환된다는 것입니다. 메시지를 추가하면 사용자는 로그인 실패에 대한 설명을 받게 됩니다.

  1. sudo sh -c 'echo "Planned maintenance. Log in capabilities will be restored at 1545 UTC" > /etc/nologin'

이제 비밀번호로 로그인하려고 하면 다음 메시지가 표시됩니다.

  1. ssh sammy@host
Output
sammy@host's password: Planned maintenance. Log in capabilities will be restored at 1545 UTC Connection closed by host

루트 사용자는 여전히 정상적으로 로그인할 수 있습니다. 로그인 제한을 되돌리려면 "/etc/nologin” 파일을 제거하십시오.

  1. sudo rm /etc/nologin

결론

Linux에서 사용자 인증은 비교적 유연한 시스템 관리 영역입니다. 널리 사용되는 도구를 사용하여 동일한 목표를 달성하는 방법에는 여러 가지가 있습니다.

다양한 방법으로 사용량을 제한하는 방법을 이제 알았을 것입니다.

이 자습서 시리즈의 다음 부분에서는 사용자 로그인을 모니터링하는 방법을 검토합니다.