현대의 거의 모든 운영체제는 다중 사용자를 지원한다. 많은 사람들이 사용하는 Windows와 macOS도 여러 명의 사용자를 생성할 수 있으며, 각 사용자에게 적절한 권한을 주어 여러 명의 사용자가 동일한 리소스를 안전하고 적절하게 사용할 수 있도록 한다.

리눅스도 이를 지원하며 모든 파일은 소유자와 그룹, 그리고 권한을 가진다. 이런 값들은 리눅스 파일과 디렉토리 시스템을 학습해보았다면 접해봤을 inode가 저장하고 있다.


리눅스 권한 관리 방식

유저와 그룹

리눅스는 **유저(u, user)**와 **그룹(g, group)**을 가진다. 유저는 온라인 사이트의 계정과 유사한 개념이며, 한 유저가 여러 개의 권한을 가질 수 없다. 그룹은 특정한 권한을 가진 사용자의 집단을 표현하기 위한 것이며, 한 유저는 여러 개의 그룹에 속할 수 있다.

유저 정보는 /etc/passwd 에 저장된다. cat /etc/passwd 로 확인해보면 다음과 같은 문자열들을 확인할 수 있다.

[이름]:[암호]:[UID]:[GID]:[추가정보]:[홈 디렉터리]:[기본 셸]
정보 상태
이름 유저의 이름
암호 사용자의 암호, x인 경우 /etc/shadow 에 따로 암호 저장
UID 사용자의 id
GID 그룹 id
추가 정보 사용자의 추가 정보 저장
홈 디렉터리 사용자의 홈 디렉터리 경로
기본 셸 해당 계정으로 로그인 시 사용할 셸

/etc/shadow 는 계정의 암호화 만료 기간 등을 저장한다. root만 cat /etc/shadow 로 읽을 수 있다.

root 계정은 관리자 권한 계정으로 리눅스 운영체제에서 가질 수 있는 최고 권한을 가진다. 운영체제 설정 변경이나 계정 생성, 삭제와 같이 일반 유저들이 수행할 수 없는 작업들을 할 수 있다.

sudo 는 root로 명령어를 실행할 수 있도록 하는 명령어이다.

sudo cat /etc/shadow 로 확인해보면 다음과 같은 문자열들을 확인할 수 있다.

[이름]:[암호화 값]:[수정 일자]:[최소 사용 기간]:[최대 사용 기간]:[경고 기간]:[만기일]:[차단 기간]:[reserved]
정보 상태
이름 유저의 이름
암호화 값 $[id]$[salt]$[hash]의 형태이며 각각
• id: 해싱 알고리즘
• salt: 해싱 시 salt 값
• hash: password와 salt를 id에 해당하는 해싱 알고리즘으로 해싱 시 결과

* 는 어떤 password도 대응되지 않음 | | 수정 일자 | 유닉스 시간(1970년 1월 1일) 기준으로 패스워드가 수정된 일자 0이라면 다음 로그인 시 패스워드를 변경해야 한다. | | 최소 사용 기간 | 패스워드 변경 일자로부터 최소 사용 기간 이후 다시 변경 가능 0이라면 언제든 변경 가능하다 | | 최대 사용 기간 | 패스워드의 유효 기간 99999라면 만료되지 않음 | | 경고 기간 | 패스워드 만료 전 사용자에게 미리 경고해주는 기간 | | 만기일 | 패스워드 사용 기간이 만료된 후 실제로 계정이 사용 불가능하기까지의 기간 | | 차단 기간 | 유닉스 시간(1970년 1월 1일) 기준으로 패스워드가 만료될(된) 일자 | | reserved | 아직 사용하지 않음 |

그룹 정보는 /etc/group 에 저장된다. cat /etc/group 로 확인해보면 다음과 같은 문자열들을 확인할 수 있다.

[이름]:[암호]:[GID]:[멤버]
정보 상태
이름 그룹의 이름
암호 그룹의 암호, x인 경우 /etc/gshadow 에 따로 암호 저장
GID 그룹 id
멤버 해당 그룹에 포함되는 유저 이름들

/etc/gshadow 는 그룹 패스워드와 몇 가지 정보를 저장한다. root만 cat /etc/shadow 로 읽을 수 있다.