CentOS 7에서 root 계정으로 su 명령 실행 시 '권한 없음' 오류 해결 방법

문제 상황

고객이 제공한 CentOS 7 서버 환경에서 root 사용자로 로그인 후, 다른 사용자 계정으로 전환하려고 su - test 명령을 실행했으나 다음과 같은 오류가 발생합니다:

no permission to execute the command

환경 정보

소프트웨어 버전
CentOS 7

원인 분석

해당 오류는 일반적으로 다음 두 가지 원인 중 하나에 의해 발생할 수 있습니다.

실행 파일에 대한 권한 부족

먼저, /bin/su 바이너리 파일의 권한 상태를 확인합니다:

ls -l /bin/su

정상적인 경우 이 파일은 setuid 비트가 설정되어 있어야 하며, 소유자는 root이고, 권한은 -rwsr-xr-x 형태여야 합니다. 만약 실행 권한이 없다면 문제가 될 수 있으나, 대부분의 경우 기본 설치 상태에서는 정상입니다.

테스트를 위해 간단한 스크립트를 작성하고 실행 시도를 해보겠습니다:

echo '#!/bin/bash
echo "테스트 성공"' > test_script.sh

스크립트를 직접 인터프리터로 실행하면 정상 동작합니다:

sh test_script.sh  # 출력: 테스트 성공

하지만, 스크립트 자체를 실행하려고 할 때:

./test_script.sh  # 접근 거부 (권한 없음)

실행 권한이 없는 경우 위와 같은 오류가 발생합니다. 이를 해결하려면:

chmod +x test_script.sh
./test_script.sh  # 이제 정상 실행됨

PAM 보안 모듈에 의한 제한

더 중요한 원인은 PAM(Pluggable Authentication Modules) 구성에 있습니다. CentOS 7에서는 기본적으로 pam_wheel.so 모듈이 활성화되어 있어, wheel 그룹에 속하지 않은 사용자는 su 명령을 제한받을 수 있습니다.

다음 파일을 확인하세요:

/etc/pam.d/su

해당 파일 내에 아래 줄이 포함되어 있다면, wheel 그룹 외의 사용자는 su 사용이 제한됩니다:

auth required pam_wheel.so use_uid

해결 방안

파일 권한 수정

만약 /bin/su 파일 자체에 실행 권한이 없다면, 다음 명령어로 권한을 복구합니다:

chmod 4755 /bin/su

여기서 4는 setuid 비트를 의미하며, 이로 인해 명령어는 항상 소유자(root)의 권한으로 실행됩니다.

sudo를 통한 대체 접근

가장 실용적인 해결책은 sudo를 사용하는 것입니다. root 계정은 이미 최고 권한을 가지고 있으므로, 다음 명령어로 다른 사용자로 전환할 수 있습니다:

sudo su - test

또는 더 간결하게:

sudo -u test -i

이 방법은 PAM 제한을 우회하면서도 시스템 로그에 기록되므로 감사 추적이 가능하며, 보안 측면에서도 더 안전합니다.

검증 결과

위의 sudo 명령어를 사용한 결과, 정상적으로 test 사용자 계정으로 전환되었으며, 기능 검증에 성공했습니다. PAM 제한이 존재하더라도 sudo는 별도의 인증 경로를 통해 접근을 허용하기 때문에 효과적인 우회 수단이 됩니다.

태그: CentOS 7 su 명령어 pam sudo 권한 문제

6월 22일 21:19에 게시됨