[OS] 접근 권한, UID/GID
우분투/리눅스에서는 사용자가 user와 root로 구분되어 파일 접근 권한을 제한한다.
어떤 파일을 실행할 땐 sudo 명령어를 사용해야 할 수도 있다.
OS는 각 파일에 대해 읽기, 쓰기, 실행하기 권한을 누구에게 어떻게 부여할지 미리 정해놓는다.
UID, GID
UID(user id) : 사용자 식별하는 ID. 한 컴퓨터 안에 여러명의 사용자가 있을 수 있으므로 UID를 통해 구분한다.
root의 UID는 0이다
GID(group id) : 그룹을 식별하는 ID. 특히 클라우드 서버 환경에서 사용자를 그룹단위로 관리하기 위해 많이 사용한다.
터미널에서 UID & GID 확인해보기
id 명령어를 통해 유저의 UID와 GID가 일반 사용자 범위 내인 1000이라는걸 확인할 수 있다.
특정 파일의 권한 확인 방법
위처럼 특정 파일의 권한을 확인할 수 있다.
위의 경우 "-rwxr-xr-x" 부분으로 권한에 대한 정보를 알 수 있는데,
풀어서 설명하면 아래와 같다.
파일 소유자의 권한 : 파일을 생성한 사용자가 여기에 속한다. 시스템 명령어나 중요한 파일은 root다.
소유자 그룹 내의 권한 : 소유자와 같은 GID를 가진 사용자는 여기에 속한다.
그 외 사용자의 권한 : 위 두가지 경우가 아닌 사용자가 여기에 속한다.
문자의 의미
r : read 가능
w : write 가능
x : 실행 가능
s : SUID 비트 설정됨
시스템 명령어의 권한 살펴보기
아래는 ls 명령어 파일의 상세출력 결과다.
ls 명령어의 권한 "-rwxr-xr-x"를 풀어서 설명하면
파일 소유자의 권한(root)은 rwx이므로 read, write, 실행 가능
소유 그룹(root 그룹)은 r-x이므로 read, 실행 가능
그 외 사용자는 r-x이므로 read, 실행 가능
여기서 "root root"를 통해 파일 소유자는 root이고 그룹은 root인것을 알 수 있다. 시스템 명령어 파일의 경우 파일 소유자의 권한은 root다.
SUID(Set UID), SGID(Set GID)
사용자가 파일 소유자/그룹의 권한을 잠시 얻을 수 있도록 하는 장치다. 파일 소유자가 실행하는것처럼 실행된다.
아래는 passwd 명령어 파일의 상세출력 결과다.
passwd 명령어의 권한은 "-rwsr-xr-x" 이다.
'x' 대신 's' 로 표시된 경우 SUID가 설정되어 있음을 뜻한다. 덕분에 사용자가 passwd 명령어를 사용할 수 있다.
Stickey
해당 디렉토리의 파일들을 소유자만 삭제 가능하도록 제한한다.
아래는 tmp 디렉토리의 상세출력 결과다.
tmp 디렉토리의 권한은 "drwxrwxrwt"이다.
맨 마지막 글자가 't'인데, 이는 Stickey 설정이 되어있음을 뜻한다. 즉 tmp 하위 파일들은 파일의 소유자만 삭제 가능하다. 주로 공유 데이터를 저장하는 디렉토리에 stickey 처리를 함으로써 보안을 강화한다.
RUID, EUID, EGID
RUID : 현 사용자 UID
EUID : SUID를 통해 권한을 얻을때 부여되는 UID
EGID : SGID를 통해 권한을 얻을때 부여되는 GID
SUID 동작 과정
조건 : passwd의 소유자는 root이고 권한은 -rwsr-xr-x 이다.1. UID가 1000인 사용자가 passwd 파일을 실행한다.3. SUID에 의해 EUID는 root의 UID인 0으로 변경된다.4. root 권한으로 파일이 실행된다.5. EUID가 다시 1000으로 돌아온다.
Privilege Escalation
공격자가 root 권한을 획득하여 시스템을 제어하거나 민감한 정보를 탈취하는 공격 기법이다.
권한 설정하기
파일을 생성할때 권한을 설정할 수 있다.
unix I/O 에서 제공하는 함수인 open()를 통해 파일을 생성하는데, 이 함수의 매개변수에 권한 정보를 넣으면 권한 설정이 가능하다.
자세한 설명은 https://annyeong46.tistory.com/108
정리
파일 생성시 read,write,exec 권한을 설정할 수 있으며, 아무나 파일 삭제 못하게 막을 수 있다.
또한 사용자가 실행시 관리자 권한을 빌려 실행할 수도 있다.