소개
Linux 의 "su"(substitute user) 명령어는 사용자가 일시적으로 다른 사용자 계정 (주로 root 사용자) 으로 전환하여 관리 작업을 수행할 수 있게 해주는 강력한 도구입니다. 하지만 su 인증 실패가 발생하면 접근이 거부되거나 잠재적인 보안 위험이 초래될 수 있습니다. 이 튜토리얼에서는 Linux 에서 su 인증 실패 문제를 해결하는 과정을 안내하며, 일반적인 원인, 구성 설정 및 안전한 su 사용을 위한 모범 사례를 다룹니다.
su 명령어 이해 및 기본 사용법
이 단계에서는 Linux 의 su 명령어가 현재 사용자 ID 를 다른 사용자로 전환하는 방법을 배웁니다. 이는 높은 권한이 필요한 관리 작업에 특히 유용합니다.
su 명령어의 기본 사용법과 작동 원리를 살펴보겠습니다.
su 의 기본 사용법
LabEx VM 환경에서 터미널을 여세요. 다음 구문으로 su 명령어를 사용할 수 있습니다.
su [options] [username]
사용자 이름을 지정하지 않고 su를 실행하면 기본 대상은 root 사용자입니다.
su
이 명령은 root 를 대상으로 하지만, Ubuntu 는 보통 root 의 비밀번호 인증을 잠가 둡니다. 여기서 인증에 실패하는 것은 예상된 결과입니다. root 비밀번호 로그인을 활성화하거나 플랫폼 계정을 변경하지 마세요. 아래의 모든 로그인 성공 테스트에는 실습용 임시 사용자를 사용합니다.
연습할 테스트 사용자를 생성합니다.
sudo adduser testuser
메시지가 표시되면 필요한 정보를 입력하세요. 이 임시 테스트 계정에만 연습용 비밀번호 DemoUser123!를 사용하세요. labex의 비밀번호나 sudo 그룹 소속은 변경하지 마세요.
이제 해당 사용자로 전환해 봅니다.
su testuser
메시지가 표시되면 testuser 를 생성할 때 설정한 비밀번호를 입력하세요. 인증되면 프롬프트가 변경되어 testuser 로 작업 중임을 나타냅니다.
사용자 전환에 성공했는지 확인합니다.
whoami
출력은 다음과 같아야 합니다.
testuser
원래 사용자로 돌아가려면 다음을 입력하세요.
exit
옵션과 함께 su 사용하기
su 명령어는 여러 옵션을 지원합니다. 가장 흔한 옵션은 전체 로그인 환경을 제공하는 - (하이픈) 입니다.
su - testuser
이 옵션은 사용자 ID 를 전환할 뿐만 아니라 다음 작업도 수행합니다.
- 대상 사용자의 홈 디렉터리로 이동합니다.
- 대상 사용자의 환경 변수를 설정합니다.
- 로그인 셸을 제공합니다.
다음 명령을 실행하여 차이를 관찰하세요.
pwd
출력에 testuser 의 홈 디렉터리가 표시되어야 합니다.
/home/testuser
다음을 입력하여 testuser 셸에서 나옵니다.
exit
이러한 su 명령어의 기초는 다음 단계에서 인증 실패 문제를 해결하는 데 도움이 됩니다.
일반적인 su 인증 실패 및 원인
이 단계에서는 일반적인 su 인증 실패 상황을 만들고 확인합니다. 이러한 실패를 이해하는 것이 문제 해결의 첫걸음입니다.
인증 실패 테스트
인증 실패를 더 잘 이해하기 위해 의도적으로 실패를 발생시켜 봅니다.
먼저 잘못된 비밀번호로 testuser 로 전환을 시도하세요.
su testuser
잘못된 비밀번호를 입력하면 다음과 유사한 오류 메시지가 표시됩니다.
su: Authentication failure
다음으로 존재하지 않는 사용자로 전환을 시도하세요.
su nonexistentuser
다음과 같은 오류 메시지가 표시됩니다.
su: user nonexistentuser does not exist
인증 실패의 일반적인 원인
1. 잘못된 비밀번호
인증 실패의 가장 흔한 원인은 잘못된 비밀번호를 입력하는 것입니다. 다음과 같은 이유로 발생할 수 있습니다.
- 오타
- Caps Lock 이 켜져 있음
- 비밀번호를 잊어버림
2. 계정 제한
일부 계정은 로그인을 막도록 구성되어 있거나 비밀번호가 만료되었을 수 있습니다.
이를 살펴보기 위해 테스트 사용자를 수정합니다.
sudo usermod -L testuser
-L 옵션은 임시 testuser 계정의 비밀번호 인증을 잠급니다. 이제 다음을 시도하세요.
su testuser
올바른 비밀번호를 입력해도 인증에 실패합니다.
-U 옵션은 비밀번호 잠금을 해제합니다. 다음 명령으로 이 테스트 계정만 잠금 해제하세요.
sudo usermod -U testuser
3. PAM 구성 문제
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. 인증 로그 확인
이 LabEx VM 에서 인증 실패 문제를 해결할 때는 lastb로 실패한 로그인 기록을 확인하세요.
sudo lastb | head
이 명령은 /var/log/btmp를 읽어 최근 실패한 인증 시도를 표시합니다. 시스템에 기록된 경우 실패한 su 시도도 포함됩니다.
예를 들어 실패한 su 시도는 대상 사용자와 터미널 세션을 포함하는 항목으로 표시될 수 있습니다.
이러한 일반적인 su 인증 실패 원인을 이해하면 다음 단계에서 문제를 더 효과적으로 식별하고 해결할 수 있습니다.
su 명령어에 대한 접근 제어 구성
이 단계에서는 임시 대상 계정에 PAM 그룹 규칙을 테스트합니다. root 비밀번호 로그인을 활성화하거나 플랫폼 접근을 제한하지 않습니다.
임시 계정 준비
원래 labex 셸에서 시작하세요. sudo 를 사용하기 전에 현재 ID 를 확인합니다.
whoami
결과는 반드시 labex여야 합니다. 두 번째 호출 사용자와 별도의 대상 사용자를 생성한 뒤 이 임시 계정들의 비밀번호만 설정하세요.
sudo adduser --disabled-password --gecos '' testuser2
sudo adduser --disabled-password --gecos '' su-lab-target
printf '%s\n' 'testuser2:DemoOther123!' 'su-lab-target:DemoTarget123!' | sudo chpasswd
sudo groupadd sugroup
sudo usermod -aG sugroup testuser
sugroup 에 속한 사용자는 testuser 뿐입니다. 새 로그인 셸에서 이 그룹 소속이 반영됩니다. 두 호출 사용자 테스트 모두 대상 비밀번호는 DemoTarget123! 입니다.
특정 대상에만 적용되는 PAM 규칙 설정
PAM 은 /etc/pam.d/su를 통해 su 인증을 제어합니다. 설정 과정에서 원본 바이트를 /opt/labex/su-demo 아래에 저장했습니다. 다음 관리용 접두부는 대상이 su-lab-target 일 때만 그룹 검사를 적용합니다. 첫 번째 규칙은 labex 를 포함한 다른 모든 대상에 대해 다음 규칙을 건너뜁니다. use_uid는 호출자의 실제 ID 를 검사하고 group=sugroup은 허용된 그룹을 지정합니다.
sudo python3 - <<'PY'
from pathlib import Path
original = Path('/opt/labex/su-demo/pam-su.original').read_text()
prefix = """## Lab-only rule for su-lab-target
auth [success=1 default=ignore] pam_succeed_if.so quiet user != su-lab-target
auth required pam_wheel.so use_uid group=sugroup
"""
Path('/etc/pam.d/su').write_text(prefix + original)
PY
이 접두부 뒤에 원래 PAM 규칙이 유지됩니다. 그룹 소속이 비밀번호 인증을 대체하지는 않습니다. labex 를 시연용 그룹에 추가하거나 SSH, sudo 또는 플랫폼 계정 설정을 수정하지 마세요.
그룹 외부의 호출 사용자 테스트
DemoOther123! 를 사용하여 labex 에서 testuser2 로 전환하세요.
su - testuser2
해당 셸에서 올바른 대상 비밀번호 DemoTarget123! 로 범위에 포함된 대상에 전환을 시도하세요.
su - su-lab-target
testuser2 는 sugroup 에 속하지 않으므로 반드시 인증 오류로 실패해야 합니다. 실패한 su 는 새 셸을 생성하지 않습니다. 한 번만 종료하여 labex 로 돌아갑니다.
exit
whoami
계속하기 전에 whoami 가 labex 를 출력하는지 확인하세요.
그룹 내부의 호출 사용자 테스트
1 단계의 DemoUser123! 비밀번호로 testuser 로 전환하세요.
su - testuser
id
su - su-lab-target
대상 비밀번호로 DemoTarget123! 를 입력하세요. 이 전환은 성공해야 합니다. 대상 ID 를 확인합니다.
whoami
출력은 su-lab-target 이어야 합니다. 셸을 두 개 열었으므로 두 번 종료하세요. 첫 번째는 testuser 로, 두 번째는 labex 로 돌아갑니다.
exit
exit
whoami
whoami 가 labex 를 출력하는지 확인하세요. 임시 사용자의 셸에서 복원 명령을 실행하지 마세요.
원래 정책 복원
labex 에서 저장된 구성을 복원하고 원본과 비교하세요.
sudo cp -p /opt/labex/su-demo/pam-su.original /etc/pam.d/su
sudo cmp /opt/labex/su-demo/pam-su.original /etc/pam.d/su
비교에 성공하면 출력이 없습니다. 시연용 그룹과 사용자는 진단에 사용할 수 있도록 남아 있지만, su 는 다시 원래 정책을 사용합니다.
su 인증 실패 문제 해결
이 단계에서는 체계적인 절차로 su 인증 실패를 진단하고 해결합니다.
인증 실패 진단
su 인증 실패가 발생하면 다음 절차에 따라 문제를 진단하세요.
1 단계: 오류 메시지 확인
오류 메시지는 실패의 성격에 대한 유용한 단서를 제공합니다. 일반적인 메시지는 다음과 같습니다.
su: Authentication failure- 일반적으로 잘못된 비밀번호를 뜻합니다.su: user username does not exist- 지정된 사용자 계정이 존재하지 않습니다.su: permission denied- 접근 제어 제한이 작업을 차단합니다.
2 단계: 사용자 계정 확인
대상 계정이 존재하고 잠겨 있지 않은지 확인하세요.
grep testuser /etc/passwd
패스워드 파일의 testuser 항목이 표시되어 계정이 존재함을 확인할 수 있습니다.
계정이 잠겨 있는지 확인합니다.
sudo getent shadow testuser | cut -d: -f2 | cut -c1
이 명령은 비밀번호 해시가 아닌 임시 계정 비밀번호 필드의 첫 문자만 표시합니다. 첫 문자가 !이면 비밀번호 인증이 잠겨 있습니다.
3 단계: 접근 제어 제한 확인
이전 단계에서 배운 것처럼 PAM 구성이 su 접근을 제한할 수 있습니다. 해당 제한을 확인합니다.
grep -v "^#" /etc/pam.d/su | grep pam_wheel
pam_wheel.so가 포함된 줄이 반환되면 su 접근이 특정 그룹 구성원으로 제한되어 있을 수 있습니다.
4 단계: 시스템 로그 확인
실패한 로그인 기록은 인증 실패에 관한 유용한 정보를 제공할 수 있습니다.
sudo lastb | head
실패한 su 시도와 관련된 항목을 찾아 추가적인 맥락을 확인하세요.
일반적인 su 인증 실패 해결
일반적인 su 인증 실패와 해결 방법을 살펴봅니다.
1. 잘못된 비밀번호
올바른 비밀번호를 입력해도 인증에 실패하면 비밀번호를 재설정해야 할 수 있습니다.
printf '%s\n' 'testuser:DemoUser123!' | sudo chpasswd
이 명령은 임시 testuser 비밀번호만 알려진 연습용 값으로 재설정합니다. labex 나 root 는 변경하지 않습니다.
2. 계정 잠금
계정이 잠겨 있으면 잠금을 해제합니다.
sudo usermod -U testuser
3. 접근 제어 제한
접근 제어 제한으로 su 접근이 차단되면 다음 중 하나를 수행할 수 있습니다.
a. 사용자를 필요한 그룹에 추가합니다.
sudo usermod -aG sugroup testuser2
testuser2 를 sugroup 에 추가합니다.
b. 이 실습에서는 저장된 원본 파일을 복원하여 시연용 정책만 제거합니다.
sudo cp -p /opt/labex/su-demo/pam-su.original /etc/pam.d/su
임의의 인증 규칙을 비활성화하는 대신 정확한 원래 su 정책을 복원합니다.
4. 파일 권한 문제
플랫폼 바이너리를 변경하지 않고 su 바이너리 권한을 확인합니다.
ls -l "$(command -v su)"
예상되는 setuid 비트는 소유자의 실행 권한 위치에 s 로 표시됩니다. 플랫폼 바이너리가 손상되었다면 권한을 변경하는 대신 새 VM 을 사용하세요.
수정 사항 테스트
수정 후 su 인증이 정상 작동하는지 테스트합니다.
su - testuser
메시지가 표시되면 testuser 비밀번호를 입력하세요. 성공하면 testuser 로 로그인됩니다.
whoami로 testuser 인지 확인한 뒤 exit를 한 번 실행하여 labex 로 돌아가세요. root 비밀번호 로그인을 성공 테스트로 사용하지 마세요. 임시 계정 로그인이 성공 사례입니다.
이 진단 및 수정 절차는 가장 일반적인 su 인증 실패를 다룹니다. 문제를 체계적으로 진단하고 해결하면 시스템에서 su 명령어가 올바르게 작동하도록 할 수 있습니다.
안전한 su 사용을 위한 모범 사례
이 단계에서는 안전한 권한 사용을 검토하고 시연 과정에서 플랫폼 접근이 변경되지 않았는지 확인합니다.
개별 관리 명령에는 sudo 사용 권장
sudo 는 root 비밀번호를 공유하지 않고도 개별 관리 작업을 허용하고 기록할 수 있습니다. labex 셸에서 root 로그인 셸을 시작하지 않고 root 홈 디렉터리를 나열하세요.
sudo ls /root
플랫폼의 기존 sudo 정책을 유지하세요. 정책을 바꾸지 않고 허용된 명령을 확인할 수 있습니다.
sudo -l
인증 변경 범위 제한
운영 시스템에서는 관리자가 승인된 구성 절차를 통해 root 로그인, 비밀번호 품질과 인증 정책을 관리합니다. 이 실습은 SSH 설정, labex 비밀번호 또는 labex 그룹 소속을 변경하지 않습니다. 강력한 비밀번호 정책이나 다중 인증은 별도의 구현이 필요하며 이 튜토리얼에서는 어느 것도 구성하지 않습니다.
임시 su 정책이 제거되었는지 확인합니다.
sudo cmp /opt/labex/su-demo/pam-su.original /etc/pam.d/su
출력이 없으면 정책이 저장된 원본과 일치합니다.
실패한 인증 시도 감사
실패한 로그인 데이터베이스로 성공하지 못한 시도를 조사합니다.
sudo lastb | head
이 명령은 /var/log/btmp를 읽으며 성공한 모든 su 세션을 보여 주지는 않습니다. 시스템이 실제로 기록한 항목만 해석하고 운영 환경에서는 반복되는 실패를 조사하세요.
로그인 환경 사용 후 명시적으로 돌아오기
대시 옵션은 대상 사용자의 로그인 환경을 시작합니다. testuser 비밀번호 DemoUser123! 를 사용하세요.
su - testuser
whoami
exit
whoami
두 ID 확인 결과는 차례로 testuser 와 labex 여야 합니다. exit 는 su 가 생성한 셸만 닫습니다. VM 은 원래 플랫폼 로그인, sudo 접근과 su 정책을 유지합니다.
요약
이번 실습에서는 Linux 의 su 명령어를 살펴보고 일반적인 인증 실패 문제를 해결하는 방법을 배웠습니다. 다룬 내용은 다음과 같습니다.
su명령어의 기본 사용법과 작동 원리 이해- 잘못된 비밀번호, 계정 제한, PAM 구성 문제 등 su 인증 실패의 일반적인 원인 식별
- 보안 강화를 위한
su명령어의 접근 제어 구성 - 체계적인 진단을 통한 su 인증 실패 문제 해결
- 가능한 경우 sudo 사용, 강력한 비밀번호 정책 구성, 정기적인 su 사용 감사를 포함한 안전한 su 사용을 위한 모범 사례 구현
이러한 기법과 모범 사례를 적용하여 Linux 시스템의 보안을 유지하면서 su 명령어가 올바르게 작동하도록 보장할 수 있습니다. 적절한 인증 관리는 시스템 관리 및 보안의 핵심 요소임을 기억하십시오.



