Search
🏫

[Unix 시스템] 5. 사용자 관리

Tags
CS
Linux
Last edited time
2024/10/20 08:20
2 more properties
Search
[Unix 시스템] 5. 사용자 관리
CS
Linux
2024/10/20 7:19
[Unix 시스템] 5. 사용자 관리
CS
Linux
2024/10/20 7:19

1. 사용자 계정

1.1. 사용자 관리

사용자 계정이 있어야 시스템을 사용할 수 있음
리눅스는 다중 사용자를 지원하는 운영체제
사용자 계정은 유일한 UID를 가짐
관리자 입장에서 사용자 계정 별로 접근 권한을 통제할 수 있음
일반 사용자 계정은 자신의 홈 디렉토리를 제외하면 제한된 권한을 가짐
일반 사용자 계정 외에 root 계정 (UID=0), 시스템 계정도 있음

1.2. su 명령

su [[-l]] [username]
사용자를 전환시키는 명령 (su = switch user)
root 사용자가 아니라면 지정된 사용자의 암호를 알아야 실행 가능
su -l jjpark su - jjpark su -login jjpark
지정된 사용자의 로그인 셸을 시작
su jjpark
단순히 사용자만 바꿈. 사용자 환경과 작업 디렉토리는 유지됨
su 또는 su -l
root 사용자로 전환함
su -c ‘command’
1개의 셸 명령을 root 계정으로 실행하는 명령
root 암호를 알아야함
여러 단어로 되어있다면 명령 부분을 따옴표로 묶어야함
$ su -c ‘ls -l /root/*’ 암호: 합계 8 -rw-------. 1 root root 882 214 2023 anaconda-ks.cfg -rw-------. 1 root root 223 727 15:58 dead.letter
Bash
복사

1.3. sudo 명령

root 또는 다른 사용자가 되어 명령을 실행하기 위한 명령 (sudo = superuser do)
특정 사용자나 그룹별로 세세한 권한을 부여할 수 있음
본인의 암호만 필요하며, root 계정의 암호를 요구하지 않음
단, 관리자가 /etc/sudoers 파일에서 누가, 어디서, 어떤명령을 수행할 수 있는지, 즉 권한을 설정해 두어야 함
sudo [-u -username] command
현재 셸에서 수행되므로 명령어 부분에 따옴표가 필요 없음
-u 옵션을 사용하면 root 사용자가 아닌 특정 사용자로 수행함
sudo -l 은 자신에게 sudo를 통해 허용된 명령을 확인할 수 있음
$ sudo -u jjpark touch ~jjpark/abc
Bash
복사

1.4. /etc/sudoers 파일

root 사용자가 visudo를 사용하여 편집함
문법 오류를 검사하고 안전하게 편집할 수 있음
기본 문법은 user MACHINE = COMMANDS 의 형태
jjpark ALL=/usr/sbin/useradd, /usr/sbin/usermod User_Alias ADMINS = user1, user2, kdhong ADMINS ALL= NOPASSWD:ALL %users ALL=(ALL) NOPASSWD:ALL
Bash
복사

2. 사용자 계정 만들기

2.1. useradd 명령

사용자 계정을 만드는 관리자 명령
useradd [options] username
useradd -c "Jinju Park" username
-c 옵션은 계정의 설명 부분
passwd [username] 명령으로 비밀번호 설정 가능
useradd -D [options]
계정을 생성할때 사용되는 홈 디렉토리, 주 그룹, 만료일, 기본 셸 등에 관한 기본 설정을 보여줌
다른 옵션을 함께 사용하여 기본 설정 변경 가능
주요 옵션
옵션
설명
-d home_dir
새로운 계정의 홈 디렉터리를 설정함. 이 옵션을 사용하지 않을 때 기본 홈 디렉터리는 /home/username
-D [options]
-D만 사용하면 사용자 계정 생성 시 사용되는 현재의 환경 설정값을 보여 줌. 옵션에 -b, -e, -g, -s 등을 사용하면 홈 디렉터리의 위치, 만료 날짜, 주 그룹, 기본 셸 등에 관한 기본 설정을 변경할 수 있음
-e expire_date
계정의 만료일을 설정하며, 예를 들어 -e 2024-12-31과 같이 작성함. 기본값은 /etc/default/useradd 파일에서 EXPIRE 변수의 값은 보통 무기한(빈 문자열)임
-g group
계정이 속할 주 그룹을 지정하며 그룹은 /etc/group 파일에 이미 존재해야 함. 기본적으로 사용자 계정 및 UID와 같은 값을 가지는 그룹 계정과 GID가 만들어짐
-G group_list
계정이 속한 부 그룹을 지정하며 여러 개를 지정하려면 콤마로 구분하여 설정함
-s shell
사용자의 기본 셸을 설정하며, 예를 들어 -s /bin/bash와 같이 작성함
-u user_id
사용자의 UID를 수동으로 설정함. 기본적으로 다음으로 가용한 UID가 자동으로 지정됨

2.2. 사용자 계정의 생성 절차

1.
/etc/login.defs 파일과 /etc/default/useradd 파일을 읽어서 사용자 계정 생성과 관련된 기본값을 확인
2.
useradd 명령어에서 주어진 옵션을 검사하여 기본값을 대체할 것인지 확인
3.
/etc/passwd 파일과 /etc/shadow 파일에 새로운 사용자 계정에 해당하는 항목을 생성
4.
/etc/group 파일에 새로운 그룹에 해당하는 항목을 추가
5.
/home/ 디렉터리에서 사용자 계정의 홈 디렉터리 /home/username을 생성
6.
/etc/skel/ 디렉터리에 있는 파일을 사용자 계정의 홈 디렉터리에 복사

2.3. /etc/passwd 파일

사용자 계정에 관한 정보를 가진 텍스트 파일
라인 별로 사용자 계정의 정보가 저장됨
계정의 생성이나 수정을 위해 직접 수정하는 것은 좋지 않음
각 라인은 콜론(:)으로 구분되는 7개의 필드를 가짐
사용자계정:암호:UID:GID:설명:홈디렉터리:기본셸
kdhong:x:1000:1000:Kildong Hong:/home/kdhong:/bin/bash

2.4. /etc/skel 디렉터리

사용자 홈 디렉터리에 복사되는 파일들을 가짐
.bash_profile, .bashrc, .bash_logout

2.5. /etc/shadow 파일

사용자 계정의 암호 정보와 '패스워드 에이징' 정보를 가짐
각 라인은 아래와 같은 라인을 가짐
kdhong:$6$w8j<중간생략>:19585:0:100:7:10:19722:
필드의 의미
사용자 계정:암호화된비밀번호:최종비밀번호변경일:
0은 비밀번호 변경 후 바꿀 수 없는 기간(minimum password age)
100은 비밀번호 변경 후 다시 변경하지 않고 사용할 수 있는 기간. 최대 기간(maximum password age)은 99999
7은 비밀번호 만료일 전에 경고를 보내는 날짜 수(password warning period)
10은 비밀번호의 만료 후 로그인이 가능한 날짜 수(password inactivity period)
사용자 계정의 만료일(account expiration date)로 빈 값은 계정이 만료되지 않는다는 것
예약 필드

2.6. chage 명령

사용자의 비밀번호 만료에 관한 정보를 변경하는 관리자 명령
chage [options] username
chage -l username으로 계정의 패스워드 에이징 정보를 확인함
옵션
l days은 비밀번호 만료 후 비활성화 되기 전까지의 날짜 수(-1은 사용하지 않음)
m days와 비밀번호의 최소 사용 날짜 수(0은 즉시 수정 가능)
M days는 최대 사용 날짜 수(99999는 최대 날짜수)
d date는 비밀번호의 마지막 변경 날짜를 수정
E date는 사용자 계정의 만료일을 지정(-1은 사용하지 않음)
# chage -l kdhong 마지막으로 암호를 바꾼 날 : 816, 2023 암호 만료 : 1124, 2023 암호가 비활성화 기간 : 12월 04, 2023 계정 만료 : 1231, 2023 암호를 바꿀 수 있는 최소 날짜 수 : 0 암호를 바꿔야 하는 최대 날짜 수 : 100 암호 만료 예고를 하는 날짜 수 : 7
Shell
복사

2.7. 사용자 계정의 기본 설정

사용자 계정을 생성할 때 필요한 기본값을 정의한 파일이 있음
/etc/login.defs 파일
각 라인은 키워드와 값으로 구성됨
UID_MINUID_MAX는 UID를 자동 할당할 때 유효 범위를 지정
USERGROUPS_ENAB은 사용자 계정과 같은 이름의 그룹을 자동으로 만들 지를 지정
MAIL_DIR /var/spool/mail UMASK 022 HOME_MODE 0700 PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_WARN_AGE 7 UID_MIN 1000 UID_MAX 60000 GID_MIN 1000 GID_MAX 60000 CREATE_HOME yes USERGROUPS_ENAB yes ENCRYPT_METHOD SHA512
Bash
복사
useradd 명령이 참조하는 기본값을 설정한 파일
/etc/default/useradd 파일
GROUP은 (자동 생성을 안 할 때) 사용자 계정의 주 그룹을 지정
홈 디렉터리의 생성 위치와 셸의 종류를 지정
INACTIVE가 0이면 비밀번호 만료 후 즉시 계정을 비활성화, -1이면 기능을 사용하지 않는 것
EXPIRE 값이 없으면 계정의 만료일이 없는 것
# useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
Bash
복사

3. 사용자 계정 수정

3.1. usermod 명령

사용자 계정의 정보를 수정하는 관리자 명령
usermod [options] username
많은 옵션이 useradd 명령과 유사함
usermod -g root kdhong은 주어진 사용자의 주 그룹을 root 그룹으로 변경함
id username 명령은 주어진 사용자의 uid와 gid 정보를 출력함
옵션
옵션
설명
-d home_dir
사용자 계정의 홈 디렉터리를 변경
-m
-d와 함께 사용되어야 하며 기존 홈 디렉터리의 내용을 새 디렉터리로 복사함
-l login_name
사용자 계정의 이름을 변경
-u user_id
사용자 계정의 UID를 변경
-g group
사용자 계정의 주 그룹을 변경. -G 또는 -aG는 부그룹을 변경함
-L
사용자 계정을 잠금. 실제 /etc/shadow 파일에서 비밀번호 앞에 !를 붙임
-U
사용자 계정의 잠금을 해제

3.2. userdel 명령

사용자 계정을 삭제하는 관리자 명령
/etc/passwd 파일에서 해당 라인을 삭제함
userdel [options] username
옵션
-r 은 홈 디렉터리와 파일을 함께 삭제하고 메일 스풀도 삭제함
-f 는 로그인 중이거나 다른 사용자가 사용 중이어도 삭제하며, 같은 이름의 그룹도 삭제함

3.3. 사용자 계정 삭제 시 고려사항

홈 디렉터리도 삭제할 것인가
계정을 삭제하지 말고 잠금 할 것인가
삭제될 계정이 소유하는 파일이 또 있는가
삭제 전에 find / -user username -ls로 확인해야 함
삭제 후라면 find / -uid UID -ls 또는 find / -nouser -ls로 확인함

4. 그룹 계정과 관리

4.1. 그룹 계정

사용자의 계정들을 모아서 하나의 집합을 이루는 개념
그룹의 구성원은 특정 파일(또는 디렉터리)에 대해 그룹에 부여된 권한을 가짐
일반 사용자는 bin, mail, sys 등의 '시스템 그룹 계정'에는 포함될 수 없음
사용자 계정을 만들 때 주 그룹(기본 그룹)이 지정됨
기본적으로 사용자 계정과 같은 이름으로 그룹 계정이 만들어짐
사용자 계정은 0개 이상의 부 그룹에 속할 수 있음

4.2. groupadd 명령

그룹 계정을 만드는 관리자 명령
그룹도 계정 이름과 GID를 가짐
groupadd [options] group
옵션
-g gid는 수동으로 GID를 지정
-r 은 시스템 그룹 계정을 생성
-o-g 옵션과 함께 사용할 때 기존 그룹의 GID를 사용하는 것

4.3. /etc/group 파일

그룹 계정의 정보를 가진 텍스트 파일
라인마다 그룹 계정의 정보가 저장됨
각 라인은 콜론(:)으로 구분되는 4개의 필드를 가짐
그룹이름:그룹비밀번호:GID:구성원_리스트
예시: sales:x:1005:kdhong,jjpark
암호화된 비밀번호는 /etc/gshadow에 저장됨
사용자 계정의 부 그룹을 추가하는 방법:
usermod -G groups -a username
사용자가 자신의 그룹을 확인하는 방법:
id username
groups username

4.4. 사용자 계정과 그룹 및 파일의 접근권한

사용자가 파일이나 디렉터리를 생성하면 그것의 소유 그룹은 사용자의 주 그룹으로 지정됨
사용자는 0개 이상의 부 그룹에 속할 수 있음
사용자가 스스로 다른 그룹의 구성원이 되게 할 수는 없음
관리자라면 gpasswd -a user group로 구성원을 추가할 수 있음
newgrp group를 실행하면 일시적으로 자신의 주 그룹을 변경할 수 있음
자신이 속해 있는 그룹 중에서 지정해야 함
그룹 계정의 비밀번호를 알고 있다면 다른 그룹으로도 지정 가능
단순히 newgrp를 실행하면 원래 주 그룹으로 되돌아감

4.5. gpasswd 명령

그룹의 관리를 위한 명령
그룹의 관리자가 사용함
gpasswd [options] group
옵션
-a user는 구성원 추가, -A users는 그룹의 관리자를 지정
-d user는 구성원 삭제, -M users는 구성원 설정
-r 은 비밀번호 삭제

4.6. groupmod 명령

기존 그룹의 정보를 수정하기 위한 명령
그룹의 관리자가 사용함
groupmod [options] group
-g gid을 사용하여 GID를, -n name은 그룹 이름을 변경

4.7. groupdel 명령

그룹을 삭제하는 관리자 명령
그룹 계정 관련 파일에서 해당 라인을 삭제함
사용자 계정의 주 그룹으로 되어 있는 경우, 삭제할 수 없음
groupdel group