Linux Run Command As Another User | 리눅스에서 다른 유저로 커맨드 실행하기

닉스크래프트에게,

다른 유저 또는 루트 유저로 리눅스 커맨드를 실행하는 방법을 알고 싶어요.

– 리눅스 커맨드가 헷갈리는 사람이.

 

헷갈리는 사람에게,

다른 유저 또는 루트 유저로 커맨드를 실행하는 방법은 아래와 같아요.

 

#1. runuser 커맨드

runuser 커맨드는 유저와 그룹의 ID를 바꾸어서 쉘을 실행해요. 이 커맨드는 루트 유저만이 사용할 수 있어요.

세션 PAM 훅만 실행되고, 비밀번호를 묻지 않습니다. 유저 ID를 바꿀 수 있는 권한이 없는, 루트가 아닌 유저로 실행하면 바이너리가 setuid가 아니게 되어 커맨드를 실행할 수 없습니다. runuser 커맨드는 인증을 거치지 않고 PAM 훅을 사용하기 때문에 su보다 오버헤드가 적습니다.

문법은 아래와 같아요:

runuser -l userNameHere -c ‘command’
runuser -l userNameHere -c ‘/path/to/command arg1 arg2’

예를 들어, 루트 유저에서 orale 유저의 쉘 리소스 제한을 확인하고 싶다면:

runuser -l oracle -c ‘ulimit -SHa’

혹은 nginx나 lighttpd 웹 서버 제한을 확인하려면:

runuser -l nginx -c ‘ulimit -SHa’

OR

runuser -l lighttpd -c ‘ulimit -SHa’

때로는 권한(보안) 문제로 인하여 루트 유저가 NFS 마운트에 접근할 수 없을 때가 있지요:

ls -l /nfs/wwwroot/cyberciti.biz/http

OR

cd /nfs/wwwroot/cyberciti.biz/http

출력 예시:

-bash: cd: /nfs/wwwroot/cyberciti.biz/http/: Permission denied

하지만 apache 유저는 /nfs/wwwroot/cyberciti.biz/http/에 있는 NFS 기반 마운트에 접근할 수 있어요:

runuser -l apache -c ‘ls -l /nfs/wwwroot/cyberciti.biz/http/’

OR

runuser -l apache -c ‘cd /nfs/wwwroot/cyberciti.biz/http/; vi index.php’

runuser 커맨드를 사용하기 위해서는 비밀번호를 입력할 필요가 없으며, 루트 유저로만 실행할 수 있어요.

옵션

  1. -l: 쉘을 로그인 쉘로 만듭니다. runuser -l PAM file 형식으로 실행하여 디폴트 파일 대신 사용할 수 있습니다.
  2. -g group: 주 그룹을 지정합니다.
  3. -G group: 보조 그룹을 지정합니다.
  4. -c COMMAND: -c로 커맨드를 쉘에 전달합니다.
  5. -session-command=COMMAND: COMMAND 하나를 쉘에 전달하되 새 세션을 만들지는 않습니다.
  6. -m: 환경변수를 재설정하지 않습니다.

 

#2. su 커맨드

su 커맨드는 수퍼 유저가 되거나, 다른 유저인 척하거나, 유저를 설정하고 바꿀 수 있어요. 현재 실행 중인 콘솔이나 쉘에서 사용 중인 현재 유저를 패스워드를 알고 있는 다른 유저로 바꿀 수 있게 해줘요. 신택스는 아래와 같아요:

su –
su – username

루트 유저로 바꾸기

su 커맨드는 목표 유저의 비밀번호를 물어봐요. 쉘 프롬프트에서 su –를 입력하면 쉘의 유저를 루트 유저로 바꿀 수 있어요 (반드시 루트 유저의 비밀번호를 알고 있어야 해요):

vivek@wks01:~$ su –

또는

vivek@wks01:~$ su – root

출력 예시:

Password:
root@wks01:/root# logout
vivek@wks01:~$

루트 비밀번호를 올바르게 입력했다면 세션의 주인이 루트 유저로 바뀌었을 거에요. 로그인 쉘을 나가기 위해서는 logout을 입력하세요. whoami 또는 id 커맨드를 입력하면 세션 주인을 확인할 수 있어요:

whoami

또는

id

루트 유저로 커맨드 실행하기

문법은 아래와 같아요:

su – root -c “command”
OR
su – -c “command arg1”

일반 유저로는 확인할 수 없는 /root 디렉토리의 내용을 보기 위해서는 아래와 같이 하세요:

su – root -c “ls -l /root”

참고로, 리눅스와 일부 유닉스 비슷한 시스템들은 wheel 그룹이 있고, 여기에 속한 유저들만 루트로 su 할 수 있게 해줘요.

su 커맨드를 이용하여 다른 유저로 커맨드 실행하기

아래 커맨드는 유저를 oracle로 바꾸고, 제한 리스트를 보여줘요:

su – oracle -c ‘ulimit -aHS’

oracle 유저의 비밀번호를 올바르게 입력하면 세션의 주인이 oracle로 바뀌어요. su 커맨드의 로그는 시스템 로그에 보관돼요. 경로는 주로 /var/log/auth.log, 또는 /var/log/sercure (RHEL/CentOS) 에요.

 

#3. sudo 커맨드

sudo는 커맨드를 다른 유저로 실행할 수 있게 해주지만, 어떤 유저가 다른 유저로 어떤 커맨드를 실행할 수 있는지 정해진 규칙에 따라요. 이 규칙은 /etc/sudoers에 있어요. su와는 다르게, sudo는 목표 유저가 아닌 현재 유저의 비밀번호를 물어봐서 인증을 해요. sudo는 시스템 관리자가 ‘특정 유저가 특정 커맨드를 루트나 다른 유저로 실행할 수 있도록’ 권한을 관리할 수 있게 해줘요. 비밀번호를 공유하지 않고, 특정 호스트의 특정 유저가 특정 커맨드를 실행할 수 있도록 하는 것이지요. 문법은 아래와 같아요:

sudo command

더 많은 정보는 아래 링크에 있어요:

 

GUI 툴에 대하여 (su와 sudo의 GUI 프론트엔드)

gksu 커맨드는 su의 프론트엔드이고 gksudo는 sudo의 프론트엔드에요. 주 목적은 X 터미널을 실행할 필요 없이 su를 직접 사용해서 루트 권한이 필요한 그래픽 커맨드를 실행하는 거에요. 문법은 아래와 같아요:

gksu [-u <user>] [options] <command>
gksudo [-u <user>] [options] <command>

gksu를 입력하면 아래와 같은 창이 나올거에요:

gksu
그림 1. gksu 실행 화면

루트 유저의 비밀번호를 입력하라고 할거에요:

gksu auth
그림 2. Gnome gksu 목표 유저 인증 화면

아래와 같이 커맨드를 직접 실행할 수도 있어요:

gksu -u root ‘ls /root’

oracle 유저로 커맨드를 실행할 수 있어요:

gksu -u oracle ‘ulimit -aHS’

root로 로그인할 수 있어요:

gksu -u root -l

 

요약: runuser vs su vs sudo
커맨드 루트에서
유저로
유저에서
루트로
아무 유저에서
아무 유저로
인증 형태 로그 파일 비고
runuser 아니오 아니오 없음 없음 runuser는 인증과 유저 PAM 훅을 실행하지 않기 때문에 su보다 오버헤드가 적다.
su 목표 유저 비밀번호 /var/log/auth.log 또는 /var/log/secure 반드시 루트 유저의 비밀번호를 다른 유저에게 공유해야 한다.
sudo Y Y Y 목표 유저가 아닌 현재 유저의 비밀번호 /var/log/auth.log 또는 /var/log/secure 시스템 관리자가 ‘특정 유저가 특정 커맨드를 루트나 다른 유저로 실행할 수 있도록’ 권한을 관리할 수 있다.

더 많은 정보는 su, sudo, gksu, gksudo 커맨드의 매뉴얼 페이지에 있어요.

 

– 닉스크래프트.

 

#.

sudo와 su -c가 서로 다른 것이었네요. 현재 유저와 목표 유저 중 어떤 비밀번호를 쓰느냐가 보안 측면에서 중요한 차이점인 것 같아요. 그리고 sudo는 아주 자세한 권한관리가 가능하군요.

 

원문.

https://www.cyberciti.biz/open-source/command-line-hacks/linux-run-command-as-different-user/

177 Comments

  1. Some genuinely superb posts on this internet site, regards for contribution. “When he has ceased to hear the many, he may discern the One – the inner sound which kills the outer.” by H Hahn Blavatsky.