[Linux]사용자와 그룹 관리를 위한 리눅스 명령어 및 관련 파일들 총정리

Linux 사용자(user)와 그룹(group)을 관리하기 위한 명령어들과 함께 관련 파일/디렉토리에 대해 알아보겠습니다. 마지막으로 사용자를 자동 등록하고 임의로 생성한 비밀번호도 설정하는 Shell Script을 만들어 보겠습니다. Linux 서버 취약점 분석/조치법 중 “패스워드 복잡성 설정”도 참고하시기 바랍니다.

사용자 및 그룹 정보를 등록/수정/삭제하는 명령어로 root 계정으로 로그인하거나 sudo와 함께 사용

  • useradd : 사용자 신규 생성
  • usermod : 사용자의 쉘, 홈 디렉토리, 그룹, UID, GID 등을 변경
  • userdel : 사용자 삭제
  • newusers : batch로 사용자를 추가 또는 변경
  • passwd : 사용자 비밀번호 변경
  • pwconv : 비밀번호 관리를 /etc/shadow 파일로 전환할 때 사용
  • pwunconv : /etc/shadow 파일 비활성화 명령어, 비밀번호를 /etc/passwd 파일에 평문으로 저장
  • chage : 사용자 비밀번호 만료일 등을 지정
  • chfn : /etc/passwd 파일의 다섯 번째 항목 값인 코멘트 항목의 값을 설정
  • chsh : /etc/passwd 파일의 일곱 번째 항목 값인 Shell 항목의 값을 설정
  • groupadd : 그룹 신규 생성, Redhat계열은 사용자를 생성할 때 사용자 이름과 동일한 그룹을 생성
  • groupmod : 그룹의 이름 및 GID 변경
  • groupdel : 그룹 삭제
  • gpasswd : 그룹 비밀번호 변경

사용자 및 그룹 정보와 관련된 파일 및 디렉토리(/etc/ 디렉토리 아래 있음)

useradd [옵션] 사용자명

  • 사용자 계정 추가, UID = 0~65535 까지의 범위이고 신규는 1000부터 할당된다.
  • -D: 사용자 생성시 기본값 확인(/etc/default/useradd 정보 출력)
    -u uid: uid 지정
    -o: uid 중복 허용
    -g gid: gid 
    -G group1,group2: 기본그룹이외에 추가로 그룹에 속하게 할 경우에 쓴다.
    -N: 사용자와 동일한 이름으로 그룹을 생성하지 않는다
    -b: 베이스 디렉토리 지정
    -d: 홈 디렉토리 지정
    -m: 지정된 홈 디렉토리가 없다면 신규 생성
    -M: 홈 디렉토리를 생성하지 않는다
    -s: 기본 쉘 지정
    -e yyyy-dd-dd: 사용자 계정의 만료일 지정
    -f 일수: 비밀번호 만료일 이후 사용자 유효기간 설정
    -p: 사용자 계정의 패스워드 지정(암호화된 값으로 지정)
    -r: 시스템 계정 생성 
    

usermod [옵션] 사용자명

  • 사용자의 쉘, 홈 디렉토리, 그룹, UID, GID 등을 변경
  • -d new홈디렉토리: 홈 디렉토리 변경(--home)
    -u uid: 사용자 uid 변경
    -o: uid 중복 허용
    -l new사용자명: 지정한 new사용자명으로 변경(`groupmod -n new그룹명 그룹명` 참고)
    -g gid: 사용자 그룹 변경
    -G gid: 지정한 그룹(gid)의 일원으로 추가(==`gpasswd -a 사용자 그룹명`)
    -s 쉘경로: 로그인 쉘 변경(예, /bin/sh)
    -L: 사용자 암호 잠금(passwd -l)
    -U: 사용자 암호 잠금 해제(passwd -u)
    -aG gid: 사용자를 부가그룹(Supplementary group)에 추가
    -m: -d 옵션과 함께 사용하면 홈 디렉토리를 변경하면서 기존 파일도 이동(--move-home)
    -e yyyy-mm-dd: 만료일 지정
    

userdel [옵션] 사용자명

  • 사용자 계정을 삭제
  • 지정한 사용자가 생성한 모든 파일/디렉토리를 삭제하고 싶다면, `find / -user 사용자 -exec rm -rf{} \;` 실행
  • -r: 지정된 사용자의 홈 디렉토리와 메일 스풀도 함께 삭제
    -f: 지정된 사용자가 로그인되어 있더라도 강제 삭제
    

newusers [옵션] 파일명

  • /etc/passwd 파일과 동일한 형식으로 신규 사용자 정보를 포함한 파일 생성
  • UID, GID, Home Directory와 Login Shell 필드가 입력되지 않으면 Linux 설정값을 따른다
  • [/etc/passwd 및 /etc/group 파일 확인] 
    cat /etc/passwd | grep testuser 
    cat /etc/group | grep -P "1100|1101" 
    developers:x:1100: 
    designers:x:1101: 
    [사용자 등록 파일 생성]
    -아래 예제 파일에 등록된 GID 1100와 1101를 가진 그룹은 이미 생성되어 있다.
    vi /root/users.txt 
    testuser1:test1@1234:600:1100:Developer User1,testuser1@test.com:/home/tester1:/bin/bash
    testuser2:test2@1234:601:1101:::/bin/bash
    testuser3:test3@1234:::::/sbin/nologin
    testuser4:test4@1234::::/home/tester4:/bin/tsh
    newusers /root/users.txt
    cat /etc/passwd | grep testuser
    testuser1:x:600:1100:Developer User1,testuser1@test.com:/home/tester1:/bin/bash
    testuser2:x:601:1101:::/bin/bash
    testuser3:x:1004:1004:::/sbin/nologin
    testuser4:x:1005:1005::/home/tester4:/bin/tsh
    

passwd [옵션] 사용자명

  • 사용자의 비밀번호 및 비밀번호와 관련된 기간들 변경
  • -d: 비밀번호 삭제, 비밀번호 없이 로그인 가능
    -e: 비밀번호 만료, 다음 로그인 시 비밀번호 변경(==`chage -d 0 사용자명`)
    -S: 지정한 사용자의 비밀번호 상태 출력
    -l: 지정한 사용자의 비밀번호 Lock, unlock할 때까지 로그인 불가(==`usermod -L 사용자명`)
    -u: 지정한 사용자의 비밀번호 Unlock(==`usermod -U 사용자명`)
    -n 숫자: 지정한 기간(日) 이내에는 비밀번호 변경 불가(==`chage -m 사용자명`)
    -x 숫자: 지정한 기간(日) 동안 비밀번호 사용(==`chage -M 사용자명`)
    -w 숫자: 지정한 기간(日) 전부터 만료 前 비밀번호 변경 경고(==`chage -W 사용자명`)
    -i 숫자: 지정한 기간(日) 동안 비밀번호 만료 후에도 유예(==`chage -I 사용자명`, ==`usermod -f 사용자명`)
    
  • 사용자의 비밀번호를 변경하려면 옵션없이 사용자명만 지정하면 된다
  • cat /etc/passwd | grep archer
    archer:x:1003:1003::/home/archer:/bin/bash
    passwd archer
    Changing password for user archer.
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    

chage [옵션] 사용자명

  • `passwd` 명령어와 유사한 기능을 수행하며 주로 이 명령으로 비밀번호와 관련된 기간을 지정
  • -l: 비밀번호 만료 정보 출력(--list)
    -d 숫자|날짜: 마지막 비밀번호 변경일. '-d 0' 옵션은 다음 로그인 시 비밀번호를 변경(==`passwd -e 사용자명`)
    -m 숫자: 변경가능 최소 기간(min day)
    -M 숫자: 변경가능 최대 기간(max day)
    -W 숫자: 만료 전 경고 메세지가 표시되는 기간(warning day)
    -I 숫자: 계정 만료 후 유예기간(inactive). '-I -1' 옵션을 실행하면 유예기간이 삭제됨
    -E 숫자|날짜: 계정이 만료되는 날을 설정, '-E -1' 옵션을 실행하면 만료일이 삭제됨
    

chfn [옵션] 사용자명

  • 사용자의 정보를 설정하거나 변경하는 명령어, 사용자의 실제 이름, 직장, 집, 전화번호 등의 정보를 입력하거나 변경할 수 있는 명령어
  • 옵션없이 실행하면 대화식으로 Name [], Office [], Office Phone [], Home Phone [] 입력
    -f: 실제 이름
    -o: 사무실 번호
    -p: 사무실 전화번호
    -h: 집 전화번호
    

chsh [옵션] 사용자명

  • 시스템이 지원하는 쉘 목록을 출력하거나 사용자별 사용하는 shell을 변경하는 명령어
  • 현재 로그인한 사용자가 사용하는 쉘 확인 : `echo $SHELL` 또는 `printevn SHELL`
  • -l: 사용자명 지정없이 실행하면 /etc/shells 파일 내용 출력
    -s shell이름: 사용자의 로그인 쉘 변경
    

groupadd [옵션] 그룹명

  • Redhat 계열은 사용자를 생성할 때 사용자 이름과 동일한 그룹을 생성
  • 사용할 경우는 많지 않으나 관리목적으로 그룹을 신규 생성
  • -f: 그룹을 생성할 때 이미 생성되어 있더라도 성공으로 간주
    -r: 시스템 그룹 생성, /etc/login.defs 파일의 SYS_GID_MIN ~ SYS_GID_MAX 사이의 값 선택
    -g gid: GID 지정
    -o: GID 중복 허용
    

groupmod [옵션] 그룹명

  • 사용자 그룹의 이름 및 GID 변경
  • -g gid: 지정한 GID로 변경
    -o: GID 중복 허용(--non-unique)
    -n new그룹명: 지정한 new그룹명으로 변경(--new-name)(`usermod -l new사용자명 사용자명` 참고)
    

groupdel [옵션] 그룹명

  • 그룹 삭제
  • -f: Primary 사용자 그룹이더라도 삭제
    

gpasswd [옵션] 그룹명

  • /etc/group 파일과 /etc/gshadow 파일을 관리하는 명령어
  • 옵션을 입력하지 않으면 그룹의 비밀번호를 입력/변경하는 prompt 출력
  • -a 사용자: 지정한 사용자를 그룹의 멤버로 추가(--add) (== `usermod -G 그룹명 사용자명`)
    -d 사용자: 지정한 사용자를 그룹의 멤버에서 삭제(--delete)
    -r: 지정한 <그룹>의 비밀번호 삭제(비밀번호 '')(--remove-password) (`passwd -d 사용자명` 참고)
    -A 사용자1,,사용자n: 지정한 사용자들를 그룹의 관리자로 지정(--administrators), 기존 관리자 삭제
    -M 사용자1,,사용자n: 지정한 사용자들를 그룹 멤버로 설정(--members), 기존 멤버 삭제
    -R: 그룹에의 접근을 제한(비밀번호 '!')(--restrict) (`passwd -l 사용자명` 참고)
        암호를 가진 그룹 멤버들만이 `newgrp` 명령어를 통해서만 지정한 그룹으로 join 가능
    

/etc/passwd 파일

  • pwck 명령어를 사용하여 잘못된 내용이 있는지 점검
  • vipw 명령어로 /etc/passwd 파일 편집
  • [필드설명]
    user:password:uid:gid:GECOS_Field:/path/to/home_directory:/bin/loginshell
    #1 : 사용자명
    #2 : 패스워드("x"가 표시되어 있으면 /etc/shadow파일에 저장되어 있다, shadow password 사용)
    #3 : 사용자 계정 uid
    #4 : 사용자 계정 gid
    #5 : 사용자 설명(GECOS필드)
    #6 : 사용자 계정 홈 디렉토리
    #7 : 사용자 계정 로그인 쉘(사용자의 로그인 제한을 위해서는 셀 설정을 /sbin/nologin으로 변경)
    

/etc/shadow 파일

  • 사용자의 암호화된 비밀번호 저장
  • passwd 명령어나 chage 명령어로 변경
    [필드설명]
    #1 : 사용자명
    #2 : 패스워드, $6$는 패스워드를 암호화하기 위해 사용한 해시 알고리즘을 의미($6$ = SHA-512)
         /etc/login.defs 파일의 "ENCRYPT_METHOD SHA512"
         "*" - 패스워드가 잠긴 상태로 패스워드 로그인은 불가하지만, 별도의 인증 방식을 사용하여(예, ssh 인증키) 로그인 가능
         "!!" - 패스워드가 잠긴 상태로 모든 로그인이 불가능하다. 사용자 생성 후 패스워드를 설정하지 않는 상태.
         빈값 - 패스워드를 설정하지 않은 상태로 패스워드 없이 로그인이 가능
    #3 : 마지막 변경일(1970년1월1일 이후 계산한 값)
    $4 : 최소 변경기간
    #5 : 최대 변경기간
    #6 : 만료 경고기간
    #7 : 유예기간(패스워드 만료후 계정 비활성 기간)
    #8 : 만료일(1970년1월1일 이후 계산한 값)
    #9 : 예약 필드
    

/etc/group 파일

  • grpck 명령어를 사용하여 잘못된 내용이 있는지 점검
  • vigr 명령어로 /etc/group 파일 편집
  • [필드설명]
    #1: 그룹명
    #2: 그룹 비밀번호("x"로 표시되어 있으면 /etc/gshadow 파일에 비밀번호 저장)
    #3: GID
    $4: 부가그룹 멤버 목록(/etc/passwd 파일에 있는 #4 GID는 주 그룹을 의미)
    

/etc/gshadow 파일

  • 그룹의 암호화된 비밀번호 저장
  • `grpck` 명령어를 사용하여 그룹 비밀번호 점검
  • [필드설명]
    #1: 그룹명
    #2: 암호화된 그룹 비밀번호
    #3: 그룹 관리자(gpasswd -A 명령어 참고)
    #4: 멤버 목록(gpasswd -a, usermod -aG 명령어 참고)
    

/etc/login.defs 파일

  • 패스워드 변경주기, 홈 디렉토리 생성여부, UID 및 GID의 범위, umask, 디폴트 암호화 해시 알고리즘 등을 저장
  • [주요 지시자]
    MAIL_DIR        /var/spool/mail
    PASS_MAX_DAYS   99999
    PASS_MIN_DAYS   0
    PASS_MIN_LEN    5
    PASS_WARN_AGE   7
    CREATE_HOME     yes
    UMASK           022
    ENCRYPT_METHOD SHA512
    

/etc/default/useradd 파일

  • useradd 명령어로 신규 사용자 생성할 때 사용하는 디폴트 값 지정
  • useradd -D 명령어로 내용 출력
  • vi /etc/default/useradd 
    # useradd defaults file 
    GROUP=100 
    HOME=/home 
    INACTIVE=-1 
    EXPIRE= 
    SHELL=/bin/bash 
    SKEL=/etc/skel 
    CREATE_MAIL_SPOOL=yes 
    

/etc/default/sudoers 파일

  • visudo 명령어로 편집
  • 지정형식: hostname=(runas-user:runas-group) [NOPASSWORD:]commands
    
    #root 사용자는 모든 호스트에서 모든 사용자의 모든 명령어를 실행
    root    ALL=(ALL)  ALL
    
    #wheel사용자 그룹에 속한 사용자는  모든 호스트에서 모든 사용자의 모든 명령어를 "비밀번호 없이" 실행
    %wheel  ALL=(ALL)  NOPASSWD: ALL
    
    #users 사용자 그룹에 속한 사용자는 /mnt/cdrom 디렉터리에 마운트와 언마운트 가능
    %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
    
    #users 사용자 그룹에 속한 사용자는 로컬호스트에서 시스템 중지 가능
    %users  localhost=/sbin/shutdown -h now
    

/etc/skel/ 디렉토리

  • useradd 명령으로 신규 사용자 등록 시 디폴트로 제공하는 파일 및 디렉토리가 저장되어 있으며 사용자의 홈 디렉토리에 복사된다
  • ls -al /etc/skel/ 
    total 24 
    drwxr-xr-x.   3 root root   78 Jun  1 09:09 . 
    drwxr-xr-x. 142 root root 8192 Jun  1 23:20 .. 
    -rw-r--r--.   1 root root   18 Apr  8  2022 .bash_logout 
    -rw-r--r--.   1 root root  141 Apr  8  2022 .bash_profile 
    -rw-r--r--.   1 root root  376 Apr  8  2022 .bashrc 
    drwxr-xr-x.   4 root root   39 Jun  1 09:08 .mozilla
    

Shell Script를 이용한 사용자 등록

vi createUser.sh
#!/bin/bash
set -e

NEWUSR=$1
#PASSWD=$(date | md5sum | cut -c1-8)
PASSWD=$(tr -dc A-Za-z0-9_ < /dev/urandom  | head -c8 | xargs)

echo "The password of user '${NEWUSR}' : $PASSWD"

useradd -m -U $NEWUSR
#echo -e "$PASSWD\n$PASSWD" | passwd $NEWUSR
echo "$PASSWD" | passwd --stdin $NEWUSR
passwd -n 7 -x 30 -w 7 $NEWUSR

chmod 755 ./createUser.sh

./createUser.sh testuser
The temporary password of user 'testuser' : YsCOd1vV
Changing password for user testuser.
passwd: all authentication tokens updated successfully.
Adjusting aging data for user testuser.
passwd: Success

cat /etc/passwd | grep testuser 
testuser:x:1001:1001::/home/testuser:/bin/bash

함께 읽어보면 좋은 Contents

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다