사용자 그룹 관리
☆ 사용자 관리
(1) 사용자 정보 파일
/etc/passwd 사용자의 기본적인 정보가 저장된 파일
/etc/shadow 사용자의 암호가 저장된 파일
# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash |
(/etc/passwd 파일의 필드 해석)
필드 | 설 명 |
root | 사용자 이름 |
x | 사용자 암호(보안상 /etc/shadow 파일에 암호를 옮겨 놓았음) |
0 | 사용자 아이디(UID) |
0 | 그룹 아이디(GID), 사용자의 주 그룹(Primary Group) |
root | 설명 정보(Comment) |
/root | 홈 디렉토리 |
/bin/bash | 로그인 쉘 |
# cat /etc/shadow | grep root
root:$1$z0vZjMTK$pp5tRxbS9k9CWhimjHfZA.:16110:0:99999:7::: |
(/etc/shadow 파일의 필드 해석)
필드 | 설 명 |
root | 사용자 이름(login name) |
$1$z0vZjMTK$pp5tRxbS9k9CWhimjHfZA. | 사용자 암호(encrypted password) $1$ : 암호화 알고리즘 (1: md5) $z0vZjMTK$ : salt key (salt key가 있어서 항상 같은값이 나오지 않게 된다.) $pp5tRxbS9k9CWhimjHfZA. : 암호화된 암호 |
14642 | 암호변경일(days since Jan 1, 1970 that password was last changed) |
0 | 암호를 변경할 수 없는 최소 날짜 (days before password may be changed) |
99999 | 암호를 사용할 수 있는 최대 날짜 (days after which password must be changed) |
7 | 사용자 암호 만료되기전 사용자에게 경고 메세지를 주는 기간 (days before password is to expire that user is warned) |
| 사용자 로그인하지 않으면 암호를 비활성화 시키는 기간 (days after password expires that account is disabled) |
| 사용자 암호 만료 기간, 절대로 넘을 수 없는 기간 (days since Jan 1, 1970 that account is disabled) |
| 아직 기능이 없음 |
(2) 사용자 관리 명령어
useradd CMD 사용자 정보 추가 명령어
usermod CMD 사용자 정보 변경 명령어
userdel CMD 사용자 정보 삭제 명령어
(2-1) useradd 명령어
useradd 명령어나 adduser 명령어 모두 수행 가능하다.
(명령어 형식)
# useradd [options] LOGIN
(명령어 사용예)
# useradd -u 1000 -g users -c "Test User"-d /users/user01 -s /bin/ksh user01
# useradd -d /users/user01 user01
# useradd -M -d /oracle oracle
# useradd user01
# passwd user01
■ useradd 명령어의 기본 옵션(Default Options)
---------------------------------------------------------------------------------
-u UID 자동으로 UID 선택(UID 500 이상), 기존 사용자 UID 다음번째 UID 선택
-g GID 자동으로 GID 선택(GID 500 이상), 사용자 이름과 동일한 그룹 생성
-c COMMENT 설명은 없음
-d HOME_DIR /home/$USER 디렉토리 생성
-s /bin/bash 기본적으로 /bin/bash 지정
---------------------------------------------------------------------------------
(전제 조건) 기존에 존재하는 사용자는 없어야 한다.
user01/user02/user03 .....
만약 사용자가 존재한다면 아래와 같이 삭제한다.
# cat /etc/passwd | tail
# userdel -r <사용자이름> (# userdel -r user01)
(2-2) usermod 명령어
(명령어 형식)
# usermod [options] LOGIN
Options: -a, --append append the user to the supplemental GROUPS(use only with -G) -c, --comment COMMENT new value of the GECOS field -d, --home HOME_DIR new home directory for the user account -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE -f, --inactive INACTIVE set password inactive after expiration to INACTIVE -g, --gid GROUP force use GROUP as new primary group -G, --groups GROUPS new list of supplementary GROUPS -h, --help display this help message and exit -l, --login NEW_LOGIN new value of the login name -L, --lock lock the user account -m, --move-home move contents of the home directory to the new location (use only with -d) -o, --non-unique allow using duplicate (non-unique) UID -p, --password PASSWORD use encrypted password for the new password -s, --shell SHELL new login shell for the user account -u, --uid UID new UID for the user account -U, --unlock unlock the user account -Z, --selinux-user new selinux user mapping for the user account |
(명령어 사용예)
# usermod -u 2000 user01
# usermod -s /bin/ksh user01
# usermod -g 10 -c "Test Group"user01
# usermod -l user03 -d /home/user03 -m user01 (-l : login name, -m : move directory)
[EX1] user01 사용자 정보 변경
# grep user01 /etc/passwd
user01:x:501:501::/home/user01:/bin/bash |
# usermod -u 2000 user01
# grep user01 /etc/passwd
user01:x:2000:503::/home/user01:/bin/bash |
# usermod -s /bin/ksh user01
# grep user01 /etc/passwd
user01:x:2000:503::/home/user01:/bin/ksh |
# usermod -l user03 -d /home/user03 –m user01 (-l : Login name, -d : Directory, -m : Move directory)
# grep user03 /etc/passwd
user03:x:2000:503::/home/user03:/bin/ksh |
# ls -l /home
drwx------ 3 fedora fedora 4.0K Feb 3 02:08 fedora drwx------ 3 user03 user01 4.0K Mar 1 05:21 user03 |
-> 사용자 홈디렉토리가 /home/user03으로 변경 되었다.
-> 홈디렉토리의 소유권은 user03으로 변경 되었지만, 그룹권은 user01 그대로이다.
-> 따라서, 리눅스에서 사용자를 변경한다면, 보통은 다음과 같은 절차여야 한다.
(user01 -> user03 사용자 변경)
# groupadd user03
# usermod -l user03 -g user03 -d /home/user03 -m user03
# groupdel user01
(2-3) userdel 명령어
(명령어 형식)
# userdel [options] LOGIN
Options: -f, --force force removal of files, even if not owned by user -h, --help display this help message and exit -r, --remove remove home directory and mail spool |
(명령어 사용예)
# userdel user01 /* /etc/passwd, /etc/shadow 정보 삭제 */
# userdel -r user01 /* /etc/passwd, /etc/shadow + Home Directory 삭제 + /var/spool/mail/$USER */
※ 사용자 설명 정보(Comment) 및 로그인 쉘(Shell) 변경
# cat /etc/passwd | grep user01
#
-> 사용자 없음
# useradd user01
# passwd user01
New UNIX password: (사용자암호입력) Retype new UNIX password: (사용자암호입력) |
# cat /etc/passwd | grep user01
user01:x:504:504::/home/user01:/bin/bash |
# useradd -c testuser -s /bin/sh user02 /* -c 옵션은 사용자에 대한 설명 추가 */
# passwd user02
New UNIX password: (사용자암호입력) Retype new UNIX password: (사용자암호입력) |
# cat /etc/passwd | grep user02 /* 사용자에 대한 설명과 쉘에 대한 내용이 기본 설정과 다르게 설정 */
user02:x:505:505:testuser:/home/user02:/bin/sh |
# mkdir -p /users
# useradd -s /bin/tcsh -d /users/test user03 /* -s 사용자가 사용할 쉘과 -d 홈디렉토리 선택 */
# passwd user03
New UNIX password: (사용자암호입력) Retype new UNIX password: (사용자암호입력) |
# cat /etc/passwd | grep user03 /* user3만 "/users" 디렉토리에 홈디렉토리가 만들어졌다. */
user03:x:506:506::/users/test:/bin/tcsh |
# ls -l /users
drwx------ 4 user03 user03 4096 Jan 28 09:50 test |
※ 사용자 만기일(Expire Date) 설정
--------------------------------------------------------------------------------
OPTIONS DESCRIPTIONS
--------------------------------------------------------------------------------
-e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE
--------------------------------------------------------------------------------
① 현재 시간 확인
# date
Mon Mar 1 17:07:51 KST 2010 |
-> 오늘 : 2010년 03월01일 17:07:51
② user04 사용자의 Expire Date 설정
# useradd -e 2010-03-30 user04
# passwd user04
New UNIX password: (사용자암호입력) Retype new UNIX password: (사용자암호입력) |
-> user04 사용자는 30일이 지나면 시스템에 들어 올수 없다.
# grep user04 /etc/shadow
user04:$1$wxAr5EL9$Addd5AWeumVztBnhkQ7UK0:14669:0:99999:7::14698: |
-> 14669 : Last Changed
-> 14698 : Expire Date
-> 14698 - 14669 = 약 30일정도
# expr 14698 - 14669
③ 운영체제 시간 변경 및 테스트
# date 04011713
Thu Apr 1 17:13:00 KST 2010 |
-> 운영체제 시간 변경(2010년 04월01일 17:12)
# telnet localhost
Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'.
linux101.example.com (Linux release 2.6.18-164.11.1.el5 #1 SMP Wed Jan 20 07:39:04 EST 2010) (4)
login: user04 Password: (사용자 암호입력) [Your account has expired; please contact your system administrator] Login incorrect Connection closed by foreign host. |
user04 사용자로 로그인
-> 로그인 되지 않음
-> Expire Date를 넘었기 때문에
④ 운영체제 시간 복원 및 테스트
# rdate -s time.bora.net
# date
Mon Mar 1 17:23:13 KST 2010 |
# telnet localhost
user04 사용자로 로그인
$ id
uid=501(user04) gid=502(user04) groups=502(user04) |
$ exit
#
※ 홈계정 생성시 참조되는 디렉토리 및 파일
사용자 계정이 생성될 때 /etc/skel(skelton) 디렉토리에서 파일등이 복사 된다.
# useradd user05
# passwd user05
-> user05 사용자의 암호 입력
# ls -al /etc/skel /home/user05 /* 두 파일이 동일한 것을 알 수 있다 */
/etc/skel: total 56K drwxr-xr-x 3 root root 4.0K Feb 3 01:56 . drwxr-xr-x 109 root root 12K Mar 1 20:05 .. -rw-r--r-- 1 root root 33 Jan 22 2009 .bash_logout -rw-r--r-- 1 root root 176 Jan 22 2009 .bash_profile -rw-r--r-- 1 root root 124 Jan 22 2009 .bashrc drwxr-xr-x 4 root root 4.0K Feb 18 09:18 .mozilla
/home/user05: total 32K drwx------ 3 user04 user04 4.0K Mar 25 17:13 . drwxr-xr-x 4 root root 4.0K Mar 1 20:05 .. -rw-r--r-- 1 user04 user04 33 Mar 1 20:05 .bash_logout -rw-r--r-- 1 user04 user04 176 Mar 1 20:05 .bash_profile -rw-r--r-- 1 user04 user04 124 Mar 1 20:05 .bashrc drwxr-xr-x 4 user04 user04 4.0K Mar 1 20:05 .mozilla |
# cd /etc/skel
# alias ll
alias ll='ls -l --color=tty' <----- 복사 |
# vi .bashrc (# vi /etc/skel/.bashrc)
# .bashrc
# Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi
# User specific aliases and functions alias ll='ls -lFh --color=tty' <----- 새로운 라인 추가 |
# useradd user06
# passwd user06
-> user06 사용자 암호 입력
# ls -al /etc/skel /home/user06
/etc/skel: total 52K drwxr-xr-x 3 root root 4.0K Apr 1 17:20 . drwxr-xr-x 109 root root 12K Apr 1 17:23 .. -rw-r--r-- 1 root root 33 Jan 22 2009 .bash_logout -rw-r--r-- 1 root root 176 Jan 22 2009 .bash_profile -rw-r--r-- 1 root root 155 Apr 1 17:20 .bashrc drwxr-xr-x 4 root root 4.0K Feb 18 09:18 .mozilla
/home/user06: total 28K drwx------ 3 user06 user06 4.0K Apr 1 17:23 . drwxr-xr-x 6 root root 4.0K Apr 1 17:23 .. -rw-r--r-- 1 user06 user06 33 Apr 1 17:23 .bash_logout -rw-r--r-- 1 user06 user06 176 Apr 1 17:23 .bash_profile -rw-r--r-- 1 user06 user06 155 Apr 1 17:23 .bashrc drwxr-xr-x 4 user06 user06 4.0K Apr 1 17:23 .mozilla |
-> /etc/skel 디렉토리안의 내용을 변경했을때 적용되는 시점은 새로운 사용자가 추가되었을시이다.
-> /etc/skel 디렉토리안의 내용을 변경했을때 이전 사용자 디렉토리(기존에 추가된 사용자의 홈디렉토리)에 파일
들에는 반영이 되지 않는다.
# cat /home/user06/.bashrc
# .bashrc
# Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi
# User specific aliases and functions alias ll='ls -lhF --color=tty' |
※ useradd 명령어 실행시 사용되는 기본 설정값 바꾸기
# useradd -D /* -D : Default, 설정파일의 내용을 출력 함 */
GROUP=100 /* 기본 그룹 GID */ HOME=/home /* 사용자의 홈디렉토리가 생성될 디렉토리 */ INACTIVE=-1 /* 비밀번호 만기 후 계정잠금 기간 */ EXPIRE= /* 비밀번호 만기 일수 */ SHELL=/bin/bash /* 기본 쉘 */ SKEL=/etc/skel /* 계정생성시 홈디렉토리에 복사할 파일을 가진 디렉토리 */ CREATE_MAIL_SPOOL=yes |
▪ useradd -D -g 10
▪ useradd -D -b /users
▪ useradd -D -s /bin/ksh
# cat /etc/default/useradd
# useradd defaults file GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes |
-> useradd -D 명령어를 통해 설정하면 /etc/default/useradd 파일의 내용을 변경하게 된다.
# useradd -D -s /bin/sh
# useradd -D
GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/sh SKEL=/etc/skel CREATE_MAIL_SPOOL=yes |
# useradd -D -b /users
# useradd -D
GROUP=100 HOME=/users INACTIVE=-1 EXPIRE= SHELL=/bin/sh SKEL=/etc/skel CREATE_MAIL_SPOOL=yes |
# cat /etc/default/useradd
GROUP=100 HOME=/users INACTIVE=-1 EXPIRE= SHELL=/bin/sh SKEL=/etc/skel CREATE_MAIL_SPOOL=yes |
# useradd user08
# passwd user08
-> 사용자 암호 입력
# cat /etc/passwd | grep user07
user07:x:510:510::/home/user07:/bin/bash |
# cat /etc/passwd | grep user08
user08:x:511:511::/users/user08:/bin/sh |
(복원) useradd 명령어의 기본 동작 복원
# useradd -D -s /bin/bash
# useradd -D -b /home
☆ 그룹 관리
/etc/group 파일 : 그룹 정보 파일
# cat /etc/group | head -3
root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon |
(/etc/group 파일의 필드 해석)
필 드 | 설 명 |
root | 그룹 이름 |
x | 그룹 암호 |
0 | 그룹 아이디(GID) |
root | 그룹(Secondary Group)에 속한 사용자 목록 |
(1-1) groupadd 명령어
(명령어 형식)
# groupadd [options] group
Options: -f, --force force exit with success status if the specified group already exists -r, create system account -g, --gid GID use GID for the new group -h, --help display this help message and exit -K, --key KEY=VALUE overrides /etc/login.defs defaults -o, --non-unique allow create group with duplicate(non-unique) GID |
(명령어 사용예)
# groupadd class1
# groupadd -g 1000 class1
(1-2) groupmod 명령어
(명령어 형식)
# groupmod [-g gid [-o]] [-n name] group
OPTIONS -g gid The numerical value of the group's ID. This value must be unique, unless the -o option is used. The value must be non-negative. Values between 0 and 999 are typically reserved for system groups. Any files which the old group ID is the file group ID must have the file group ID changed manually.
-n new_group_name The name of the group will be changed from group to new_group_name. |
(명령어 사용예)
# groupmod -g 1001 class1
# groupmod -n class2 class1 (-n : Group Name)
(1-3) groupdel 명령어
(명령어 형식)
# groupdel group
(명령어 사용예)
# groupdel class1
☆ 비밀번호 사용 제한 관리
(1) chage 명령어
(명령어 형식)
# chage [options] user
Options:
-d, --lastday LAST_DAY set last password change to LAST_DAY -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE -h, --help display this help message and exit -I, --inactive INACTIVE set password inactive after expiration to INACTIVE -l, --list show account aging information -m, --mindays MIN_DAYS set minimum number of days before password change to MIN_DAYS -M, --maxdays MAX_DAYS set maximim number of days before password change to MAX_DAYS -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS |
(명령어 사용예)
# chage -M 30 -W 7 user01
# chage -E 2010-03-30 user01
# chage -l user01
(/etc/shadow)
user01:$1$eG0hsAqw$Cfawvh5OsIye2rKYcRPH.0:Last Change:MIN:MAX:WARN:INATIVE:Expire Date: user01:$1$eG0hsAqw$Cfawvh5OsIye2rKYcRPH.0:14650:0:99999:7::: user01:$1$eG0hsAqw$Cfawvh5OsIye2rKYcRPH.0:14650:30:90:7:30:15000: |
last change : 1970년1월1일을 기준으로 오늘을 일수로 한 날짜가 표시된다.
min : 암호를 변경할 수 없는 날짜
max : 암호를 사용할 수 있는 최대 날짜
warn : max의 7일전에 암호를 변경하라는 경고 메시지를 보낸다.
inative : max로부터 30일동안 비활성화 상태로 둔다.
expire date : 절대로 넘을 수 없는 날. 이 기간을 지나면 사용자가 못들어온다. 외부사용자용으로 사용할 때 씀
centos, chage, GroupAdd, groupdel, groupmod, password aging, useradd, userdel, usermod, 로그인 쉘 변경, 사용자 삭제, 사용자 추가