사용자 관리¶
이 문서에서는 사용자를 관리하는 방법을 배웁니다.
목표: 이 문서에서는 미래의 Linux 관리자가 다음을 수행하는 방법을 배웁니다:
그룹 추가, 삭제 또는 수정;
사용자 추가, 삭제 또는 수정;
사용자와 그룹에 관련된 파일 이해 및 관리 파일의 소유자 또는 그룹 소유자 변경;
사용자 계정 보안;
Id 변경.
사용자
지식:
복잡성:
소요 시간: 30분
일반¶
각 사용자에게는 사용자의 기본 그룹(primary group) 이라는 그룹이 있어야 합니다.
여러 사용자가 동일한 그룹의 일부가 될 수 있습니다.
기본 그룹 이외의 그룹을 사용자의 보조 그룹(supplementary groups)이라고 합니다.
!!! !!!
각 사용자는 기본 그룹을 가지고 있으며 하나 이상의 보조 그룹에 속할 수 있습니다.
그룹 및 사용자는 고유한 숫자 식별자인 GID
및 UID
로 관리됩니다.
UID
: User IDentifier - 사용자 식별자. 고유한 사용자 ID입니다.GID
: Group IDentifier - 그룹 식별자. 고유한 그룹 ID입니다.
UID와 GID는 모두 커널에서 인식됩니다. 즉, uid=0 사용자가 슈퍼 관리자인 한 슈퍼 관리자가 반드시 root 사용자일 필요는 없습니다.
사용자/그룹과 관련된 파일은 다음과 같습니다:
- /etc/passwd
- /etc/shadow
- /etc/group
- /etc/gshadow
- /etc/skel/
- /etc/default/useradd
- /etc/login.defs
!!! !!!
파일을 수동으로 편집하는 대신 항상 관리 명령을 사용해야 합니다.
그룹 관리¶
수정된 파일, 추가된 행:
/etc/group
/etc/gshadow
groupadd
명령¶
groupadd
명령은 시스템에 그룹을 추가합니다.
groupadd [-f] [-g GID] group
예시:
$ sudo groupadd -g 1012 GroupeB
옵션 | 설명 |
---|---|
-g GID |
생성할 그룹의 GID 입니다. |
-f |
시스템은 -g 옵션으로 지정된 것이 이미 존재하는 경우 GID 를 선택합니다. |
-r |
SYS_GID_MIN 과 SYS_GID_MAX 사이에 GID 가 있는 시스템 그룹을 생성합니다. 이 두 변수는 /etc/login.defs 에 정의되어 있습니다. |
그룹 명명 규칙:
- 악센트 또는 특수 문자 사용 안 함;
- 기존 사용자 또는 시스템 파일의 이름과 다름.
!!! !!!
**Debian**에서 관리자는 모든 Linux 배포판에 이식 가능한 스크립트를 제외하고 `man`에 지정된 대로 `addgroup` 및 `delgroup` 명령을 사용해야 합니다.
```
$ man addgroup
설명
adduser 및 addgroup은 /etc/adduser.conf의 명령줄 옵션 및 구성 정보에 따라 시스템에 사용자 및 그룹을 추가합니다. 기본적으로 사용자 추가, 그룹 추가 및 사용자 모드 프로그램과 같은 낮은 수준의 도구에 대한 프런트 엔드로,
기본적으로 Debian 정책 준수 UID 및 GID 값을 선택하고 골격 구성으로 홈 디렉토리를 만들고 사용자 지정 스크립트를 실행합니다.
```
groupmod
명령¶
groupmod
명령을 사용하면 시스템의 기존 그룹을 수정할 수 있습니다.
groupmod [-g GID] [-n nom] group
예시:
$ sudo groupmod -g 1016 GroupP
$ sudo groupmod -n GroupC GroupB
옵션 | 설명 |
---|---|
-g GID |
수정할 그룹의 새 GID 입니다. |
-n name |
새 그룹 이름으로 변경합니다. |
그룹의 이름, GID
또는 둘 다를 동시에 변경할 수 있습니다.
수정 후 그룹에 속한 파일에는 알 수 없는 GID
가 있습니다. 이들은 새로운 GID
를 다시 할당되어야 합니다.
$ sudo find / -gid 1002 -exec chgrp 1016 {} \;
groupdel
명령¶
groupdel
명령은 시스템에서 기존 그룹을 삭제하는 데 사용됩니다.
groupdel group
예시:
$ sudo groupdel GroupC
!!! !!!
그룹을 삭제할 때, 두 가지 조건이 발생할 수 있습니다:
* 만약 사용자가 고유한 기본 그룹을 가지고 있고, 해당 그룹에 대해 `groupdel` 명령어를 실행하면, 해당 그룹에 특정 사용자가 속해 있어서 그룹을 삭제할 수 없다는 메시지가 나타납니다.
* 만약 사용자가 보조 그룹에 속하고 (사용자의 주요 그룹이 아닌 경우), 해당 그룹이 시스템에 다른 사용자의 주요 그룹이 아니라면, `groupdel` 명령어를 사용하여 그룹을 추가 확인 없이 삭제할 수 있습니다.
예시:
```bash
Shell > useradd testa
Shell > id testa
uid=1000(testa) gid=1000(testa) group=1000(testa)
Shell > groupdel testa
groupdel: cannot remove the primary group of user 'testa'
Shell > groupadd -g 1001 testb
Shell > usermod -G testb root
Shell > id root
uid=0(root) gid=0(root) group=0(root),1001(testb)
Shell > groupdel testb
```
!!! !!!
`userdel -r` 명령어를 사용하여 사용자를 삭제할 때 해당 기본 그룹도 함께 삭제됩니다. 기본 그룹 이름은 일반적으로 사용자 이름과 동일합니다.
!!! !!!
각 그룹은 고유한 'GID'를 가지고 있습니다. 그룹은 부가 그룹으로 여러 사용자에 의해 사용될 수 있습니다. 관례상, 슈퍼 관리자의 GID는 0입니다. 일부 서비스나 프로세스를 위해 예약된 GID는 201~999입니다. 이는 시스템 그룹이나 가상 사용자 그룹이라고 합니다. 사용자의 GID는 일반적으로 1000 이상입니다. 이는 <font color=red>/etc/login.defs</font>와 관련이 있으며, 이에 대해 이후에 이야기할 것입니다.
```bash
# 코멘트 라인 무시
shell > cat /etc/login.defs
MAIL_DIR /var/spool/mail
UMASK 022
HOME_MODE 0700
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 1000
UID_MAX 60000
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512
```
!!! !!!
사용자는 반드시 그룹의 일부여야 하므로 사용자를 추가하기 전에 그룹을 먼저 생성하는 것이 가장 좋습니다. 따라서 그룹에는 구성원이 없을 수도 있습니다.
/etc/group
파일¶
이 파일에는 그룹 정보가 포함되어 있습니다(:
로 구분됨).
$ sudo tail -1 /etc/group
GroupP:x:516:patrick
(1) (2)(3) (4)
- 1: 그룹의 이름
- 2: 그룹 암호는
x
로 식별됩니다. 그룹 암호는/etc/gshadow
에 저장됩니다. - 3: GID.
- 4: 그룹에 속하는 보조 사용자(고유 기본 사용자 제외).
참고
/etc/group
파일의 각 행은 그룹에 해당합니다. 기본 사용자 정보는 /etc/passwd
에 저장됩니다.
/etc/gshadow
파일¶
이 파일에는 그룹에 대한 보안 정보가 포함되어 있습니다(:
로 구분됨).
$ sudo grep GroupA /etc/gshadow
GroupA:$6$2,9,v...SBn160:alain:rockstar
(1) (2) (3) (4)
- 1: 그룹의 이름
- 2: 암호화된 비밀번호
- 3: 그룹 관리자의 이름
- 4: 그룹의 보조 사용자(고유한 기본 사용자 제외).
주의
선택 사항: 생성 시 -u, -g, -d 및 -s 옵션을 설정합니다.
비밀번호의 !
는 비밀번호가 잠겨 있음을 나타냅니다. 따라서, 사용자는 그룹에 액세스하기 위해 비밀번호를 사용할 수 없습니다 (그룹 멤버는 비밀번호가 필요하지 않기 때문입니다).
사용자 관리¶
정의¶
사용자는 /etc/passwd
파일에서 다음과 같이 정의됩니다.
- 1: 로그인 이름;
- 2: 암호 식별,
x
는 사용자에게 암호가 있음을 나타내며 암호화된 암호는/etc/shadow
의 두 번째 필드에 저장됩니다. - 3: UID;
- 4: 기본 그룹의 GID;
- 5: 코멘트;
- 6: 홈 디렉토리;
- 7: 셸(
/bin/bash
,/bin/nologin
, ...).
사용자에는 세 가지 유형이 있습니다.
- root(uid=0): 시스템 관리자
- 시스템 사용자(uid는 201~999 중 하나): 애플리케이션 액세스 권한을 관리하기 위해 시스템에서 사용합니다.
- 일반 사용자(uid>=1000): 시스템에 로그인하기 위한 다른 계정입니다.
수정된 파일, 추가된 행:
/etc/passwd
/etc/shadow
useradd
명령¶
useradd
명령은 사용자를 추가하는 데 사용됩니다.
useradd [-u UID] [-g GID] [-d directory] [-s shell] login
예시:
$ sudo useradd -u 1000 -g 1013 -d /home/GroupC/carine carine
옵션 | 설명 |
---|---|
-u UID |
생성할 사용자의 UID 를 지정합니다. |
-g GID |
기본 그룹의 GID 를 지정합니다. GID 는 그룹 이름 으로도 지정할 수 있습니다. |
-G GID1,[GID2]... |
보조 그룹의 GID 를 지정합니다. GID 는 그룹 이름 도 지정할 수 있습니다. 쉼표로 구분된 여러 보조 그룹을 지정할 수 있습니다. |
-d directory |
사용자의 홈 디렉터리를 생성합니다. |
-s shell |
셸 |
-c COMMENT |
코멘트를 추가합니다. |
-U |
동시에 생성되는 동일한 이름의 그룹에 사용자를 추가합니다. 지정하지 않으면 사용자 생성 시 동일한 이름의 그룹이 생성됩니다. |
-M |
사용자의 홈 디렉토리를 생성하지 않습니다. |
-r |
시스템 계정을 생성합니다. |
계정 생성 시 암호가 없으며 잠겨 있습니다.
계정 잠금을 해제하려면 암호를 지정해야 합니다.
옵션을 지정하지 않고 useradd
명령을 실행하면 다음과 같은 기본 설정이 새 사용자에게 적용됩니다:
- 사용자와 동일한 이름의 홈 디렉토리가 생성됩니다.
- 사용자와 동일한 이름의 기본 그룹이 생성됩니다.
- 기본 쉘은 bash입니다.
- 사용자의 UID 및 기본 그룹 GID 값이 자동으로 추론됩니다. 일반적으로 1000에서 60,000 사이의 고유한 값입니다.
참고
기본 설정 및 값은 다음 구성 파일에서 얻을 수 있습니다:
/etc/login.defs
및 /etc/default/useradd
Shell > useradd test1
Shell > tail -n 1 /etc/passwd
test1:x:1000:1000::/home/test1:/bin/bash
Shell > tail -n 1 /etc/shadow
test1:!!:19253:0:99999:7
:::
Shell > tail -n 1 /etc/group ; tail -n 1 /etc/gshadow
test1:x:1000:
test1:!::
계정 명명 규칙:
- 악센트, 대문자 또는 특수 문자가 없습니다.
- RockyLinux에서 대문자 사용자 이름을 사용할 수 있지만 권장하지 않습니다.
- 선택 사항: 생성 시
-u
,-g
,-d
및-s
옵션을 설정합니다. - 기존 그룹 또는 시스템 파일의 이름과 다릅니다.
- 사용자 이름은 최대 32자를 포함할 수 있습니다.
주의
마지막 디렉터리를 제외하고 홈 디렉터리 트리를 생성해야 합니다.
마지막 디렉토리는 /etc/skel
에서 파일을 복사할 수 있는 useradd
명령에 의해 생성됩니다.
사용자는 기본 그룹 외에 여러 그룹에 속할 수 있습니다.
예시:
$ sudo useradd -u 1000 -g GroupA -G GroupP,GroupC albert
참고
데비안에서는 -m
옵션을 지정하여 로그인 디렉토리를 강제로 생성하거나 /etc/login.defs
파일에서 CREATE_HOME
변수를 설정해야 합니다. 모든 경우에 관리자는 man
에 지정된 대로 adduser
및 deluser
명령을 사용해야 합니다. 단, 모든 Linux 배포판에 이식할 수 있는 스크립트는 예외입니다.
$ man useradd
DESCRIPTION
**useradd**는 사용자를 추가하기 위한 low-level 유틸리티입니다. Debian에서 관리자는 일반적으로 **adduser(8)**를 대신 사용해야 합니다.
사용자 생성을 위한 기본값입니다.¶
/etc/default/useradd
파일 수정.
useradd -D [-b directory] [-g group] [-s shell]
예시:
$ sudo useradd -D -g 1000 -b /home -s /bin/bash
옵션 | 설명 |
---|---|
-D |
사용자 생성을 위한 기본값을 설정합니다. |
-b directory |
기본 로그인 디렉토리를 설정합니다. |
-g group |
기본 그룹을 설정합니다. |
-s shell |
기본 쉘을 설정합니다. |
-f |
암호가 만료된 후 계정이 비활성화되기 전까지의 일 수입니다. |
-e |
계정이 비활성화되는 날짜입니다. |
usermod
명령¶
usermod
명령은 사용자를 수정하는 데 사용됩니다.
usermod [-u UID] [-g GID] [-d directory] [-m] login
예시:
$ sudo usermod -u 1044 carine
useradd
명령과 동일한 옵션입니다.
옵션 | 설명 |
---|---|
-m |
-d 옵션과 함께 사용됩니다. 이전 로그인 디렉터리의 내용을 새로운 디렉터리로 이동합니다. 이전 홈 디렉터리가 존재하지 않는 경우 새로운 홈 디렉터리가 생성되지 않으며, 새로운 홈 디렉터리가 존재하지 않을 때 생성됩니다. |
-l login |
새 로그인 이름입니다. 로그인 이름을 수정한 후 일치하도록 홈 디렉토리의 이름도 수정해야 합니다. |
-e YYYY-MM-DD |
계정 만료 날짜를 수정합니다. |
-L |
계정을 영구적으로 잠급니다. 즉, ! 가 /etc/shadow 암호 필드 시작 부분에 추가됩니다. |
-U |
계정을 잠금 해제합니다. |
-a |
-G 옵션과 함께 사용해야 하는 사용자의 보조 그룹을 추가합니다. |
-G |
이전 보조 그룹을 덮어쓰도록 사용자의 보조 그룹을 수정합니다. |
팁
사용자를 수정하려면 로그아웃되어 있어야 하고 실행 중인 프로세스가 없어야 합니다.
식별자를 변경한 후 사용자에게 속한 파일에는 알 수 없는 UID
가 있습니다. 새 UID
에 재할당해야 합니다.
여기서 1000
은 이전 UID
이고 1044
는 새 것입니다. 예는 다음과 같습니다.
$ sudo find / -uid 1000 -exec chown 1044: {} \;
사용자 계정의 잠금 및 잠금 해제, 예는 다음과 같습니다.
Shell > usermod -L test1
Shell > grep test1 /etc/shadow
test1:!$6$n.hxglA.X5r7X0ex$qCXeTx.kQVmqsPLeuvIQnNidnSHvFiD7bQTxU7PLUCmBOcPNd5meqX6AEKSQvCLtbkdNCn.re2ixYxOeGWVFI0:19259:0:99999:7
:::
Shell > usermod -U test1
-aG
옵션과 -G
옵션의 차이점은 다음 예에서 설명할 수 있습니다.
Shell > useradd test1
Shell > passwd test1
Shell > groupadd groupA ; groupadd groupB ; groupadd groupC ; groupadd groupD
Shell > id test1
uid=1000(test1) gid=1000(test1) groups=1000(test1)
Shell > gpasswd -a test1 groupA
Shell > id test1
uid=1000(test1) gid=1000(test1) groups=1000(test1),1002(groupA)
Shell > usermod -G groupB,groupC test1
Shell > id test1
uid=1000(test1) gid=1000(test1) gorups=1000(test1),1003(groupB),1004(groupC)
Shell > usermod -aG groupD test1
uid=1000(test1) gid=1000(test1) groups=1000(test1),1003(groupB),1004(groupC),1005(groupD)
userdel
명령¶
userdel
명령은 사용자 계정을 삭제하는 데 사용됩니다.
$ sudo userdel -r carine
옵션 | 설명 |
---|---|
-r |
사용자의 홈 디렉토리와 /var/spool/mail/ 디렉토리에 있는 메일 파일을 삭제합니다. |
!!! !!!
삭제하려면 사용자가 로그아웃하고 실행 중인 프로세스가 없어야 합니다.
userdel
명령은 /etc/passwd
, /etc/shadow
, /etc/group
, /etc/gshadow
에서 해당 줄을 제거합니다. 위에서 언급한 것처럼 userdel -r
은 사용자의 해당 기본 그룹도 삭제합니다.
/etc/passwd
파일¶
이 파일에는 사용자 정보가 포함되어 있습니다(:
로 구분됨).
$ sudo head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
(1)(2)(3)(4)(5) (6) (7)
- 1: 로그인 이름;
- 2: 암호 식별,
x
는 사용자에게 암호가 있음을 나타내며 암호화된 암호는/etc/shadow
의 두 번째 필드에 저장됩니다. - 3: UID;
- 4: 기본 그룹의 GID;
- 5: 코멘트;
- 6: 홈 디렉토리;
- 7: 셸(
/bin/bash
,/bin/nologin
, ...).
/etc/shadow
파일¶
이 파일에는 사용자의 보안 정보가 포함되어 있습니다(:
로 구분됨).
$ sudo tail -1 /etc/shadow
root:$6$...:15399:0:99999:7
:::
(1) (2) (3) (4) (5) (6)(7,8,9)
- 1: 로그인 이름;
- 2: 암호화된 비밀번호.
/etc/login.defs
의ENCRYPT_METHOD
로 정의된 SHA512 암호화 알고리즘을 사용합니다. - 3: 암호가 마지막으로 변경된 시간, 타임스탬프 형식(일)입니다. 소위 타임스탬프는 1970년 1월 1일을 기준으로 합니다. 즉, 두 번의 암호 변경하루가 지날 때마다 타임스탬프는 +1입니다.
- 4: 암호의 최소 수명입니다. 즉, 두 번의 암호 변경(세 번째 필드 관련) 사이의 시간 간격(일)입니다.
/etc/login.defs
의PASS_MIN_DAYS
로 정의되며 기본값은 0입니다. 즉, 비밀번호를 두 번째로 변경할 때 제한이 없습니다. 단, 5일 경우 5일 이내 비밀번호 변경 불가, 5일 이후에만 가능함을 의미합니다. - 5: 암호의 최대 수명입니다. 즉, 암호의 유효 기간입니다(세 번째 필드 관련).
/etc/login.defs
의PASS_MAX_DAYS
로 정의됩니다. - 6: 암호가 만료되기 전의 경고 일 수(다섯 번째 필드와 관련됨). 기본값은
/etc/login.defs
의PASS_WARN_AGE
로 정의된 7일입니다. - 7: 비밀번호 만료 후 유예 기간(다섯 번째 필드 관련).
- 8: 계정 만료 시간, 타임스탬프 형식, 일 단위. 계정 만료는 비밀번호 만료와 다릅니다. 계정이 만료된 경우 사용자는 로그인할 수 없습니다. 비밀번호가 만료된 경우 사용자는 자신의 비밀번호를 사용하여 로그인할 수 없습니다.
- 9: 향후 사용을 위해 예약됨.
위험
/etc/passwd
파일의 각 줄에 대해 /etc/shadow
파일에 해당 줄이 있어야 합니다.
타임스탬프 및 날짜 변환에 대해서는 다음 명령 형식을 참조하십시오.
# 타임스탬프는 날짜로 변환되며 "17718"은 입력할 타임스탬프를 나타냅니다.
Shell > date -d "1970-01-01 17718 days"
# 날짜는 타임스탬프로 변환되며 "2018-07-06"은 입력할 날짜를 나타냅니다.
Shell > echo $(($(date --date="2018-07-06" +%s)/86400+1))
파일 소유자¶
위험
모든 파일은 반드시 하나의 사용자와 하나의 그룹에 속합니다.
파일을 생성하는 사용자의 기본 그룹은 기본적으로 파일을 소유한 그룹입니다.
수정 명령¶
chown
명령¶
chown
명령을 사용하면 파일 소유자를 변경할 수 있습니다.
chown [-R] [-v] login[:group] file
예시:
$ sudo chown root myfile
$ sudo chown albert:GroupA myfile
옵션 | 설명 |
---|---|
-R |
해당 디렉터리와 그 하위 디렉터리에 속한 모든 파일의 소유자를 재귀적으로 변경합니다. |
-v |
실행된 변경 사항을 표시합니다. |
소유자 사용자만 변경하는 방법:
$ sudo chown albert file
소유자 그룹만 수정하는 방법:
$ sudo chown :GroupA file
사용자 및 소유자 그룹 변경:
$ sudo chown albert:GroupA file
다음 예에서 할당된 그룹은 지정된 사용자의 기본 그룹이 됩니다.
$ sudo chown albert: file
디렉토리에 있는 모든 파일의 소유자 및 그룹 변경
$ sudo chown -R albert:GroupA /dir1
chgrp
명령¶
chgrp
명령을 사용하면 파일의 소유자 그룹을 변경할 수 있습니다.
chgrp [-R] [-v] group file
예시:
$ sudo chgrp group1 file
옵션 | 설명 |
---|---|
-R |
해당 디렉터리와 그 하위 디렉터리에 속한 모든 파일의 소유자를 재귀적으로 변경합니다. |
-v |
실행된 변경 사항을 표시합니다. |
참고
다른 파일의 소유자 및 소유자 그룹을 참조로 사용하여 파일에 소유자 및 소유자 그룹을 적용할 수 있습니다.
chown [options] --reference=RRFILE FILE
예시:
chown --reference=/etc/groups /etc/passwd
게스트 관리¶
gpasswd
명령¶
gpasswd
명령을 사용하면 그룹을 관리할 수 있습니다.
gpasswd [option] group
예시:
$ sudo gpasswd -A alain GroupA
[alain]$ gpasswd -a patrick GroupA
옵션 | 설명 |
---|---|
-a USER |
사용자를 그룹에 추가합니다. 추가된 사용자에게 이 그룹은 보조 그룹입니다. |
-A USER,... |
관리 사용자 목록을 설정합니다. |
-d USER |
그룹에서 사용자를 제거합니다. |
-M USER,... |
그룹 구성원 목록을 설정합니다. |
gpasswd -M
명령은 추가가 아니라 수정 역할을 합니다.
# gpasswd GroupeA
New Password:
Re-enter new password:
Note
그룹에 사용자를 추가하는 데 gpasswd -a
를 사용하는 것 외에도 앞서 언급한 usermod -G
또는 usermod -AG
를 사용할 수도 있습니다.
id
명령¶
id
명령은 사용자의 그룹 이름을 표시합니다.
id USER
예시:
$ sudo id alain
uid=1000(alain) gid=1000(GroupA) groupes=1000(GroupA),1016(GroupP)
newgrp
명령¶
newgrp
명령은 사용자의 보조 그룹 중 하나를 사용자의 새로운임시 기본 그룹으로 선택할 수 있습니다. newgrp
명령을 사용하면 사용자의 기본 그룹을 전환할 때마다 새로운 자식 셸(하위 프로세스)이 생성됩니다. 주의하세요! 자식 셸과 서브 셸은 다릅니다.
newgrp [secondarygroups]
예시:
기본 쉘은 bash입니다.
보안¶
passwd
명령¶
passwd
명령은 암호를 관리하는 데 사용됩니다.
passwd [-d] [-l] [-S] [-u] [login]
예시:
Shell > passwd -l albert
Shell > passwd -n 60 -x 90 -w 80 -i 10 patrick
옵션 | 설명 |
---|---|
-d |
암호를 영구적으로 제거합니다. 루트(uid=0)의 경우에만 사용하십시오. |
-l |
사용자 계정을 영구적으로 잠금 해제합니다. 루트(uid=0)의 경우에만 사용하십시오. |
-S |
계정 상태를 표시합니다. 루트(uid=0)의 경우에만 사용하십시오. |
-u |
사용자 계정을 영구적으로 잠급니다. 루트(uid=0)의 경우에만 사용하십시오. |
-e |
암호가 영구적으로 만료됩니다. 루트(uid=0)의 경우에만 사용하십시오. |
-n DAYS |
암호의 최소 수명입니다. 영구적인 변화입니다. 루트(uid=0)의 경우에만 사용하십시오. |
-x DAYS |
암호의 최대 수명입니다. 영구적인 변화입니다. 루트(uid=0)의 경우에만 사용하십시오. |
-w DAYS |
만료 전 경고 시간입니다. 영구적인 변화입니다. 루트(uid=0)의 경우에만 사용하십시오. |
-i DAYS |
암호가 만료되면 비활성화되기 전에 지연됩니다. 영구적인 변화입니다. 루트(uid=0)의 경우에만 사용하십시오. |
password -l
을 사용합니다. 즉, "!!"를 추가합니다. /etc/shadow
에 해당하는 사용자의 암호 필드 시작 부분에 있습니다.
예시:
- Alain은 자신의 비밀번호를 변경합니다.
[alain]$ passwd
- root는 Alain의 암호를 변경합니다.
$ sudo passwd alain
참고
사용자는 'passwd' 명령을 사용하여 비밀번호를 변경할 수 있습니다(이전 비밀번호가 필요함). 관리자는 제한 없이 모든 사용자의 암호를 변경할 수 있습니다.
보안 제한 사항을 준수해야 합니다.
쉘 스크립트로 사용자 계정을 관리할 때 사용자를 생성한 후 기본 비밀번호를 설정해 두면 유용할 수 있습니다.
passwd
명령에 암호를 전달하면 됩니다.
예시:
$ sudo echo "azerty,1" | passwd --stdin philippe
주의
암호는 일반 텍스트로 입력되며 passwd
가 암호를 처리합니다.
chage
명령¶
chage
명령은 사용자 암호 만료 정보를 변경합니다.
chage [-d date] [-E date] [-I days] [-l] [-m days] [-M days] [-W days] [login]
예시:
$ sudo chage -m 60 -M 90 -W 80 -I 10 alain
옵션 | 설명 |
---|---|
-I DAYS |
비활성화 되기 전 암호 만료까지의 일수를 지정합니다. 영구적으로 변경됩니다. |
-l |
정책 세부 정보를 표시합니다. |
-m DAYS |
암호의 최소 사용 기간을 정의합니다. 영구적으로 변경됩니다. |
-M DAYS |
암호의 최대 사용 기간을 정의합니다. 영구적으로 변경됩니다. |
-d LAST_DAY |
암호가 마지막으로 변경된 이후 일 수를 정의합니다. 요일의 타임스탬프 스타일 또는 YYYY-MM-DD 스타일을 사용할 수 있습니다. 영구적으로 변경됩니다. |
-E EXPIRE_DATE |
계정 만료 날짜를 정의합니다. 요일의 타임스탬프 스타일 또는 YYYY-MM-DD 스타일을 사용할 수 있습니다. 영구적으로 변경됩니다. |
-W WARN_DAYS |
만료 전 경고 시간을 정의합니다. 영구적으로 변경됩니다. |
예시:
# `chage` 명령은 대화식 모드도 제공합니다.
$ sudo chage philippe
# `-d` 옵션은 로그인 시 비밀번호를 강제로 변경하도록 합니다.
$ sudo chage -d 0 philippe
고급 관리¶
구성 파일:
/etc/default/useradd
/etc/login.defs
/etc/skel
참고
/etc/default/useradd
파일 편집은 useradd
명령으로 수행됩니다.
다른 파일은 텍스트 편집기로 수정해야 합니다.
/etc/default/useradd
파일¶
이 파일에는 기본 데이터 설정이 포함되어 있습니다.
!!! !!!
사용자 생성 시 옵션을 지정하지 않으면 시스템은 `/etc/default/useradd`에 정의된 기본값을 사용합니다.
이 파일은 useradd -D
명령으로 수정됩니다(다른 옵션 없이 입력한 useradd -D
는 /etc/default/useradd
파일의 내용을 표시합니다).
Shell > grep -v ^# /etc/default/useradd
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
변수 | 설명 |
---|---|
GROUP |
기본 그룹 GID를 정의합니다. |
HOME |
일반 사용자 홈 디렉토리의 상위 디렉토리 경로를 정의합니다. |
INACTIVE |
암호 만료 후 유예 기간(일)입니다. /etc/shadow 파일의 7번째 필드에 해당합니다. -1 값은 유예 기간 기능이 꺼져 있음을 의미합니다. |
EXPIRE |
계정 만료 날짜를 정의합니다. /etc/shadow 파일의 8번째 필드에 해당합니다. |
SHELL |
명령 해석기를 정의합니다. |
SKEL |
로그인 디렉토리의 스켈레톤 디렉토리를 정의합니다. |
CREATE_MAIL_SPOOL |
/var/spool/mail/ 에 메일박스 생성하는 것을 정의합니다. |
사용자를 생성할 때 동일한 이름의 기본 그룹이 필요하지 않은 경우 다음을 수행할 수 있습니다.
Shell > useradd -N test2
Shell > id test2
uid=1001(test2) gid=100(users) groups=100(users)
/etc/login.defs
파일¶
# 코멘트 라인 무시
shell > cat /etc/login.defs
MAIL_DIR /var/spool/mail
UMASK 022
HOME_MODE 0700
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 1000
UID_MAX 60000
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512
UMASK 022
: 파일 생성 권한이 755(rwxr-xr-x)임을 의미합니다. 그러나 보안을 위해 GNU/Linux는 새로 생성된 파일에 대한 x 권한이 없으며 이 제한은 루트(uid=0) 및 일반 사용자(uid>=1000)에게만 적용됩니다. 예시:
Shell > touch a.txt
Shell > ll
-rw-r--r-- 1 root root 0 Oct 8 13:00 a.txt
HOME_MODE 0700
: 일반 사용자의 홈 디렉토리 권한입니다. 루트의 홈 디렉토리에서는 작동하지 않습니다.
Shell > ll -d /root
dr-xr-x---. 10 root root 4096 Oct 8 13:12 /root
Shell > ls -ld /home/test1/
drwx------ 2 test1 test1 4096 Oct 8 13:10 /home/test1/
USERGROUPS_ENAB yes
: "userdel -r
명령을 사용하여 사용자를 삭제할 때 해당 기본 그룹도 삭제됩니다." 왜일까요? 그 이유는 이 때문입니다.
/etc/skel
디렉토리¶
사용자가 생성되면 홈 디렉터리와 환경 파일이 생성됩니다. /etc/skel/
디렉토리에 있는 파일을 사용자를 생성하는 데 필요한 파일 템플릿으로 생각할 수 있습니다.
이러한 파일은 /etc/skel
디렉토리에서 자동으로 복사됩니다.
.bash_logout
.bash_profile
.bashrc
이 디렉터리에 있는 모든 파일과 디렉터리는 생성 시 사용자 트리에 복사됩니다.
아이덴티티 변경¶
su
명령¶
su
명령을 사용하면 연결된 사용자의 Id를 변경할 수 있습니다.
su [-] [-c command] [login]
예시:
$ sudo su - alain
[albert]$ su - root -c "passwd alain"
옵션 | 설명 |
---|---|
- |
사용자의 전체 환경을 로드합니다. |
-c command |
사용자 Id로 명령을 실행합니다. |
로그인을 지정하지 않으면 root
가 됩니다.
표준 사용자는 새 Id의 암호를 입력해야 합니다.
!!! !!!
You can use the `exit`/`logout` command to exit users who have been switched. 사용자를 전환한 후에는 새로운 `자식 셸` 또는 `서브 셸`이 없다는 점에 유의해야 합니다. 예를 들면 다음과 같습니다.
```
Shell > whoami
root
Shell > echo $SHLVL ; echo $BASH_SUBSHELL
1
0
Shell > su - test1
Shell > echo $SHLVL ; echo $BASH_SUBSHELL
1
0
```
주의하십시오! su
와 su -
는 다음 예와 같이 다릅니다.
Shell > whoami
test1
Shell > su root
Shell > pwd
/home/test1
Shell > env
...
USER=test1
PWD=/home/test1
HOME=/root
MAIL=/var/spool/mail/test1
LOGNAME=test1
...
Shell > whoami
test1
Shell > su - root
Shell > pwd
/root
Shell > env
...
USER=root
PWD=/root
HOME=/root
MAIL=/var/spool/mail/root
LOGNAME=root
...
따라서 사용자를 전환할 때 -
을 잊지 않도록 주의하세요. 필요한 환경 변수 파일이 로드되지 않기 때문에 일부 프로그램을 실행하는 데 문제가 발생할 수 있습니다.