팀장님께서 su와 su -의 차이점을 아느냐고 물어보셔서 정리한 내용입니다.
리눅스 서버에서 su, su -, sudo는 모두 권한 상승과 관련된 명령어지만, 목적과 동작 방식이 달라 운영 서버에서는 추적성 / 최소 권한 / 보안 정책 관점에서 접근해야 합니다.
1. su (Switch User) 명령어
su는 다른 사용자 계정으로 세션을 전환하는 명령어입니다.
기본값은 root이며, 해당 계정의 비밀번호를 입력해야 전환이 됩니다.
동작
- 전환 대상 계정의 비밀번호 입력 필요
- 전환 후 shell이 전환된 계정 세션으로 유지됨
- exit으로 다시 원래 계정으로 돌아감
실무 특징
- root로 완전히 로그인한 상태가 되므로 연속 명령 실행이 쉬움
- 하지만 전체 세션이 권한 상승 상태이기 때문에 실수로 시스템에 영향 줄 위험이 큽니다
- 어떤 명령을 했는지 세부 추적이 어려움
2. su - ( su with login ) 명령어
su -는 단순 계정 전환이 아니라 로그인한 것과 동일한 환경으로 전환합니다.
동작
- root의 환경 변수, PATH, 홈 디렉토리 등이 적용
- 쉘은 root 로그인 세션과 동일하게 동작
- 기본 디렉토리가 /root로 변경
su 와 su - 차이
| 옵션 | 환경 반영 | 홈 디렉토리 |
| su | 기존 사용자 환경 유지 | 변경 없음 |
| su - | root 환경 완전 반영 | /root |
실무 포인트
- 스크립트 실행/환경 변수가 명확히 필요한 경우 **su -**가 더 정확한 결과를 보장
- 다만 root 직접 세션 유지이므로 보안 리스크는 여전
3. sudo (Superuser Do) 명령어
sudo는 명령어 단위로 권한 상승을 수행합니다.
shell 전환 없이 지정한 명령만 root 권한으로 실행됩니다.
동작
- 본인 계정 비밀번호 입력
- /etc/sudoers에서 실행 권한 여부 확인
- 명령 실행 후 일반 권한 상태로 돌아감
실무 특징
- 명령 단위 권한 적용 → 최소 권한 원칙
- 각 명령 실행 시 로그가 남아 추적/감사 가능
- 운영 서버에서는 표준 권한 상승 방식으로 간주됨
4. su / su - / sudo 차이점
| 구분 | su | su - | sudo |
| 실행 방식 | 사용자 전환 | root 로그인 환경처럼 전환 | 특정 명령 실행 |
| 비밀번호 | 전환 대상 계정 | 전환 대상 계정 | 본인 계정 |
| 환경 반영 | 본인 환경 유지 | root 환경 완전 반영 | 본인 환경 유지 |
| 명령 로그 | 제한적 | 제한적 | 명령 단위로 남음 |
| 운영 권장 | X | X | O |
5. 실무 적용 기준
- 기본 원칙
작업은 sudo 사용으로 수행 → 각 명령이 추적/로그 기록되어야 함 - root 직접 로그인
보안 정책 상 차단 권장 (root 비밀번호 공유 리스크가 큼) - su / su - 활용 케이스
- 테스트/개발 환경에서 빠른 전환이 필요할 때
- 복구/비상 상황에서 전체 환경 점검이 필요할 때
운영 서버에서 중요한 건 “편한 권한 획득”이 아니라 “누가 무엇을 실행했는지 추적 가능한가?” 입니다.
마무리
- su | 전체 세션 root 권한 상승 (환경 유지)
- su - | root 로그인 환경으로 전체 반영
- sudo | 단일 명령만 권한 상승 → 로그 + 제어 가능
운영에서는 sudo 기반 권한 관리가 표준입니다.
'Linux' 카테고리의 다른 글
| [ Linux ] 운영 서버 로그 기반 의심 징후 탐지 체크리스트 (0) | 2026.01.28 |
|---|---|
| [ Linux ] su / su - / sudo 로그 확인 및 감사 방법 (0) | 2026.01.28 |
| [ Linux ] curl GET 요청 시 URL 인코딩이 꼭 필요한 이유와 처리 방법 (0) | 2025.06.13 |
| [ Linux ] 사용자 입력 값을 RFC 2822 형식으로 변환하는 방법 - Shell script (0) | 2025.06.13 |
| [ Linux ] curl로 REST API 호출하는 방법 (0) | 2025.06.13 |