Linux su 인증 실패 문제 해결

LinuxBeginner
지금 연습하기

소개

Linux 의 "su" (substitute user) 명령어는 사용자가 다른 사용자 계정, 종종 root 사용자로 임시 전환하여 관리 작업을 수행할 수 있게 해주는 강력한 도구입니다. 그러나 su 인증 실패가 발생하여 액세스 거부 및 잠재적인 보안 위험을 초래할 수 있습니다. 이 튜토리얼에서는 Linux 에서 su 인증 실패 문제 해결 과정을 안내하며, 일반적인 원인, 구성 설정, 안전한 su 사용을 위한 모범 사례를 다룹니다.

Su 명령어 이해 및 기본 사용법

Linux 의 su 명령어는 사용자가 현재 사용자 신원을 다른 사용자로 전환할 수 있게 해줍니다. 이는 권한 상승이 필요한 관리 작업을 수행하는 데 특히 유용합니다.

su 명령어의 기본 사용법을 살펴보고 작동 방식을 이해해 보겠습니다.

Su 의 기본 사용법

LabEx VM 환경에서 터미널을 엽니다. 다음 구문을 사용하여 su 명령어를 사용할 수 있습니다.

su [options] [username]

사용자 이름을 지정하지 않고 su를 실행하면 기본적으로 root 사용자로 설정됩니다.

su

root 암호를 묻는 메시지가 표시됩니다. 그러나 Ubuntu 를 포함한 많은 최신 Linux 배포판에서는 보안상의 이유로 root 계정이 기본적으로 비활성화되어 있습니다.

실습을 위해 테스트 사용자를 생성해 보겠습니다.

sudo adduser testuser

메시지가 표시되면 필요한 정보를 입력합니다. 간단하게 이 테스트 사용자의 암호로 "password"를 사용할 수 있습니다.

이제 이 사용자로 전환해 보겠습니다.

su testuser

메시지가 표시되면 testuser 에 대해 생성한 암호를 입력합니다. 인증되면 프롬프트가 변경되어 현재 testuser 로 작동하고 있음을 나타냅니다.

사용자 전환이 성공적으로 완료되었는지 확인하려면 다음을 실행합니다.

whoami

출력은 다음과 같아야 합니다.

testuser

원래 사용자로 돌아가려면 다음을 입력합니다.

exit

옵션과 함께 Su 사용

su 명령어는 여러 옵션을 지원합니다. 가장 일반적인 옵션은 전체 로그인 환경을 제공하는 - (하이픈) 옵션입니다.

su - testuser

이는 사용자 신원을 전환할 뿐만 아니라 다음을 수행합니다.

  • 대상 사용자의 홈 디렉토리로 변경
  • 대상 사용자의 환경 변수 설정
  • 로그인 쉘 제공

이 명령을 시도하고 차이점을 관찰하십시오.

pwd

출력은 testuser 의 홈 디렉토리를 표시해야 합니다.

/home/testuser

다음을 입력하여 testuser 에서 종료합니다.

exit

su 명령어에 대한 이러한 기본적인 이해는 다음 단계에서 인증 실패 문제를 해결하는 데 도움이 됩니다.

일반적인 Su 인증 실패 및 원인

su 명령어를 사용할 때 다양한 이유로 인증 실패가 발생할 수 있습니다. 이러한 실패를 이해하는 것이 문제를 해결하기 위한 첫 번째 단계입니다.

인증 실패 테스트

이해를 돕기 위해 의도적으로 몇 가지 인증 실패를 만들어 보겠습니다.

  1. 잘못된 암호로 testuser 로 전환해 보십시오.
su testuser

잘못된 암호를 입력합니다. 다음과 유사한 오류 메시지가 표시됩니다.

su: Authentication failure
  1. 존재하지 않는 사용자로 전환해 보십시오.
su nonexistentuser

다음과 같은 오류 메시지가 표시됩니다.

su: user nonexistentuser does not exist

인증 실패의 일반적인 원인

1. 잘못된 암호

인증 실패의 가장 일반적인 원인은 단순히 잘못된 암호를 입력하는 것입니다. 이는 다음과 같은 이유로 발생할 수 있습니다.

  • 오타
  • Caps Lock 이 활성화됨
  • 암호 기억 실패

2. 계정 제한

일부 계정은 로그인을 방지하거나 암호가 만료되도록 구성될 수 있습니다.

이를 시연하기 위해 테스트 사용자를 수정해 보겠습니다.

sudo passwd -l testuser

이렇게 하면 testuser 의 암호가 잠깁니다. 이제 시도해 보십시오.

su testuser

올바른 암호를 입력하더라도 인증 실패가 표시됩니다.

다음을 사용하여 계정을 잠금 해제합니다.

sudo passwd -u testuser

3. PAM (Pluggable Authentication Modules) 구성 문제

PAM (Pluggable Authentication Modules) 시스템은 Linux 에서 인증을 제어합니다. PAM 구성 문제는 su 실패를 유발할 수 있습니다.

su 명령어에 대한 PAM 구성을 살펴보겠습니다.

cat /etc/pam.d/su

이 파일에는 su 명령어와 관련된 PAM 구성이 포함되어 있습니다. 다음과 같이 액세스를 제한할 수 있는 줄을 찾습니다.

auth       required   pam_wheel.so

이 줄이 주석 처리되지 않은 경우, su 액세스를 wheel 그룹의 구성원으로 제한합니다.

4. Su 바이너리의 권한 문제

su 명령의 바이너리 파일은 제대로 작동하려면 올바른 권한이 있어야 합니다.

ls -l $(which su)

출력은 다음과 유사해야 합니다.

-rwsr-xr-x 1 root root 71816 Apr 18  2022 /usr/bin/su

권한의 s는 setuid 비트가 설정되어 있음을 나타내며, 이를 통해 프로그램은 실행하는 사용자가 아닌 소유자 (root) 의 권한으로 실행될 수 있습니다.

5. 인증 로그 검사

인증 실패 문제를 해결할 때 시스템 로그를 확인하면 귀중한 정보를 얻을 수 있습니다.

sudo tail /var/log/auth.log

이 명령은 실패한 su 시도를 포함하여 최근 인증 이벤트를 표시합니다.

예를 들어, 실패한 su 시도는 다음과 같은 항목을 표시할 수 있습니다.

May 10 14:23:45 ubuntu su[12345]: FAILED su for root by labex

su 인증 실패의 이러한 일반적인 원인을 이해하면 다음 단계에서 문제를 보다 효과적으로 식별하고 해결하는 데 도움이 됩니다.

Su 명령어에 대한 접근 제어 구성

Linux 는 su 명령어를 사용할 수 있는 사용자를 제어하는 여러 메커니즘을 제공합니다. 이 단계에서는 보안을 강화하기 위해 이러한 접근 제어를 구성하는 방법을 살펴보겠습니다.

PAM 구성 이해

PAM (Pluggable Authentication Modules) 시스템은 Linux 에서 인증을 담당합니다. su 명령어에 대한 구성은 /etc/pam.d/su 파일에 저장됩니다.

이 파일을 자세히 살펴보겠습니다.

cat /etc/pam.d/su

이 파일에는 인증 수행 방식을 제어하는 다양한 지시문이 포함되어 있습니다. 찾아야 할 중요한 줄 중 하나는 다음과 같습니다.

auth       required   pam_wheel.so

이 줄이 주석 처리되지 않은 경우 (#으로 시작하지 않음), su 액세스를 wheel 그룹의 구성원으로 제한합니다.

특정 그룹으로 Su 액세스 제한

su를 사용하여 root 로 전환하는 것을 특정 그룹의 구성원으로 제한할 수 있습니다. 이는 일반적인 보안 관행입니다.

먼저 sugroup이라는 새 그룹을 생성해 보겠습니다.

sudo groupadd sugroup

다음으로, 테스트 사용자를 이 그룹에 추가합니다.

sudo usermod -aG sugroup testuser

이제 PAM 구성을 수정하여 su 액세스를 이 그룹의 구성원으로 제한해야 합니다.

sudo cp /etc/pam.d/su /etc/pam.d/su.bak

이제 nano 편집기에서 PAM 구성 파일을 엽니다.

sudo nano /etc/pam.d/su

다음과 유사한 줄을 찾습니다.

## auth       required   pam_wheel.so

이 줄의 주석을 해제하고 (시작 부분의 ## 제거) wheel 대신 sugroup 을 사용하도록 수정합니다.

auth       required   pam_wheel.so group=sugroup

Ctrl+O를 눌러 파일을 저장한 다음 Ctrl+X를 눌러 nano 를 종료합니다.

구성 테스트

sugroup 에 속하지 않은 사용자로 su를 사용해 보면서 구성을 테스트해 보겠습니다.

먼저 다른 테스트 사용자를 생성합니다.

sudo adduser testuser2

메시지가 표시되면 필요한 정보를 입력합니다.

이제 testuser2 를 사용하여 root 사용자로 전환해 보십시오.

su - testuser2

메시지가 표시되면 testuser2 의 암호를 입력합니다.

이제 root 사용자로 전환해 보십시오.

su -

올바른 root 암호를 입력하더라도 인증 실패 메시지가 표시되어야 합니다. 이는 testuser2 가 sugroup 의 구성원이 아니기 때문입니다.

이제 원래 사용자로 다시 전환합니다.

exit

sugroup 의 구성원인 testuser 를 사용하여 su를 사용해 보십시오.

su - testuser

메시지가 표시되면 testuser 의 암호를 입력합니다.

이제 root 사용자로 전환해 보십시오.

su -

올바른 root 암호를 입력하면 root 사용자로 성공적으로 전환할 수 있습니다.

변경 사항 되돌리기

이 랩의 나머지 부분을 완료하기 위해 PAM 구성에 대한 변경 사항을 되돌리겠습니다.

sudo cp /etc/pam.d/su.bak /etc/pam.d/su

이 구성을 사용하면 su 명령어를 사용하여 root 사용자로 전환할 수 있는 사용자를 제어하여 시스템의 보안을 강화할 수 있습니다.

Su 인증 실패 문제 해결 및 해결

이제 su 인증 실패의 일반적인 원인과 접근 제어를 구성하는 방법을 이해했으므로 이러한 실패의 문제 해결 및 해결에 집중해 보겠습니다.

인증 실패 진단

su 인증 실패가 발생하면 다음의 체계적인 단계를 따라 문제를 진단하십시오.

1 단계: 오류 메시지 확인

오류 메시지는 실패의 특성에 대한 귀중한 단서를 제공할 수 있습니다. 일반적인 오류 메시지는 다음과 같습니다.

  • su: Authentication failure - 일반적으로 잘못된 암호를 나타냅니다.
  • su: user username does not exist - 지정된 사용자 계정이 존재하지 않습니다.
  • su: permission denied - 접근 제어 제한으로 인해 작업이 방지되고 있습니다.

2 단계: 사용자 계정 확인

대상 사용자 계정이 존재하고 잠겨 있지 않은지 확인합니다.

grep testuser /etc/passwd

이렇게 하면 암호 파일에 testuser 에 대한 항목이 표시되어 계정이 존재함을 확인합니다.

계정이 잠겨 있는지 확인합니다.

sudo passwd -S testuser

출력에는 계정의 상태가 포함됩니다. "L"(잠김) 이라고 표시되면 계정이 잠긴 것입니다.

3 단계: 접근 제어 제한 확인

이전 단계에서 배운 것처럼 PAM 구성은 su 액세스를 제한할 수 있습니다. 이러한 제한 사항을 확인합니다.

grep -v "^#" /etc/pam.d/su | grep pam_wheel

이 명령이 pam_wheel.so를 포함하는 줄을 반환하면 su 에 대한 액세스가 특정 그룹의 구성원으로 제한될 수 있습니다.

4 단계: 시스템 로그 검사

시스템 로그는 인증 실패에 대한 자세한 정보를 제공할 수 있습니다.

sudo tail -n 20 /var/log/auth.log

su 실패와 관련된 항목을 찾아 추가 컨텍스트를 제공할 수 있습니다.

일반적인 Su 인증 실패 해결

이제 일반적인 su 인증 실패와 이를 해결하는 방법을 살펴보겠습니다.

1. 잘못된 암호

올바른 암호를 입력했는데도 인증 실패가 계속 발생하면 암호를 재설정해야 할 수 있습니다.

sudo passwd testuser

메시지가 표시되면 testuser 에 대한 새 암호를 입력합니다.

2. 계정 잠김

계정이 잠긴 경우 잠금 해제합니다.

sudo passwd -u testuser

3. 접근 제어 제한

접근 제어 제한으로 인해 su 액세스가 방지되는 경우 다음 중 하나를 수행할 수 있습니다.

a. 사용자를 필요한 그룹에 추가합니다.

sudo usermod -aG sugroup testuser2

이렇게 하면 testuser2 가 sugroup 에 추가됩니다.

b. PAM 구성에서 관련 줄을 주석 처리하여 제한을 일시적으로 비활성화합니다.

sudo sed -i 's/^auth\s\+required\s\+pam_wheel.so/#&/' /etc/pam.d/su

이 명령은 su PAM 구성에서 pam_wheel.so 를 포함하는 줄을 주석 처리합니다.

4. 파일 권한 문제

su 바이너리에 잘못된 권한이 있는 경우 수정합니다.

sudo chmod u+s $(which su)

이렇게 하면 su 바이너리에 setuid 비트가 설정됩니다.

수정 사항 테스트

수정 사항을 적용한 후 su 인증이 올바르게 작동하는지 테스트합니다.

su - testuser

메시지가 표시되면 testuser 의 암호를 입력합니다. 성공하면 이제 testuser 로 로그인됩니다.

root 사용자로 전환해 보십시오.

su -

root 암호가 있고 접근 제어 제한이 제대로 해결된 경우 root 사용자로 성공적으로 전환할 수 있습니다.

이러한 문제 해결 단계와 수정 사항은 가장 일반적인 su 인증 실패를 해결합니다. 이러한 문제를 체계적으로 진단하고 해결함으로써 시스템에서 su 명령이 올바르게 작동하도록 할 수 있습니다.

안전한 Su 사용을 위한 모범 사례

이 마지막 단계에서는 su 명령어를 안전하게 사용하는 모범 사례를 살펴보겠습니다. 이러한 관행을 따르면 관리 작업을 효과적으로 수행하면서 보안 위험을 최소화하는 데 도움이 됩니다.

가능한 경우 Su 대신 Sudo 사용

sudo 명령어는 일반적으로 su보다 더 안전한 것으로 간주됩니다. 그 이유는 다음과 같습니다.

  • 권한에 대한 더 세분화된 제어를 허용합니다.
  • 권한이 상승된 상태로 실행된 명령을 로깅합니다.
  • root 암호를 공유할 필요가 없습니다.

su 대신 sudo 를 사용하는 예:

## 대신:
su -
## 그런 다음 root로 명령을 입력합니다.

## 사용:
sudo command

이 예제를 시도해 보십시오.

sudo ls /root

이렇게 하면 root 사용자로 전환하지 않고 root 권한으로 ls 명령이 실행됩니다.

Sudo 액세스 적절하게 구성

필요한 권한만 부여하도록 sudo 가 올바르게 구성되었는지 확인합니다.

sudo visudo

이렇게 하면 안전한 편집기에서 sudoers 파일이 열립니다. 파일에는 다음과 유사한 항목이 포함되어야 합니다.

## User privilege specification
root    ALL=(ALL:ALL) ALL

## Members of the sudo group may gain root privileges
%sudo   ALL=(ALL:ALL) ALL

변경하지 않고 종료하려면 Ctrl+X를 누르십시오.

직접 Root 로그인 제한

특히 SSH 를 통해 root 로 직접 로그인을 권장하지 않습니다. 대신 사용자는 일반 계정으로 로그인하고 필요한 경우 su 또는 sudo를 사용해야 합니다.

SSH 를 통한 직접 root 로그인이 비활성화되었는지 확인합니다.

grep "PermitRootLogin" /etc/ssh/sshd_config

이 명령이 PermitRootLogin no를 반환하면 직접 root 로그인이 제대로 비활성화된 것입니다.

강력한 암호 정책 구현

root 암호와 su 액세스 권한이 있는 사용자의 암호가 강력한지 확인합니다.

sudo apt-get install -y libpam-pwquality

이렇게 하면 암호 품질 검사를 위한 PAM 모듈이 설치됩니다.

PAM 구성을 편집하여 암호 정책을 구성합니다.

sudo nano /etc/pam.d/common-password

pam_pwquality.so를 포함하는 줄을 찾아 다음과 같은 적절한 매개변수가 있는지 확인합니다.

password requisite pam_pwquality.so retry=3 minlen=12 difok=3

구성을 검토하는 중이므로 변경하지 않고 종료하려면 Ctrl+X를 누르십시오.

Su 사용 정기적으로 감사

로그를 검토하여 su 사용을 모니터링합니다.

sudo grep "su:" /var/log/auth.log | tail -n 10

이렇게 하면 성공 및 실패한 최근의 su 시도가 표시됩니다.

공격일 수 있는 여러 번의 su 시도 실패에 대한 자동 알림을 설정하는 것을 고려하십시오.

대시 옵션과 함께 Su 사용

su를 사용하여 다른 사용자, 특히 root 로 전환할 때는 깨끗한 환경을 얻기 위해 대시 (-) 옵션을 사용합니다.

su - username

이렇게 하면 대상 사용자의 환경 변수가 있는 로그인 셸이 제공되므로 더 안전하고 원래 사용자의 환경을 상속하여 발생할 수 있는 잠재적인 문제를 방지할 수 있습니다.

실습 세션 - 안전한 Su 사용

이러한 모범 사례를 실천해 보겠습니다.

  1. root 가 된 다음 명령을 실행하기 위해 su -를 사용하는 대신 sudo 를 사용합니다.
## 대신:
## su -
## cat /etc/shadow

## 사용:
sudo cat /etc/shadow
  1. 깨끗한 환경으로 testuser 로 전환합니다.
su - testuser
  1. 원래 사용자로 다시 종료합니다.
exit
  1. su 사용에 대한 인증 로그를 확인합니다.
sudo grep "su:" /var/log/auth.log | tail -n 5

이러한 모범 사례를 따르면 시스템에 대한 잠재적인 보안 위험을 최소화하면서 su 명령어를 안전하게 사용할 수 있습니다.

요약

이 랩에서는 Linux 에서 su 명령어를 살펴보고 일반적인 인증 실패 문제를 해결하는 방법을 배웠습니다. 다음 내용을 다루었습니다.

  1. su 명령의 기본 사용법과 작동 방식 이해
  2. 잘못된 암호, 계정 제한 및 PAM 구성 문제를 포함하여 su 인증 실패의 일반적인 원인 식별
  3. 보안을 강화하기 위해 su 명령에 대한 접근 제어 구성
  4. 체계적인 진단을 통한 su 인증 실패 문제 해결 및 해결
  5. 가능한 경우 sudo 사용, 강력한 암호 정책 구성 및 su 사용 정기 감사를 포함한 안전한 su 사용을 위한 모범 사례 구현

이러한 기술과 모범 사례를 적용하면 Linux 시스템의 보안을 유지하면서 su 명령이 올바르게 작동하도록 할 수 있습니다. 적절한 인증 관리는 시스템 관리 및 보안의 중요한 측면임을 기억하십시오.