Monday, March 19, 2018

CentOS 6.6 리눅스 기초] 8. 사용자 계정 관리 (2)


■ 사용자 계정 관리 명령

□ useradd

이 명령은 사용자 계정을 생성하기 위해 사용되는 명령이다.

1). 명령형식

useradd [옵션] <사용자 계정 이름>

2). 옵션

옵 션
내 용
 -u UID
 UID는 사용자를 식별하기 위해 사용되는 숫자 값. 인간으로 치면 주민번호나 사회보장번호로 볼 수 있다. 관리자가 직접 사용자 UID 값을 입력하기 위해 이 옵션을 사용한다.
-g GID
 GID는 그룹을 식별하기 위해 사용되는 숫자 값이다. 관리자가 직접 GID 값을 입력하기 위해 이 옵션을 사용한다.
-G GID
 사용자는 주 그룹외에도 다른 그룹의 멤버가 될 수 있다. 그래서 2차 그룹을 명시하기 위해 이 옵션을 사용한다.
 -s 쉘경로
 사용자의 기본 셸을 지정하기 위해 사용하는 옵션이다. 쉘 경로는 절대 경로를 사용한다. 이 옵션을 사용하지 않으면 기본 셸은 bash 쉘로 설정된다.
 -c Comment
 인증된 사용자에게 파일 또는 프로그램 사용에 대한 권한 유무를 판단, 권한에 따라 사용 기능이 제한됨
-d 홈디렉터리
 사용자의 파일들이 저장될 홈 디렉터리 명을 명시하기 위해 사용하는 옵션이다. 이를 사용하지 않을 경우 기본 홈 디렉터리는 '/home/사용자 계정 이름'으로 설정된다.
 -e 만료일자
 임시적으로 사용하는 계정일 경우 만료 일자를 지정하여 그날 이후에 자동으로 계정이 잠기도록 만들 때 사용한다. 날짜 형식은 CCYY-MM-DD이다.
 -f 비활동일수
 지정한 일수 동안 시스템에 접속하지 않으면 자동으로 계정을 잠그기 위해 사용하는 옵션이다.  계정 암호 만료 기간과 관련되어 있다.
-D
 기본 설정값을 확인하거나 설정하기 위해 사용하는 옵션이다.
 -o
 중복된 UID 값을 설정하기 위해 사용한다. 하지만 밖에서는 사용하지 않는다. 사용하면 맞는다. -.-
-k Skel디렉터리
 계정 생성 시 초기화 파일이 있는 디렉터리를 지정하기 위해 지정하기 위해 사용하는 옵션이다. 그러면 그곳에 있는 파일을 사용자 홈 디렉터리로 자동으로 복사한다.



3). 예제

아래는 /bin 디렉토리에 있는 사용할 수 있는 사용자 쉘을 확인하고 skel 디렉토리에 .sunguru 파일을 만드는 것을 보여준다.

[root@centos01 ~]# ls -l /bin/*sh
-rwxr-xr-x. 1 root root 940416 2014-10-16 22:56 /bin/bash
lrwxrwxrwx. 1 root root      4 2018-03-20 01:27 /bin/csh -> tcsh
-rwxr-xr-x. 1 root root 109672 2012-10-17 16:48 /bin/dash
lrwxrwxrwx. 1 root root      4 2018-03-20 01:24 /bin/sh -> bash
-rwxr-xr-x. 1 root root 387328 2013-02-22 13:19 /bin/tcsh
[root@centos01 ~]# ls -la /etc/skel
합계 36
drwxr-xr-x.   4 root root  4096 2018-03-20 01:25 .
drwxr-xr-x. 113 root root 12288 2018-03-20 09:03 ..
-rw-r--r--.   1 root root    18 2014-10-16 22:56 .bash_logout
-rw-r--r--.   1 root root   176 2014-10-16 22:56 .bash_profile
-rw-r--r--.   1 root root   124 2014-10-16 22:56 .bashrc
drwxr-xr-x.   2 root root  4096 2010-11-12 10:04 .gnome2
drwxr-xr-x.   4 root root  4096 2018-03-20 01:24 .mozilla
[root@centos01 ~]# touch /etc/skel/.sunguru
[root@centos01 ~]# 



아래는 useradd 명령으로 user3 사용자 계정을 만드는 것을 보여준다. 그리고 user3 사용자 디렉토리에 쉘의 초기화 파일과 .sunguru 파일이 복사된 것을 확인 할 수 있다.

[root@centos01 ~]# grep user[12] /etc/passwd
user1:x:500:602::/home/user1:/bin/bash
user2:x:501:501::/home/user2:/bin/bash
[root@centos01 ~]# 
[root@centos01 ~]# grep group[12] /etc/group
group1:x:500:
group2:x:600:
[root@centos01 ~]# useradd -m -k /etc/skel -u 502 -g group1 -s /bin/tcsh -d /home/user3 user3
[root@centos01 ~]# 
[root@centos01 ~]# egrep "user[1-3]|group[12]" /etc/passwd /etc/group
/etc/passwd:user1:x:500:602::/home/user1:/bin/bash
/etc/passwd:user2:x:501:501::/home/user2:/bin/bash
/etc/passwd:user3:x:502:500::/home/user3:/bin/tcsh
/etc/group:group1:x:500:
/etc/group:group2:x:600:
/etc/group:user1:x:602:
/etc/group:user2:x:501:
[root@centos01 ~]# 
[root@centos01 ~]# ls -a /home/user3
.  ..  .bash_logout  .bash_profile  .bashrc  .gnome2  .mozilla  .sunguru
[root@centos01 ~]# 

아래는 useradd 명령으로 user4, user5 사용자 계정을 만드는 것을 보여준다. -o 옵션을 사용하여 중복된 504 UID를 사용한 것을 확인 할 수 있다.

[root@centos01 ~]# useradd -m -k /etc/skel -u 504 -g group2 -s /bin/tcsh -d /home/user4 user4
[root@centos01 ~]# useradd -m -k /etc/skel -o -u 504 -g group2 -s /bin/tcsh -d /home/user5 user5
[root@centos01 ~]# 
[root@centos01 ~]# egrep "user[1-5]|group[12]" /etc/passwd /etc/group
/etc/passwd:user1:x:500:602::/home/user1:/bin/bash
/etc/passwd:user2:x:501:501::/home/user2:/bin/bash
/etc/passwd:user3:x:502:500::/home/user3:/bin/tcsh
/etc/passwd:user4:x:504:600::/home/user4:/bin/tcsh
/etc/passwd:user5:x:504:600::/home/user5:/bin/tcsh
/etc/group:group1:x:500:
/etc/group:group2:x:600:
/etc/group:user1:x:602:
/etc/group:user2:x:501:
[root@centos01 ~]# 

아래는 계정생성시 연속된 비활동 일수를 계산하여 만약 이를 넘길 시 자동으로 계정이 잠기도록 -f 옵션을 사용하였다. 적용된 일 수는 7일이다. 그리고 계정사용 만료일자를 적용하기 위해 -e옵션을 사용한 것을 확인 할 수 있다. 또한 passwd 명령을 사용하여 user6 사용자 계정의 암호를 설정한 것을 알 수 있다.




□ usermod

존재하는 사용자 계정 정보를 변경하기 위해 사용하는 명령이다.

1). 명령형식

usermod [옵션] <username>

2). 옵션


옵 션
내 용
 -u UID
 UID는 사용자를 식별하기 위해 사용되는 숫자 값. 인간으로 치면 주민번호나 사회보장번호로 볼 수 있다. 관리자가 직접 사용자 UID 값을 입력하기 위해 이 옵션을 사용한다.
-g GID
 GID는 그룹을 식별하기 위해 사용되는 숫자 값이다. 관리자가 직접 GID 값을 입력하기 위해 이 옵션을 사용한다.
-G GID
 사용자는 주 그룹외에도 다른 그룹의 멤버가 될 수 있다. 그래서 2차 그룹을 명시하기 위해 이 옵션을 사용한다.
 -s 쉘경로
 사용자의 기본 셸을 지정하기 위해 사용하는 옵션이다. 쉘 경로는 절대 경로를 사용한다. 이 옵션을 사용하지 않으면 기본 셸은 bash 쉘로 설정된다.
 -c Comment
 인증된 사용자에게 파일 또는 프로그램 사용에 대한 권한 유무를 판단, 권한에 따라 사용 기능이 제한됨
-d 홈디렉터리
 사용자의 파일들이 저장될 홈 디렉터리 명을 명시하기 위해 사용하는 옵션이다. 이를 사용하지 않을 경우 기본 홈 디렉터리는 '/home/사용자 계정 이름'으로 설정된다.
 -e 만료일자
 임시적으로 사용하는 계정일 경우 만료 일자를 지정하여 그날 이후에 자동으로 계정이 잠기도록 만들 때 사용한다. 날짜 형식은 CCYY-MM-DD이다.
 -f 비활동일수
 지정한 일수 동안 시스템에 접속하지 않으면 자동으로 계정을 잠그기 위해 사용하는 옵션이다.  계정 암호 만료 기간과 관련되어 있다.
-l newname
 사용자 계정 이름을 변경하기 위해 사용되는 옵션이다. 
 -o
 중복된 UID 값을 설정하기 위해 사용한다. 하지만 밖에서는 사용하지 않는다. 
-L
 사용자 계정을 잠그기 위해 사용하는 옵션이다. 
 -o
 사용자 계정 잠금을 풀기 위해 사용하는 옵션이다.
 -o
 사용자 홈 디렉터리 내용을 새로운 위치로 옮기기 위해 사용하는 옵션이다. -d와 같이 사용한다.

3). 예제

아래는 usermod 명령을 사용하여 UID와 GID(그룹) 그리고 사용자 기본 셸을 변경하였다. 또한 -c 옵션을 사용하여 사용자에 대한 간략한 설명을 입력하였으며 user7이던 사용자 이름을 juli로 변경하고 사용자 홈 디렉터리를 /home/juli 이름으로 변경하였다.

[root@centos01 ~]# grep user7 /etc/passwd /etc/shadow
/etc/passwd:user7:x:506:500::/home/user7:/bin/bash
/etc/shadow:user7:!!:17610:0:99999:7:7:17166:
[root@centos01 ~]#
[root@centos01 ~]# usermod -u 603 -g group2 -s /bin/tcsh user7
[root@centos01 ~]#
[root@centos01 ~]# grep user7 /etc/passwd /etc/shadow
/etc/passwd:user7:x:603:600::/home/user7:/bin/tcsh
/etc/shadow:user7:!!:17610:0:99999:7:7:17166:
[root@centos01 ~]#
[root@centos01 ~]# usermod -c "Juli Emilia" -l juli -m -d /home/juli user7
[root@centos01 ~]#
[root@centos01 ~]# ls -F /home
juli/  user1/  user2/  user3/  user4/  user5/  user6/
[root@centos01 ~]#
[root@centos01 ~]# grep user7 /etc/passwd /etc/shadow
[root@centos01 ~]# grep juli /etc/passwd /etc/shadow
/etc/passwd:juli:x:603:600:Juli Emilia:/home/juli:/bin/tcsh
/etc/shadow:juli:!!:17610:0:99999:7:7:17166:
[root@centos01 ~]# 

□ userdel

사용자 계정을 삭제하기 위해 사용하는 명령이다.

1). 명령형식

userdel [옵션] <username>

2). 옵션

옵 션
내 용
 -r
 사용자 홈 디렉터리도 같이 삭제를 하기 위해 사용하는 옵션이다.

3). 예제 

아래는 user6과 juli 사용자 계정을 삭제하는 것을 보여준다. -r 옵션을 사용하여 계정을 삭제하면 사용자 홈디렉토리도 삭제된다는 것을 유의 깊게 관찰하자.
[root@centos01 ~]# egrep "user6|juli" /etc/passwd /etc/shadow
/etc/passwd:user6:x:505:500::/home/user6:/bin/bash
/etc/passwd:juli:x:603:600:Juli Emilia:/home/juli:/bin/tcsh
/etc/shadow:user6:$6$iBNrQ3oH$Qqq4mzdKGT.Q3Y66ol8pPRj/Sb/Pc8PFLSXO8nAvRdMAKRPabmA8NZHIALsmAQh55BL0wY4Moyc/zdjT7N3JO/:17610:0:99999:7:7::
/etc/shadow:juli:!!:17610:0:99999:7:7:17166:
[root@centos01 ~]#
[root@centos01 ~]# ls -ld /home/user6 /home/juli
drwx------. 4 juli  group2 4096 2018-03-20 11:06 /home/juli
drwx------. 4 user6 group1 4096 2018-03-20 11:05 /home/user6
[root@centos01 ~]#
[root@centos01 ~]# userdel user6
[root@centos01 ~]# userdel -r juli
[root@centos01 ~]#
[root@centos01 ~]# egrep "user6|juli" /etc/passwd /etc/shadow
[root@centos01 ~]#
[root@centos01 ~]# ls -ld /home/user6 /home/juli
ls: cannot access /home/juli: 그런 파일이나 디렉터리가 없습니다
drwx------. 4 505 group1 4096 2018-03-20 11:05 /home/user6
[root@centos01 ~]# 




□ dup.sh

솔라리스에서는 중복 UID를 사용하는 계정에 대한 정보를 확인하는 명령이 있는데 CentOS 리눅스는 저가 못 찾는 것인지 아니면 없는 것인지 모르겠네요. 적은 수의 계정이 있다면 cat 또는 more 명령으로 /etc/passwd나 /etc/group 파일을 눈으로 확인할 수 있지만 계정이 수백 개 넘어가면 눈알이 돌아갈 수도 있습니다.

그래서 사용자와 그룹에 대한 중복 ID를 확인할 수 있는 스크립트를 그냥 만들었습니다.

답답한 것은 못 참아서. 저는 특별한 사항이 없는 이상 중복 ID가 존재하면 시스템 해킹으로 간주합니다. 특히 root 계정이 아닌 UID가 0인 다른 계정이 있다면 담당자랑 이것에 대해 심각하게 이야기하죠. 밀어야 되나? 먼저 이놈 잡고 밀어야 되나? 그러면 시스템 프로세스부터 시작해서 해변에서 동전 찾듯 시스템을 점검해야 함. -_-;;

# vi /sbin/dup.sh

#!/bin/sh
# created by sunguru
# Blog :http://blog.naver.com/sunguru

echo -n "어떤 계정의 중복을 확인하시곘습니까? 1.사용자 2.그룹
1 또는 2를 선택하세요. : "

read NUMBER

case $NUMBER in
1)

DUP_UID_NUM1=`awk -F: '{print $3}' /etc/passwd | sort | uniq -d`
DUP_UID_NUM2=`awk -F: '{print $3}' /etc/passwd | sort | uniq -d |wc -w`

if [ $DUP_UID_NUM2 -eq 0 ]
then
 echo "중복된 사용자가 없습니다."
else
 for Y in $DUP_UID_NUM1
          do
     awk -F: '$3 == '"${Y}"'{print $1, $3}' /etc/passwd
   done
fi
;;

2)

DUP_GID_NUM1=`awk -F: '{print $3}' /etc/group | sort | uniq -d`
DUP_GID_NUM2=`awk -F: '{print $3}' /etc/group | sort | uniq -d | wc -w`

if [ $DUP_GID_NUM2 -eq 0 ]
then
 echo "중복된 그룹이 없습니다."
else
 for Y in $DUP_GID_NUM1
          do
     awk -F: '$3 == '"${Y}"'{print $1, $3}' /etc/group
   done
fi
;;

*)
echo "잘못 입력하셨습니다."
;;
esac

# chmod 500 /sbin/dup.sh

야래는 dup.sh 쉘 스크립트 파일 실행 결과입니다. 만약 중복된 ID가 없다면 없다는 결과값을 출력합니다.

[root@centos01 ~]# ls -l /sbin/dup.sh
-r-x------. 1 root root 927 2018-03-20 11:36 /sbin/dup.sh
[root@centos01 ~]#
[root@centos01 ~]# dup.sh
어떤 계정의 중복을 확인하시곘습니까? 1.사용자 2.그룹
1 또는 2를 선택하세요. : 1
user4 504
user5 504
[root@centos01 ~]# dup.sh
어떤 계정의 중복을 확인하시곘습니까? 1.사용자 2.그룹
1 또는 2를 선택하세요. : 2
중복된 그룹이 없습니다.
[root@centos01 ~]# 





No comments:

Post a Comment