[Linux] 리눅스에서 다른사용자로 명령어를 실행하는 3가지 방법

Symptoms #

  • 리눅스 환경에서 다른사용자로 명령어를 실행하는 방법

Environment #

  • Linux

Issue #

  • su / sudo / runuser 명령어의 차이점에 대해서 알아본다

Solution #

runuser

runuser 명령은 대체 사용자 및 그룹 ID로 셸을 실행합니다. 이 명령은 루트 사용자로 실행할 때만 유용합니다. 세션 PAM 훅만 실행되며 비밀번호 프롬프트가 표시되지 않습니다. 사용자 ID를 설정할 권한이 없는 루트 사용자가 아닌 사용자로 실행하면 바이너리가 설정되지 않으므로 명령이 실패합니다. runuser는 인증 및 계정 PAM 후크를 실행하지 않으므로 su보다 오버헤드가 낮게 실행됩니다

구문 사용법:
runuser -l username -c "command"
runuser -l username -c "/path/to/command arg1 arg2"

SU

su 명령어는 현재의 사용자를 로그아웃하지 않고 다른 사용자로 전환하는 명령어입니다. 사용자가 가진 환경변수 설정들을 그대로 유지하며 대상 사용자로 전환합니다.

구문 사용법:
su - username -c "command"

root shell로 변경
su - root

SUDO

sudo 명령어는 사용자가 root의 권한을 임시로 빌려서 명령을 실행하는 명령어입니다. 단순히 권한을 잠시 빌리는 것이기 때문에 로그는 해당 사용자에게 기록됩니다. sudo 명령어를 사용하기 위해서는 /etc/sudoers 등록되어 있어야합니다.

구문 사용법:
sudo -u username command arg1

root shell로 변경
sudo -i
sudo -s

Summary

CommandRoot to userUser to rootAny to any userAuth typeLog fileRemark
runuserYNNNoneN/Apam 인증을 받지 않아 오버헤드가 적습니다.
suYYY변경 유저 패스워드/var/log/auth.log /var/log/secureroot 유저의 패스워드 공유가 필요합니다.
sudoYYY자기자신 패스워드/var/log/auth.log /var/log/securesudoers에 등록된 사용자만 사용가능합니다.