[Linux] 리눅스 사용자/그룹 관리와 확장 권한

위지웅·2025년 9월 30일

리눅스

목록 보기
2/4

1. 사용자 및 그룹 정보 파일

리눅스는 윈도우와 달리 여러 명의 사용자가 각각의 계정(ID)으로 로그인하여 리눅스 시스템을 동시에 이용할 수 있다. 그럼 OS는 어떻게 사용자들을 구분할까? 이에 대해 알아보도록 하겠다.

User - 실제 시스템을 사용하는 사람과 연결된 계정
UID(User ID) - 리눅스에서 사용자 구분시 사용하는 번호

Group - 공통 목적을 가진 사용자들의 집합으로 파일의 권한을 공유, 기본그룹과 보조 그룹으로 구성된다.
GID(Group ID) - 리눅스에서 그룹을 구분하기 위해 사용하는 고유의 번호

리눅스에선 사용자와 그룹의 정보를 4개의 파일에서 저장하고 있다. 하나씩 알아보자

파일설명
/etc/passwd시스템에 등록된 사용자 정정보
/etc/shadow시스템에 등록된 사용자의 패스워드와 패스워드에 대한 설정
/etc/group시스템에 등록된 그룹 정보
/etc/gshadow시스템에 등록된 그룹의 패스워드와 패스워드에 대한 설정

1) /etc/passwd

시스템에 등록된 사용자 정보를 저장한다.
/etc/passwd 파일은 총 7개의 필드로 구성되며 각 필드는 : 으로 구분된다.

USER : x : UID : GID : GECOS : HOME : SHELL

필드설명
USER사용자 이름, 중복 X, 로인 시 이용
x(place holder)패스워드 저장 필드이나 현재는 사용하지 않으며 /etc/shadow에 해쉬값으로 저장됨
UID시스템에서 사용자 식별에 이용하는 번호
GID시스템에서 그룹 식별에 사용하는 번호
GECOS주석 필드
HOME사용자 홈 디렉토리 절대 경로
SHELL사용자가 기본으로 사용할 쉘

※ UID/GID 0번은 root 사용자/그룹을 의미하며 1000번 미만은 시스템 사용자 계정/그룹으로 예약되어 있고 일반 사용자/그룹은 1000번 이상부터 부여된다.

기본적으로 생성된 주요 사용자

사용자명UID설명
root0시스템 관리자 계정
bin1시스템에 구동중인 바이너리 파일 관리를 위한 계정
daemon2백그라운드 프로세스 제어를 위한 계정
adm3시스템 관리를 위한 계정 ex) 시스템 로깅
lp4로컬 프린트를 위한 데몬 계정
nobody99익명 연결 계정
ntp38시간 동기화를 위한 계정
gdm42그래픽 화면 관리 계정

2) /etc/shadow

사용자 패스워드를 해시값으로 저장하고 패스워드에 대한 속성을 저장한다.
해시 알고리즘은 MD-5, SHA-256, SHA-512 등등 리눅스 버전마다 다르다.

/etc/shadow 파일은 총 9개의 필드로 구성되며 :으로 각 필드를 구분한다.

USER : HASH : LASTCHANGE : MIN : MAX : WARNING : INACTIVE : EXPIRE : BLANK

필드설명
USER사용자 이름
HASH해시 알고리즘을 이용해 생성된 해시 값
LASTCHANGE마지막으로 비밀번호 변경한 날짜
MIN패스워드 변경 후 최소 사용 기간
MAX패스워드 변경 후 최대 사용 기간
WARNING만료일 전 경고 메시지 출력 여부
INACTIVE패스워드 만료 후 지정된 기간 변경하지 않으면 계정이 잠김
EXPIRE사용자 계정 만료일 설정
BLANK예약된 필드

※ HASH 필드의 경우 $로 구분되는 3가지 세부 필드로 나뉘며
해시 알고리즘 유형$slat 값$해시값 으로 구성된다.

3) /etc/group

그룹에 대한 정보를 저장한다. 만약 사용자의 그룹 정보를 확인하고자 한다면 id 사용자명 을 통해 확인할 수 있다.

/etc/group 파일은 4개의 필드로 구성되며 :을 통해 구분된다.

GROUP : x : GID : MEMBER

필드설명
GROUP그룹의 이름을 나타내며 유일한 값
x그룹 패스워드 저장 필드였으나 현재는 /etc/gshadow에 저장
GID시스템에서 그룹을 식별할떄 사용하는 번호
MEMBER이 그룹을 보조 그룹으로 지정하고 있는 사용자 목록

4) /etc/gshadow

그룹 로그인 시 사용할 패스워드의 해시값을 저장한다. /etc/shadow와 group 버전!
일반적으로 그룹 패스워드는 거의 사용하지 않는다.

/etc/group 파일은 4개의 필드로 구성되며 :을 통해 구분된다.

GROUP : PASSWORD : ADMIN : MEMBER

필드설명
GROUP그룹의 이름을 나타내며 유일한 값
PASSWORD그룹 패스워드 해시값
ADMIN그룹의 관리자
MEMBER그룹의 멤버

2. 사용자 및 그룹 관리

  • 사용자 생성

    useradd [option] user-name


useradd를 통해 새로운 사용자 wiker 를 추가하자 /etc/passwd, /etc/shadow에 wiker의 정보가 추가된 것을 확인 할 수 있다.

/etc/shadow에 패스워드 해시값이 없는 것을 확인 할 수 있는데 useradd로 사용자 생성 시 비밀번호가 기본적으로 주어지지 않아 추가로 설정해 줘야 한다.


passwd 사용자를 통해 해당 계정의 비밀번호를 설정해주면 정상적으로 /etc/passwd에 비밀번호 해시값이 생긴 것을 확인할 수 있다.

  • 사용자 정보 수정

    usermod [option] user-name

-G 를 통해 보조 그룹을 추가해 줄 수 있다. 보조 그룹을 더 추가 할 시에는 -aG옵션을 사용하자.

  • 사용자 삭제

    userdel [option] user-name

사용자를 삭제할 떄는 -r 옵션을 붙여주자. 해당 옵션이 없으면 사용자가 삭제되도 생성된 홈 디렉토리가 그대로 남아있다.

  • 그룹 생성

    groupadd [option] group-name

-g 옵션을 통해 그룹 생성 시 GID를 지정해 줄 수 있다.

  • 그룹 정보 수정

    groupmod [option] group-name

-g 옵션을 통해 GID를 -n 옵션을 통해 그룹명을 수정할 수 있다.

  • 그룹 삭제

groupdel [option] group-name

3. 사용자 전환

  • su

    su [-] user-name

su를 이용하면 다른 사용자로 전환할 수 있다.

인자값을 붙이지 않으면 관리자 계정으로 전환을 의미하며 계정 전환 시 전환하는 계정의 비밀번호를 입력해야 한다. 단 관리자 계정에서 일반계정으로 전환 시 비밀번호 입력이 생략된다.

- 옵션의 경우 전환 시 전환하는 계정의 환경변수가 적용되고 홈 디렉토리로 이동한다.

  • sudo
    일반 사용자가 관라 권한으로 명령을 수행할떄 명령어 앞에 sudo 를 붙인다.

캡처 이미지에선 안나오지만 sudo 사용 시 비밀번호를 입력해야 하는데 이 비밀번호는 root 비밀번호가 아니라 기존 사용자의 비밀번호이다.

모든 일반사용자가 sudo로 root 권한으로 명령이 실행가능하다면 보안상 매우 취약할 것이다. 따라서 sudo를 사용하기 위해선 조건이 필요하다.

  1. 사용자를 /etc/sudoers 에 등록
  2. 사용자가 wheel 그룹의 구성원

이 둘 중 하나에 속해야 sudo를 사용할 수 있다.

4. 사용자 패스워드 속성

  • 해시 패스워드 구성

    /etc/shadow에 password는 3가지 필드로 구성된다.

알고리즘 종류
DES(0), MD5(1), SHA-256(5), SHA-512(6) 등등이 있는데 리눅스 버전마다 다르다.

SALT란?
해시 알고리즘을 통해 해시값을 생성할떄 보안성 강화를 위해 원문에 랜덤한 값을 삽입하는데 이 랜덤한 값을 SALT라고 한다.
같은 비밀번호라도 SALT가 다르면 전혀 다른 해시가 생성된다.

속성 변경

chage [option] [argument] user-name

/etc/shadow 필드 중 USER, HASH를 제외한 필드의 값을 chage 를 통해 변경할 수 있다.

옵션설명
-l(소문자 L)사용자 패스워드 속성 확인
-d마지막으로 변경한 날짜 수정 만약 0이 설정되면 다음 로그인 시 강제로 패스워드 변경해야 됨
-m패스워드 변경 할 수 있는 최소 기간 수정
-M패스워드 사용 할 수 있는 최대 기간 수정
-W패스워드 유효기간 마료 전 경고하는 날짜 지정
-I(대문자 i)패스워드 만료 후 추가 시간을 주어 변변경할 수 있는 날짜 수정
-E만료 날짜를 특정 날짜로 지정

5. 확장 권한

1) 확장 권한 종류

setuid

실행권한이 있는 바이너리/스크립트 파일에 사용한다.
setuid가 설정되어 있으면 파일 실행 시 실행한 사용자가 아니라 파일을 소유하고 있는 사용자의 권한으로 프로세스를 실행한다.

만약 setuid 가 설정되어 있다면 실행권한을 나타내는 xs로 표시된다.
만약 실행권한이 설정되지 않은채 setuid를 설정 시 S로 표시된다.

setgid

바이너리/스크립트 파일에 설정되어 있으면 실행 시 프로세스의 사용자 그룹이 파일의 사용자 그룹으로 실행된다.
일반적으론 디렉토리에 설정하여 사용한다.
setgid가 설정된 디렉토리에 파일을 생성하면 파일의 사용자 그룹은 파일을 생성한 사용자가 아닌 디렉토리의 사용자 그룹으로 상속된다.

setuid와 비슷하게 setgid 가 설정되어 있다면 실행권한을 나타내는 xs로 표시된다.
만약 실행권한이 설정되지 않은채 setuid를 설정 시 S로 표시된다.

sticky bit

디렉토리에 기타 사용자 권한의 rwx 권한이 모두 설정되어 있다면 모든 사용자는 파일을 자유롭게 생성하고 삭제할 수 있을 것이다.
이때, 다른 사용자가 생성한 파일을 삭제하는 것은 문제가 될 수 있다. sticky bit는 본인이 소유한 파일만 삭제할 수 있도록 한다.

sticky bit가 설정되어 있다면 실행권한을 나타내는 xt로 표시된다.
만약 실행권한이 설정되지 않은채 sticky bit를 설정 시 T로 표시된다.

2) 확장 권한 설정

chmod를 통해 확장권한을 설정할 수 있다. 사용 방법은 rwx 권한 설정과 유사하다.

심볼릭 방식

setuid, setgids
sticky bitt를 사용한다.

ex) u+x g+x o+t

8진수 방식

setuid는 4000, setgid는 2000, sticky bit는 1000 을 이용해 권한을 부여할 수 있다.

ex) chmod 4777 FILE, chmod 2777 FILE, chmod 1777 FILE

심볼릭 방식으로 쓰는게 편한 것 같다.

※ 참고 자료
엔터프라이즈 리눅스 핵심 운영 가이드 vol.1
https://www.stratosphereips.org/blog/2020/10/22/a-visual-display-of-etcpasswd-andetcshadow
http://yesxyz.kr/about-on-encrypt-and-salt-of-password/

0개의 댓글