본문 바로가기

Linux/기타

사용자와 그룹

주제 : 사용자와 그룹



o 사용자의 종류 슈퍼유저(관리자) : 로그인 O, 시스템을 관리하는 사용자 (uid 0) 시스템유저 : 로그인 X, 데몬이나 특정 프로그램을 실행하는 사용자 (uid 1 ~ 100) 일반유저 : 로그인 O, 자신의 디렉토리에 자료를 관리하는 사용자 (uid 500 ~ 65534)


로그인 여부 : /bin/false , /sbin/nologin X (로그인을 못하는 쉘) 로그인 여부 : /bin/bash, /bin/ksh, /bin/csh O (로그인을 할 수 있는 쉘)


/etc : 설정파일들이 들어있는 디렉토리

o 관련 파일들 (- : 백업용, 바로 전 단계의 내용의 파일) - 리눅스 있는 모든 사용자들은 반드시 하나이상의 그룹에 포함되어 있다. /etc/passwd : 사용자의 정보가 담겨있는 파일 /etc/group : 그룹의 정보가 담겨있는 파일 /etc/shadow : 사용자의 비밀번호 정보가 담겨있는 파일 /etc/passwd- : 사용자의 정보가 담겨있는 이전 passwd 파일 (- : 백업용, 바로 전 단계의 내용의 파일) /etc/group- : 그룹의 정보가 담겨있는 이전 group 파일 /etc/shadow- : 사용자의 비밀번호 정보가 담겨있는 이전 shadow 파일 /etc/shells             : 쉘의 종류가 있는 파일 /etc/default/useradd    : 사용자를 생성때 사용하게 되는 기본정보가 있는 파일 /etc/login.defs         : 사용자를 생성할 때 기본값이 저장되어 있는 파일 (설정파일) /etc/skel              : 뼈대 디렉토리로 사용자를 생성할 때 이 디렉토리의 모든 파일들을 복사 - 리눅스 시스템 프로그래밍을 하기 위해서 필요한 파일들 /etc/passwd에 대한 구조가 담겨있는 파일 : /usr/include/pwd.h 에서 passwd 구조체 참고 /etc/group에 대한 구조가 담겨있는 파일 : /usr/include/grp.h 에서 group 구조체 참고 /etc/shadow에 대한 구조가 담겨있는 파일 : /usr/include/shadow.h 파일에서 spwd 구조체 참고


o rpm 으로 관련 명령어 알아보기
# which useradd
/usr/sbin/useradd
# rpm -qf /usr/sbin/useradd 
shadow-utils-4.0.17-20.el5
# rpm -qi shadow-utils
# rpm -ql shadow-utils | grep bin
# rpm -qc shadow-utils 
# rpm -qd shadow-utils 

o 사용자관련 명령어 디렉토리 : /usr/bin chage faillog gpasswd lastlog newgrp sg 디렉토리 : /usr/sbin adduser chpasswd groupadd groupdel groupmod grpck grpconv grpunconv newusers pwck pwconv pwunconv useradd userdel usermod

o /etc/passwd 파일 구조 username:password:uid:gid:comment:homedirectory:shell 1 2 3 4 5 6 7

- 각 필드의 구분자는 : 으로 구분되어 있다. 1. 사용자 이름 2. 암호화된 비밀번호(현재는 사용하지 않고, x 문자가 들어있다. x가 들어가 있지 않으면 자동 로그인이 된다) 3. 사용자의 UID (OS가 사용자를 관리하기 위해서 사용자에게 부여한 번호, 리눅스는 사용자를 이름으로 구분 X) 4. 사용자의 GID (기본그룹 : main그룹, OS가 사용자가 속한 그룹에 부여한 번호) 5. 설명문 (보안상 요즘 사용하지 않는다) 6. 사용자의 홈디렉토리 (사용자마다 /home 가 존재) 7. 실행할 프로그램 (일반적으로 사용자의 로그인 쉘이 저장된다.)


o /etc/group 파일 구조 groupname:password:gid:members 1 2 3 4

- 각 필드의 구분자는 : 으로 구분되어 있다.

1. 그룹명 2. 그룹 비밀번호 (x로 되어 있다) 3. 그룹 번호 GID (기본그룹) 4. 그룹 멤버리스트 (여러 멤버가 존재할 때 , 로 구분한다)

e.g.) /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
disk:x:6:root
lp:x:7:daemon,lp
mem:x:8:
kmem:x:9:

* 눈여겨봐야 할 그룹들

[11:09:26@localhost ~]#egrep '^root|^wheel|users' /etc/group root:x:0:root wheel:x:10:root users:x:100: [11:09:33@localhost ~]#cat /etc/group | egrep '^root|wheel|users' root:x:0:root wheel:x:10:root users:x:100:


o /etc/shadow 파일 구조 - 각 필드의 구분자는 : 으로 구분되어 있다. - username:password:lastchange:mindays:maxdays:warndays:inactive:expire:flag 1 2 3 4 5 6 7 8 9 1. 사용자명 2. 암호화된 비밀번호 (역으로 풀 수 없다) 3. lastchange : 최근 비밀번호 변경일 (1970년 1월 1일 기준의 날짜 수 : timestamp) 4. mindays : 비밀번호 변경 후, 재설정을 위한 대기일 수 5. maxdays : 비밀번호 유효기간 (30이라면 30일 마다 비밀번호를 변경해야 한다) 6. warndays : 비밀번호 변경 경고 시간 7. inactive : 비밀번호 유효 기간 (5일이면, 5일에 한번은 들어가야 된다.) 8. expire : 비밀번호 만료 기간 이후 계정을 사용할 수 없게 되는 기간 9. flag : 나중에 사용하기 위해 예약으로 세팅되어 있고, 현재는 사용되지 않으며, 0으로 지정

e.g.) /etc/shadow
# head -5 /etc/shadow
root:$1$TDIRqvvY$jZWHAuWVqrxtWYhl33QUq/:16542:0:99999:7:::
bin:*:16512:0:99999:7:::
daemon:*:16512:0:99999:7:::
adm:*:16512:0:99999:7:::
lp:*:16512:0:99999:7:::

o 비밀번호 알고리즘을 변경하는 방법 - 비밀번호는 5.x 까지는 md5로 설정되어 있고 CentOS 6.5 는 sha512로 설정되어 있다. - md5 알고리즘은 약하고 sha512는 강력하다는 특징이 있다. 따라서 5.x 로 설치했다면 authconfig 명령어로 암호 알고리즘을 변경해주면 좋다. ($번호$ : 알고리즘 종류) authconfig --passalgo=md5 --update username:$1$salt$.....: ( MD5) authconfig --passalgo=sha256 --update username:$5$salt$.....: (sha256) authconfig --passalgo=sha512 --update username:$6$salt$.....: (sha512)


o 사용자의 홈디렉토리 
- 사용자의 홈디렉토리는 사용자가 시스템에 로그인을 사용하는 공간이다.
- 관리자가 사용자를 생성하면 시스템에 일반 사용자가 자료를 저장할 수 있는
  공간이 생성된다.
  특히 시스템에서는 오직 root(UID 0)만이 일반 사용자를 생성할 수 있다.

o 사용자의 홈디렉토리 경로
- 관리자의 홈디렉토리 경로 : /root
- 일반유저의 홈디렉토리 경로 : /home/사용자명 
사용자의 홈디렉토리가 /home 디렉토리에 위치하는 것은 아니고 다른 디렉토리에
위치할 수 있다. e.g.) /home1/ksw
사용자의 디렉토리를 /home 이 아닌 다른 디렉토리에 위치시키는 이유
- 사용자의 디렉토리 공간이 풀이 났을 때 


o 사용자의 디렉토리를 이동하는 방법

사용자의 홈디렉토리 root : /root linux : /home/linux unix : /home/unix windows : /home/windows freebsd : /home1/freebsd


# cd /home/linux O
# cd /home/freebsd  X


# cd ~linux O # cd ~freebsd O

~ : 그 사용자의 home 디렉토리를 나타낸다.

# cat /etc/default/useradd ... HOME=/home1 ... # useradd freebsd # cd /home/freebsd X # cd ~freebsd O ( /home1/freebsd ) linux, unix -> 홈디렉토리 & mail spool 파일 삭제 O # userdel -r linux # userdel -r unix # ls /home # ls -l /var/spool/mail/linux <-- 삭제 # ls -l /var/spool/mail/unix <-- 삭제 windows -> 홈디렉토리를 & mail spool 파일 삭제 X # userdel windows # ls /home kosw ksw lost+found windows ~~~~~~~ # ls -l /var/spool/mail/windows <-- 삭제안됨 *** 사용자를 생성하면 비밀번호가 부여되지 않으므로 *** 반드시 비밀번호도 생성해야 된다. *** 사용자는 오직 root (슈퍼유저 UID 0) 가 생성할 수 있고 *** 일반 유저는 생성할 수 없다. *** 하지만 /usr/sbin/useradd 명령어를 SET-UID 를 설정하고 *** 생성하면 생성할 수 있다. ( 사용하지 말 것!!!!) *** [root@localhost ~]# chmod 4755 /usr/sbin/useradd -c *** [root@localhost ~]# useradd admin *** [root@localhost ~]# su - admin *** [root@localhost ~]# /usr/sbin/useradd test1234


==============================================================================
LAB> 사용자를 생성하고 확인해보자.

Usage: useradd [options] LOGIN

!!! UID, GID 이전 사용자의 다음 번호로 부여받는다. !!!

(이 부분의 기본값은 그렇지만 변경하여 바꿀 수 있다)

# useradd user1 # useradd user2 # useradd user3 # grep ^user[1-3] /etc/{passwd,group,shadow} /etc/passwd:user1:x:502:502::/home/user1:/bin/bash /etc/passwd:user2:x:503:503::/home/user2:/bin/bash /etc/passwd:user3:x:504:504::/home/user3:/bin/bash /etc/group:user1:x:502: /etc/group:user2:x:503: /etc/group:user3:x:504: /etc/shadow:user1:!!:16119:0:99999:7::: /etc/shadow:user2:!!:16119:0:99999:7::: /etc/shadow:user3:!!:16119:0:99999:7::: ============================================================================== ============================================================================== LAB> 사용자를 삭제하고 확인해보자.

Usage: userdel [options] LOGIN
 -r, --remove			remove home directory and mail spool

- user1, user2 는 홈디렉토리, mail spool 파일까지 삭제

- mail spool 파일은 메일을 받을 수 있는 파일이다.(/var/spool/mail)

===> 권한을 설정하여 막아야 한다.(어떤 사용자가 있는지 확인할 수 있기 때문) # userdel -r user1 # userdel -r user2 # userdel user3 # ls /home user3 # rm -rf /home/user3 ==============================================================================

============================================================================== LAB> 사용자를 생성하고 삭제해보자. useradd,adduser : 사용자를 생성하는 명령어 userdel : 사용자를 삭제하는 명령어 /etc/passwd : 사용자의 정보가 들어있는 DB (text 형태로 저장) /etc/shadow : 사용자의 정보가 들어있는 DB (text 형태로 저장) /etc/group : 그룹에 대한 정보가 들어있는 DB (text 형태로 저장) Usage: useradd [options] LOGIN options : -r (홈디렉토리를 삭제한다.)

!!! 사용자 생성시 /etc/passwd, /etc/group, /etc/shadow 파일에 한 줄이 추가된다 !!!
!!! 사용자 삭제시 /etc/passwd, /etc/group, /etc/shadow 파일에 한 줄이 삭제된다 !!!

# useradd linux # useradd unix # useradd windows # tail -3 /etc/passwd # userdel -r linux # userdel -r unix # userdel windows # tail -3 /etc/passwd # ls /home <-- linux, unix, windows 사용자 디렉토리를 확인한다. <-- windows 사용자가 사용하던 디렉토리는 남아있다. ==============================================================================


============================================================================== LAB> 현재 Linux Box (현재 시스템) 에 사용자와 그룹의 개수를 확인해보자. # wc /etc/passwd 38 64 1802 /etc/passwd # echo 1234 > a.txt # ls -l a.txt ---------- 1 root root 5 Apr 24 12:53 a.txt # wc a.txt 1 1 5 a.txt # echo 5678 >> a.txt # ls -l a.txt ---------- 1 root root 10 Apr 24 12:53 a.txt # wc a.txt 2 2 10 a.txt # echo 0000 1111 >> a.txt # ls -l a.txt ---------- 1 root root 20 Apr 24 12:54 a.txt # wc a.txt 3 4 20 a.txt # cat a.txt 1234 5678 0000 1111 # wc -l a.txt 3 a.txt - Linux Box 에 38명의 사용자가 있는 것을 알 수 있다. # wc -l /etc/passwd 38 /etc/passwd # cat /etc/passwd | wc -l 38 - Linux Box 에 54개의 그룹이 있는 것을 알 수 있다. # wc -l /etc/group 54 /etc/group ==============================================================================


==============================================================================
LAB> 슈퍼유저 root 의 정보를 확인해보자.

# grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash

# awk /^root/ /etc/shadow
root:$1$e5ngkd97$VHmsVHxJ0W9WZgld/xXdX.:15959:0:99999:7:::

# head -1 /etc/group
root:x:0:root
==============================================================================


============================================================================== LAB> useradd의 다양한 옵션을 이용해서 사용자를 생성해보자. 형식 : # useradd Usage: useradd [options] LOGIN # LANG=C # useradd user2 # grep user2 /etc/{passwd,shadow,group} /etc/passwd:user2:x:507:507::/home/user2:/bin/bash /etc/shadow:user2:!!:15959:0:99999:7::: /etc/group:user2:x:507:

사용자를 처음 생성하면 자동으로 UID : 500 GID : 500 으로 생성되고 그 다음 사용자를

생성하면 /etc/passwd 마지막 사용자 다음 번호로 생성된다.

GID 는 UID 를 따른다.(UID를 기본 디폴트로 따르게 되어있다, 다른 UNIX, LINUX에서는 다를 수 있다.)

# useradd user3 # grep user3 /etc/{passwd,shadow,group} /etc/passwd:user3:x:508:508::/home/user3:/bin/bash /etc/shadow:user3:!!:15959:0:99999:7::: /etc/group:user3:x:508:


- /etc/passwd 필드의 옵션을 부여해서 사용자를 생성한다.
- username:password:uid:gid:comment:homedirectory:shell  
- user4:x:5000:5000:testuser:/home/linuxuser4:/bin/sh
-          -u   -g    -c          -d             -s

** 반드시 그룹을 생성한 뒤 유저 생성에서의 -g옵션을 사용할 수 있다. # userdel -r user4 # groupadd -g 5000 user4 # useradd -u 5000 -g 5000 -c testuser -d /home/linuxuser4 -s /bin/sh user4 # grep user4 /etc/{passwd,shadow,group} /etc/passwd:user4:x:5000:5000:testuser:/home/linuxuser4:/bin/sh /etc/shadow:user4:!!:15959:0:99999:7::: /etc/group:user4:x:5000: # grep user4 /etc/shadow user4:!!:15959:0:99999:7:::



\ + Enter : 명령어를 사용할 때 다음 라인으로 내려가서도 명령어를 입력할 수 있게 해준다.

#useradd \ 

> -u 7000 -g 9000 \

> -d /home/user1

# chage -l user4 Last password change : Sep 11, 2013 Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7 # chage user4 Changing the aging information for user4 Enter the new value, or press ENTER for the default Minimum Password Age [0]: 1 Maximum Password Age [99999]: 30 Last Password Change (YYYY-MM-DD) [2013-09-11]: 2013-09-20 Password Expiration Warning [7]: 5 Password Inactive [-1]: 20 Account Expiration Date (YYYY-MM-DD) [1969-12-31]: 2013-09-30

- 바뀐 정보를 볼 수 있지만 비밀번호는 아직 없다.
# grep user4 /etc/shadow
user4:!!:16575:1:30:5:20:16708:

# chage -l user4
마지막으로 열쇠글을 바꾼 날		: 5월 20, 2015
열쇠글 만료				: 6월 19, 2015
열쇠글이 비활성화 기간			: 7월 09, 2015
계정 만료				: 9월 30, 2015
열쇠글을 바꿀 수 있는 최소 날 수	: 1
열쇠글을 바꿔야 하는 최대 날 수		: 30
열쇠글 만료 예고를 하는 날 수		: 5

# passwd --stdin user4
Changing password for user user4.
12345
passwd: all authentication tokens updated successfully.

# grep user4 /etc/shadow
user4:$1$9iw1g.9x$MkwNjI9Icanzq.Y7NV4gF/:16549:1:30:5:20:16708:

# chage -l user4
마지막으로 열쇠글을 바꾼 날		: 4월 24, 2015
열쇠글 만료				: 5월 24, 2015
열쇠글이 비활성화 기간			: 6월 13, 2015
계정 만료				: 9월 30, 2015
열쇠글을 바꿀 수 있는 최소 날 수	: 1
열쇠글을 바꿔야 하는 최대 날 수		: 30
열쇠글 만료 예고를 하는 날 수		: 5

usermod 는 사용자의 /etc/passwd 정보를 수정하는 명령어다. 옵션은 useradd 옵션과 거의 동일하다. ==============================================================================

==============================================================================
LAB> usermod 를 이용해서 사용자 정보를 수정해보자.

usermod 는 사용자의 /etc/passwd 정보를 수정하는 명령어다.
옵션은 useradd 옵션과 거의 동일하다.

!!! 사용자 정보가 담겨있는 /etc/passwd 파일을 수정할려면 반드시 usermod, vipw 
!!! 명령어를 사용한다. vi 로는 /etc/passwd 를 수정하지 말고 가급적이면
!!! usermod, vipw 명령어를 이용하는 것이 좋다.
- user4 계정을 삭제한다. (-r 옵션이 있으므로 홈디렉토리까지 모두 삭제한다.)
# userdel -r user4

- uid 5000 에 해당하는 사용자 계정 user4를 생성한다. # useradd -u 5000 user4 # grep user4 /etc/passwd user4:x:5000:5000::/home/user4:/bin/bash

- user4 계정의 쉘을 /bin/bash -> /bin/sh 로 변경한다. # usermod -s /bin/sh user4 # grep user4 /etc/passwd user4:x:5000:5000::/home/user4:/bin/sh

- user4 계정의 설명문을 변경한다( 사용자가 많을 때 구분짓기 위한 코멘트를 추가) # usermod -c 010-4064-9225 user4 # grep user4 /etc/passwd user4:x:5000:5000:010-4064-9225:/home/user4:/bin/sh

- user4 계정의 기본그룹을 5000 -> 100 으로 변경한다. # usermod -g 100 user4 # grep user4 /etc/passwd user4:x:5000:100:010-4064-9225:/home/user4:/bin/sh

# su - user4
$ id
uid=5000(user4) gid=100(users) groups=100(users) ...
                ~~~~~~~~~~~~~~
$ exit

# usermod -g 5000 user4

$ id
uid=5000(user4) gid=5000(user4) groups=5000(user4) 
                ~~~~~~~~~~~~~~~

# usermod -d /tmp user4 # grep user4 /etc/passwd user4:x:5000:100:010-4064-9225:/tmp:/bin/sh ==============================================================================


** 언어 설정

LANG=C

chage -l user4


LANG=ko_KR.eucKR

chage -l user4


LANG=ko_KR.utf-8

chage -l user4


'Linux > 기타' 카테고리의 다른 글

cron#1  (0) 2015.04.28
quota  (0) 2015.04.27
프로세스#2  (0) 2015.04.23
프로세스#1  (0) 2015.04.22
퍼미션  (0) 2015.04.21