터미널 환경을 자주 사용하다 보면 sudo라는 명령어를 정말 많이 쓰게 된다.
이번 시간에는 sudo는 왜 강력하며, 어떤 한계가 있는지에 대해 알아본다.
sudo?
SuperUser DO의 약자로, 일반 사용자가 잠깐 동안 root(최고 관리자) 권한을 빌려서 명령을 실행할 수 있게 해주는 도구다.
이전에 이렇게 많이 사용했다. vagrant 사용자라고 가정을 해보자.
# 일반 사용자로는 실패
$ cat /etc/shadow
cat: /etc/shadow: Permission denied
# sudo를 붙이면 성공
$ sudo cat /etc/shadow
root:!:19000:0:99999:7:::
...
왜 강력한 걸까?
모든 파일 권한을 무시할 수 있다.
모든 이라는 말에 딴지를 걸면… 어쩔 수 없지만, 대부분이라고 받아들이면 된다. 아래에서 불가능한 요소들을 다룬다.
root로 실행되면 CAP_DAC_OVERRIDE capability를 갖게 된다.
- 이것은 파일의 소유자, 그룹, 권한(rwx) 설정을 완전히 무시하고 접근할 수 있는 능력이다.
Linux Capability 란?
리눅스에서 Capability과 Seccomp profile는 시스템 보안 강화를 위한 중요한 메커니즘입니다. 두 기능 모두 프로세스가 운영체제와 상호작용하는 방식을 제한함으로써 보안을 향상시킬 수 있습니다.
cumulus.tistory.com
# 아무도 읽을 수 없는 파일 생성
$ touch secret.txt
$ chmod 000 secret.txt
$ ls -l secret.txt
---------- 1 user user 0 Jan 8 10:00 secret.txt
# 일반 사용자는 당연히 못 읽음
$ cat secret.txt
cat: secret.txt: Permission denied
# root는 권한을 무시하고 읽음
$ sudo cat secret.txt
(내용 출력 성공)
- 당연히 새로 생성된 사용자라면 root 권한을 사용할 수 있도록 설정을 해줘야 한다.
- sudo vi /etc/sudoers , sudo visudo 를 이용해 설정할 수 있다.
시스템의 핵심을 제어할 수 있다.
root 권한을 통해 할 수 있는 대표적인 작업은 아래와 같다.
- 커널 파라미터 수정: /proc/sys/ 아래 값들을 바꿔서 시스템 동작 방식 변경
- 네트워크 설정: IP 주소 변경, 방화벽 규칙 수정
- 사용자 관리: 계정 생성/삭제, 비밀번호 변경
- 프로세스 제어: 다른 사용자의 프로세스 종료
- 하드웨어 접근: 디스크 포맷, 파티션 생성
# 네트워크 인터페이스 설정 (root 권한 필요)
$ sudo ip addr add 192.168.1.100/24 dev eth0
# 다른 사용자의 프로세스 강제 종료
$ sudo kill -9 12345
# 시스템 재부팅
$ sudo reboot
SUID가 설정된 프로그램처럼 동작
- SUID에 대해서는 아래의 글을 참고하자.
https://m.blog.naver.com/tmk0429/222306411232
SUID, SGID, Sticky bit [Linux 관리]
SUID와 SGID, sticky bit는 기존 퍼미션(rwx)에서 실행 및 삭제 권한을 보완하는 요소입니다. SU...
blog.naver.com
https://foden2000.tistory.com/116
어떻게 /etc/passwd와 같은 파일을 r,w 할까?
1. 커널 수준에서의 root 권한 처리 메커니즘리눅스 커널은 파일에 접근할 때 해당 프로세스의 자격 증명(Credentials)을 확인한다. 일반 사용자는 파일의 아이노드(Inode)에 기록된 9비트 권한(rwxrwxrwx)
foden2000.tistory.com
하지만 sudo 도 무적은 아니다
root 권한을 가졌다고 해서 뭐든 할 수 있는 건 아니다. 여러 보안 메커니즘이 추가적으로 제한을 걸 수 있다.
1. 정책(Policy) 기반 제한: etc/sudoers
sudo는 /etc/sudoers파일에 정의된 규칙을 따른다.
- 관리자가 “user1, user2, user 사용자는 이 명령만 sudo로 실행할 수 있다”고 제한할 수 있다는 뜻이다.
- AWS IAM Role 설정하는 것과 유사한 것 같다.
# /etc/sudoers 예시
# user1은 모든 명령 실행 가능
user1 ALL=(ALL:ALL) ALL
# user2는 systemctl 명령만 가능
user2 ALL=(ALL) /usr/bin/systemctl
# user3은 비밀번호 없이 특정 명령만 가능
user3 ALL=(ALL) NOPASSWD: /usr/bin/docker
즉, sudo 권한이 있다고 해서 모든 명령을 root로 실행할 수 있는 게 아니다.
2. Immutable Attribute (불변 속성)
백엔드를 해본 사람들이라면 VO에 대해 들어본 적이 있어 더욱 다가올 것 같다.
리눅스 파일시스템에는 rwx 권한 외에 **파일 속성(attribute)**라는 게 존재한다.
- 그 중 i(immutable) 속성이 설정되며, root조차 파일을 수정하거나 삭제할 수 없다.
해당 용어는 처음 접해 실제 환경에서 테스트를 진행했다.
[vagrant@user02 ~]$ sudo bash -c 'echo "critical config" > /etc/important.conf'
[vagrant@user02 ~]$ sudo chattr +i /etc/import.conf
chattr: No such file or directory while trying to stat /etc/import.conf
[vagrant@user02 ~]$ sudo chattr +i /etc/important.conf
[vagrant@user02 ~]$ lsattr /etc/important.conf
----i----------------- /etc/important.conf
[vagrant@user02 ~]$ sudo rm -rf /etc/important.conf
rm: cannot remove '/etc/important.conf': Operation not permitted
[vagrant@user02 ~]$ sudo echo "hack" >> /etc/important.conf
-bash: /etc/important.conf: Operation not permitted
- 실제로 immutable 속성이 설정되면, 삭제, 수정(==쓰기)이 불가하다!
왜 이게 필요할까?
- 실수로 중요한 시스템 파일을 삭제하는 걸 방지
- 악성코드가 root 권한을 탈취해도 핵심 파일을 보호
- 규정 준수: 감사 로그 파일 등을 변조 불가능하게 만듦
해제 방법
[vagrant@user02 ~]$ sudo chattr -i /etc/important.conf
[vagrant@user02 ~]$ sudo rm /etc/import.conf
rm: cannot remove '/etc/import.conf': No such file or directory
[vagrant@user02 ~]$ sudo rm /etc/important.conf
3. MAC: SELinux / AppArmor
이 부분은 진짜 처음 봤다. AppArmor는 Ubuntu 쪽이라 다루지 않는다.
Mandatory Access Control (강제 접근 제어) 시스템이다.
- 전통적인 유닉스 권한(rwx) 위에 추가적인 보안 정책을 커널 레벨에서 강제할 수 있따.
SELinux?
- Red Hat, CentOS, Fedora 등에서 기본 탑재된 기능이다.
- 모든 프로세스와 파일에 보안 컨텍스트(security context) 라벨을 붙인다.
- 이 프로세스는 이 파일에만 접근 가능 이라는 정책을 커널이 강제한다.
해당 내용서 부터는 추후에 배운다고 하니 배운 뒤 정리를 해보고자 한다.
'Infra > Linux' 카테고리의 다른 글
| 어떻게 /etc/passwd와 같은 파일을 r,w 할까? (0) | 2026.01.09 |
|---|---|
| Linux inode (0) | 2026.01.05 |