컴퓨터공학부

[시스템 프로그래밍 Linux] 사용자 관리

혜머니 2026. 5. 16. 11:34

1. 사용자 계정 관련 파일

(1) /etc/passwd 파일

- 사용자 계정 정보가 저장된 기본 파일 

- 초기의 유닉스에서는 암호도 /etc/passwd 파일에 저장했으나, 해킹 위험이 증가하면서 암호는 /etc/shadow에 저장

- root 계정으로 수정할 수 있지만, 사용자 계정이 저장되는 중요한 파일이므로 함부로 수정 금지

- 사용자 계정의 추가, 삭제, 수정 등 변경사항 있을 시 관련된 명령으로 작업하는 것이 바람직함

- 파일의 구조는 다음과 같음

로그인ID :x :UID :GID :설명 :홈 디렉터리 :로그인 셸
1 2 3 4 5 6 7

 [1] 로그인 ID

 - 사용자 계정의 이름을 뜻하며 사용자 ID, 사용자 이름, 로그인 이름이라고 함

 - 32자를 넘을 수 없고, 대문자, 소문자, 숫자, _, -를 사용할 수 있음

 - 하이픈으로 시작하거나 로그인 ID 전체가 숫자일 순 없고, 중복 이름 사용 불가

 [2] x

 - 초기 유닉스 시스템에서 사용자 암호를 저장하던 항목

 - 요즘은 보안상의 이유로 암호를 /etc/shadow 파일에 별도 보관

 - 이 항목은 역사적인 이유로 이전 프로그램과의 호환성을 위해 그대로 유지하고있으며, x로 표시

 [3] UID

 - 사용자 ID 번호로 시스템이 사용자를 구별하기 위해 사용하는 번호

 - 일반적으로 0~999번과 65534번은 시스템 사용자를 위한 UID로 예약되어있다

 - 시스템 사용자 계정은 시스템이 관리 업무를 위해 내부적으로 사용하고 예약되어있는 계정이므로 임의로 수정하지 않는다

 - 일반 사용자는 UID 1000번부터 해당됨

 - uid는 기존 uid 중 가장 큰값에 1을 더하여 uid를 새로 만드는 것이 default

 - 기본적으로 등록되는 시스템 사용자의 ID

0(root) root 사용자 계정 3(adm) 시스템 로그와 관련된 계정
1(bin) 명령어 관리를 위한 계정 4(Ip) 프린트 서비스와 관련된 계정
2(daemon) 시스템 데몬 계정    

 

 - 로그인 ID가 다르더라고 UID가 같으면 리눅스 시스템은 같은 사용자로 판단함

 - 사용자 이름이 root가 아닌 다른 이름, 예를 들어 'user1'이더라도 user1의 UID가 0번이면 시스템은 root 계정으로 인식함

 - 시스템 관리자는 시스템 계정의 UID가 중복되지 않도록 주의해야 함

[4] GID   

 - 그룹 ID를 나타냄

 - 리눅스에서 사용자는 무조건 한 개 이상의 그룹에 소속됨

 - 사용자의 기본 그룹은 사용자를 등록할 때 정해짐

 - 특별히 소속 그룹을 지정하지 않으면 자동으로 로그인 ID가 그룹으로 등록됨

 - 시스템에 등록된 그룹에 대한 정보는 /etc/group 파일에 저장되어 있음

[5] 설명

 - 사용자의 실명이나, 부서명, 연락처 등 사용자에 대한 일반적인 정보가 기록되는 부분

[6] 홈 디렉터리

 - 사용자 계정에 할당된 홈 디렉터리의 절대 경로를 기록

 - 사용자가 로그인할 때 자동으로 로그인되는 디렉터리가 홈 디렉터리임

 - 홈 디렉터리 아래에 다른 디렉터리나 파일을 생성할 수 있음 

[7] 로그인 셸

 - 사용자의 로그인 셸을 지정함

 - 로그인 셸은 사용자가 로그인할 때 동작하는 기본적인 셸

 - 현재 로키 리눅스에서는 배시셸(/bin/bash)을 기본 셸로 사용하고 있음

- /etc/passwd 파일은 누구나 읽을 수 있도록 접근 권한이 설정되어 있음 

(2) /etc/shadow

 - /etc/passwd 파일은 누구나 읽을 수 있지만, /etc/shadow 파일에는 읽기 권한이 없음

 - root 계정으로 들어가면 /etc/shadow 파일의 내용을 볼 수 있음 

로그인ID 암호(PW) 최종 변경일 Min Max Waring Inactive Expire Flag
1 2 3 4 5 6 7 8 9

 [1] 로그인 ID

  - 사용자 계정의 이름으로 /etc/passwd 파일의 로그인 ID와 같음

 [2] 암호(패스워드)

 - 실제 비밀번호가 암호화되어 저장됨

 - 비밀번호는 일방향 암호여서 원래 어떤 문자였는지 복호화할 수 없음

 - 사용자가 로그인할 때 입력하는 비밀번호를 다시 암호화하여 이 암호와 비교하는 복호화 불가

 - 암호 항목에 아무 값도 없으면 암호가 지정되지 않은 계정임을 뜻함

 - 시스템 계정에는 * 또는 !!가 표시되어 있음

 [3] 최종 변경일

 - 암호가 마지막으로 변경된 날짜를 의미함

 - 이 날짜는 일반적인 년월일 형태로 기록되는 것이 아니라 유닉스 전통에 따라 1970년 1월 1일을 기준으로 날수를 기록

 - 예를들어 2023년 9월 8일은 19608 days로 적혀있음

 [4] MIN

 - MIN을 비롯해 MAX, WARNING, INACTIVE, EXPIRE 항목을 패스워드 에이징이라고 함

 - 각각 패스워드와 관련된 사용 기간을 지정함

 - MIN은 암호를 변경한 후 사용해야하는 최소 기간임

 [5] MAX

 - 암호를 사용할 수 있는 최대 기간

 - 이 기간이 지나면 새로운 암호를 입력하게 함

 [6] WARNING

 - 암호가 만료되기 전에 경고를 시작하는 날수를 나타냄

 [7] INACTIVE

 - 암호가 만료된 후에도 이 항목에 지정된 날 수 동안은 로그인이 가능하도록 함

 - 이 기간이 지나면 계정이 잠겨버림

 - 이 경우 관리자에게 문의해야 해결 가능 > 관리자는 초기화 > 다시 입력해서 접근

 [8] EXPIRE

 - 사용자 계정이 만료되는 날로 이 날짜가 지나면 해당 계정으로 로그인 불가

 - 이 항목은 최종 변경일처럼 1970년 1월 1일을 기준으로 한 날수로 계산

 [9] FLAG

 - 향후 사용할 목적으로 비워둔 항목

- 이 파일은 root 계정으로 변경 후 확인 가능

(3) /etc/login.defs

- 사용자의 계정의 설정과 관련된 기본값을 정의한 파일

- 주석이 잘 되어있어서 주석만 보아도 각 항목의 역할을 이해할 수 있음

(4) /etc/group

- 그룹의 정보가 저장된 파일

- 리눅스에서 사용자는 기본적으로 하나 이상의 그룹에 속해 있음

- 사용자가 속한 그룹 중 /etc/passwd 파일의 GID 항목에 지정된 그룹이 기본 그룹임

- 사용자가 속한 2차 그룹은 /etc/group에 저장

그룹이름 x GID 그룹 멤버
1 2 3 4

[1] 그룹 이름 = 그룹 이름

[2] x = 암호(PW)

- 그룹의 암호를 저장하는 곳으로 예전 유닉스에서는 비어 있거나 * 표시함

- 리눅스에서는 여기에 암호화된 그룹 암호를 저장하거나 /etc/gshadow 파일에 그룹 암호를 저장함

- 그룹 암호는 newgrp 명령으로 자신이 속하지 않은 그룹으로 전환할 때 필요

[3] GID

- 그룹을 식별하는 번호

- login.defs 파일에 정의한 대로 1000~60000은 사용자 정의 그룹의 GID로 사용함

[4] 그룹 멤버

- 그룹에 속한 멤버들의 사용자 계정 이름으로 쉼표(,)를 넣어 사용자를 구분

- 사용자의 2차 그룹을 나타냄

- 리눅스의 경우, 사용자 계정을 생성할 때 특별히 지정하지 않으면 사용자 이름과 같은 이름으로 그룹을 생성함

(5) /etc/gshadow

- 그룹 암호가 저장된 파일

- 유닉스에서는 그룹에 암호가 필요할 경우 /etc/group 파일의 그룹 암호 자리에 암호화된 그룹 암호를 설정했음

- 리눅스에서는 /etc/shadow 파일과 비슷하게 /etc/gshadow 파일을 만든 것

그룹 이름 그룹 암호 관리자 그룹 멤버
1 2 3 4

[1] 그룹 이름 : 그룹의 이름

[2] 그룹 암호 : 암호화된 그룹 암호

[3] 관리자

- 그룹의 암호나 멤버를 바꿀 수 있는 사용자 계정

- 여러 개일 경우 쉼표로 구분

[4] 그룹 멤버

- 그룹에 속한 멤버들의 사용자 이름 계정

- 쉼표로 사용자를 구분

2. 사용자 계정 관리 명령

(1) 사용자 계정 생성하기 : useradd [옵션] [로그인 ID]

- 사용자 계정을 생성할 때는 useradd 명령을 사용함

- 우분투와 달리 로키리눅스는 adduser명령은 useradd에 대한 심볼릭 링크임

- useradd 명령을 사용할 때 지정하는 옵션은 /etc/passwd 파일에 저장되는 각 항목에 해당함

* -u [uid] UID 지정함

* -o UID의 중복을 허용함

* -g [gid] 기본 그룹의 GID를 지정함

* -G [gid] 2차 그룹의 GID를 지정함

* -d [디렉터리명] 홈 디렉터리를 지정함

* -s [셸] 기본 셸을 지정함

* -c [설명] 사용자의 이름 등 부가적인 설명을 지정함

* -D 기본값을 설정하거나 출력함

* -e [유효기간] EXPIRE 항목을 설정함 (YYYY-MM-DD)

* -f [비활성 일수] INACTIVE 항목을 설정함

* -k [디렉터리] 계정 생성 시 복사할 초기 파일이나 디렉터리를 설정해놓은 디렉터리에 지정함

- 옵션 없이 계정 생성하기

 = useradd user2

 > user1 외에 새로운 계정을 만들어 봄

 = ls /home

 > 옵션 없이 useradd 명령으로 user2 계정을 만들고 홈 디렉터리와 /etc/passwd 파일을 확인함

= tail -2 /etc/passwd 

> 홈 디렉터리가 생성되고 /etc/passwd 파일에도 user2가 추가됨

= su user2

> 터미널을 하나 더 띄우고, su 명령(root 권한)으로 user1 사용자에서 user2로 전환함

= grep user2 /etc/shadow

> 기존 터미널의 root 계정으로 돌아가서 /etc/shadow  파일을 확인하면 user2 계정은 암호가 설정되지 않고 !!로 잠겨있음

- 시스템 관리자는 사용자 계정을 추가할 때 반드시 초기 암호를 바로 설정해야 함

= passwd user2

- 사용자에게 초기 암호를 알려주고 사용자가 다시 바꾸게 권고

- useradd -D

 > 사용자 계정 설정 시 기본 설정값 확인하는 옵션

 > INACTIVE -1이면 기능 비활성화, 0이면 암호 만료되자마자 바로 계정이 잠김

 > SKEL : 홈 디렉터리에 복사할 기본 환경 파일의 위치

 > CREATE_MAIL_SPOOL : 메일 디렉터리 생성 여부 지정

 > 해당 항목들은 /etc/default/useradd에서 확인 가능 

- /etc/skel 디렉터리의 역할 : 사용자 계정을 생성할 때, 시스템 운영 정책에 따라 사용자 계정의 홈 디렉터리에 공통으로 배포해야 할 파일이 있을 수 있음

(2) 사용자 계정 정보 수정 : usermmod [옵션] [로그인ID]

- 사용자 계정 정보를 수정함

* -u [uid] UID를 수정함

* -o UID 중복을 허용함

* -g [gid] 기본 그룹을 수정함

* -G [gid] 2차 그룹을 수정함

* -d [디렉터리명] 홈 디렉터리를 수정함

* -s [셸] 기본 셸을 수정함

* -c [설명] 사용자의 이름 등 부가적인 설명을 지정함

* -e [유효기간] EXPIRE 항목을 설정함 (YYYY-MM-DD)

* -f [비활성 일수] INACTIVE 항목을 설정함

* -l 계정 이름을 바꿈

- -l 옵션으로 로그인 ID를 바꿀 때는 홈 디렉터리도 함께 수정해주는 것이 좋음

- 기존 홈 디렉터리에 있는 파일이 자동으로 옮겨지지 않음 (별도 디렉터리 생성 후 이동 필요)

- 패스워드 에어징은 useradd, usermod, passwd, change(패스워드 에이징을 관리하는 별도 명령) 명령으로 변경 가능

항목 userradd, usermod, passwd 명령 change 명령
MIN passwd -n 날수 change -m
MAX passwd -x 날수 change -M
WARNING passwd -w 날수 change -I
INACTIVE useradd/usermod -f 날수 change -I
EXPIRE useradd/usermod -e 날짜(YYYY-MM-DD) change -E

(3) 사용자 계정 삭제 : userdel [옵션] [로그인ID]

- 사용자 계정을 삭제함 (홈 디렉터리와 함께 삭제할 것인지 결정해야 함)

* -r 홈 디렉터리를 삭제함

* -f 사용자가 로그인 중이어도 강제로 삭제함

- 홈 디렉터리가 아닌 다른 곳에 위치한 사용자 계정 소유 파일이 있을 수 있음

- -r 옵션은 홈 디텍터리의 파일은 삭제하지만 다른 디렉터리에 있는 파일은 삭제하지 않음

- 관리자는 find 명령으로 해당 계정 소유의 파일을 모두 찾아서 삭제하는 것이 바람직함

= find / -user [UID] -exec em -r {} \;

3. 그룹 관리 명령

(1) 그룹 생성 : groupadd [옵션] [그룹명]

- 그룹을 생성합

* -g [gid] 그룹의 GID를 지정함

* -d GID의 중복을 허용함

(2) 그룹 수정 : groupmod [옵션] [그룹명]

- 그룹 정보를 수정함

* -g [gid] 그룹의 gid를 수정함

* -o GID 중복을 허용함

* -n [그룹명] 그룹명을 다른 이름으로 바꿈, 기존 파일이나 디텍터리의 소속 그룹명도 자동으로 바뀜

(3) 그룹 삭제 : groupdel [그룹명]

- 그룹을 삭제함

(4) 그룹 암호 설정 및 삭제: gpasswd [옵션] [그룹명]

- 리눅스는 유닉스와 달리 그룹의 암호를 설정하는 gpasswd 명령을 제공함

- gpasswd 명령은 그룹의 암호를 삭제하고 그룹에 멤버를 추가하거나 삭제하는 기능도 수행함

- /etc/group과 /etc/gshadow 파일을 관리함

* -a [사용자 계정] 사용자 계정을 그룹에 추가함

* -d [사용자 계정] 사용자 계정을 그룹에서 삭제함

* -r 그룹 암호를 삭제함

(5) 소속 그룹 변경 : newgrp [그룹명]

- 사용자가 작업을 할 때 현재 소속 그룹을 기본 그룹이 아닌 다른 그룹으로 변경해야할 일이 생길 때 사용

- 소속 그룹을 다른 그룹으로 변경