Linux에서 다른 사용자의 권한으로 작업해야 할 때 sudo -iu를 사용할 수 있습니다. 예를 들어 관리자가 일반 사용자 appuser의 작업 환경을 열어 파일 접근 권한이나 실행 결과를 확인할 수 있습니다.
sudo -iu appuser
이 명령은 appuser 계정의 로그인 셸(login shell)을 실행합니다. 실행할 명령을 따로 지정하지 않았다면 셸이 열리고, 종료할 때까지 해당 계정의 권한으로 명령을 입력할 수 있습니다.
sudo -iu의 의미
sudo -iu appuser는 sudo -i -u appuser를 줄여 쓴 형태입니다.
| 구성 | 의미 |
|---|---|
sudo |
권한이 허용된 사용자가 다른 사용자 권한으로 명령을 실행하는 도구 |
-i (--login) |
대상 사용자의 로그인 셸을 실행하고 로그인 환경을 구성하는 옵션 |
-u appuser (--user=appuser) |
명령을 실행할 대상 계정을 appuser로 지정하는 옵션 |
-u를 지정하지 않고 sudo -i를 실행하면 기본 대상은 root입니다. 명령을 실행하려면 현재 사용자에게 해당 sudo 작업을 수행할 권한이 있어야 합니다.
로그인 셸에서 바뀌는 것
sudo -iu appuser를 실행하면 일반적으로 작업 디렉터리가 appuser의 홈 디렉터리로 바뀌고, HOME, USER, LOGNAME, SHELL 등의 환경 변수가 대상 계정에 맞게 설정됩니다. 실제 환경 변수 처리에는 sudoers 정책과 시스템 설정이 영향을 줄 수 있습니다.
로그인 셸은 해당 셸의 시작 파일을 읽습니다. 예를 들어 Bash 로그인 셸은 /etc/profile을 읽고, 사용자 홈에서 ~/.bash_profile, ~/.bash_login, ~/.profile 가운데 존재하는 첫 번째 파일 하나를 읽습니다. ~/.bashrc는 Bash 로그인 셸이 항상 직접 읽는 파일은 아닙니다. 로그인용 설정 파일에서 ~/.bashrc를 불러오는 구성이면 함께 적용됩니다. 다른 셸은 시작 파일 규칙이 다를 수 있습니다.
sudo -iu appuser는 대상 계정의 로그인 셸을 구성하는 명령이지, SSH로 직접 로그인하는 것과 완전히 같은 과정은 아닙니다. SSH 인증, 세션 설정 및 접근 제한은 별도로 적용됩니다.
실행 예제와 확인 방법
현재 사용자와 작업 위치를 확인합니다.
whoami
pwd
appuser로 전환합니다.
sudo -iu appuser
전환 후 계정, 홈 디렉터리, 현재 위치와 셸을 확인합니다.
whoami
id
printf 'HOME=%s\nSHELL=%s\n' "$HOME" "$SHELL"
pwd
whoami는 appuser를 표시하고, 일반적으로 현재 위치는 해당 계정의 홈 디렉터리입니다. 작업을 마치면 다음 명령으로 전환된 셸을 종료하고 이전 셸로 돌아갑니다.
exit
관리자 권한의 로그인 셸이 필요한 경우에는 다음처럼 실행합니다.
sudo -i
이는 기본 대상 계정인 root의 로그인 셸을 실행합니다. sudo -iu root도 같은 목적으로 사용할 수 있습니다.
비슷한 명령과 차이점
| 명령 | 동작 | 작업 디렉터리 및 환경 |
|---|---|---|
sudo -iu appuser |
appuser의 로그인 셸 실행 |
일반적으로 대상 계정의 홈으로 이동하며 로그인 환경 구성 |
sudo -u appuser bash |
appuser 권한으로 Bash 실행 |
기본적으로 현재 디렉터리를 유지하며 Bash의 비로그인 셸 실행 |
sudo -u appuser 명령어 |
해당 계정 권한으로 지정한 명령만 실행 | 별도 로그인 셸을 열지 않으며, 명령이 끝나면 기존 셸에서 계속 작업 |
sudo -u appuser -s |
대상 계정 권한으로 셸 실행 | 로그인 셸을 요청하지 않으며, 셸 선택과 환경은 설정의 영향을 받음 |
sudo -i |
기본 대상인 root의 로그인 셸 실행 |
일반적으로 /root로 이동하며 관리자 로그인 환경 구성 |
예를 들어 대상 계정의 권한으로 파일 하나만 확인할 때는 셸 전체를 전환하지 않아도 됩니다.
sudo -u appuser ls -la /home/appuser
반대로 여러 명령을 연속해서 실행하고 해당 사용자의 로그인 환경도 확인해야 한다면 다음 명령을 사용합니다.
sudo -iu appuser
sudo -u appuser bash와 sudo -u appuser -s는 일반적으로 작업 디렉터리를 유지하지만, 현재 디렉터리에 appuser의 접근 권한이 없다면 파일을 읽거나 이동할 때 오류가 발생할 수 있습니다. 또한 sudo는 정책에 따라 환경 변수를 정리하므로, 기존 사용자의 환경 변수가 모두 그대로 유지된다고 가정해서는 안 됩니다.
서비스 계정에서 확인할 사항
서버에서는 애플리케이션을 실행하기 위한 전용 시스템 계정을 만들기도 합니다. 이러한 계정은 대화형 로그인을 제한하기 위해 로그인 셸을 /usr/sbin/nologin 또는 /bin/false로 지정할 수 있습니다.
대상 계정의 로그인 셸을 확인합니다.
getent passwd appuser
출력의 마지막 필드가 계정에 설정된 로그인 셸입니다. 이 값이 nologin이나 false라면 sudo -iu appuser로 대화형 셸을 열 수 없을 수 있습니다. 단일 명령만 실행할 때는 허용된 권한 범위에서 sudo -u appuser 명령어를 사용할 수 있습니다. 셸을 명시적으로 실행해야 한다면 계정 정책을 확인한 뒤 관리자가 필요한 방식으로 실행해야 합니다.
계정 전환은 파일 소유권이나 권한 설정을 변경하지 않습니다.
appuser로 전환해도 해당 계정이 접근할 수 없는 파일이나 다른 사용자의 전용 서비스에는 자동으로 접근할 수 없습니다.
참고 자료
- sudo 공식 매뉴얼: https://www.sudo.ws/docs/man/sudo.man/
- sudoers 공식 매뉴얼: https://www.sudo.ws/docs/man/sudoers.man/
- GNU Bash 시작 파일 설명: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html
- Linux
getent매뉴얼: https://man7.org/linux/man-pages/man1/getent.1.html
'운영체제(OS) > Linux' 카테고리의 다른 글
| 리눅스 /opt, /var/lib, /var/log 차이점 (1) | 2026.08.28 |
|---|---|
| Ubuntu 24.04 AppImage SUID sandbox 실행 오류 해결 (1) | 2026.07.18 |
| 리눅스 /usr/bin과 /usr/local/bin의 차이 (0) | 2026.07.17 |
| Ubuntu 24.04에서 AppImage 파일 실행하기 (0) | 2026.07.09 |
| [Ubuntu 24.04] PostgreSQL 18 + Gitea 설치 및 설정 가이드 (0) | 2026.07.03 |
댓글