본문으로 바로가기

리눅스 시스템에서 계정을 관리하는 사용자를 추가하고 삭제하고, 수정하는 방법에 대하여 알아봅니다.

현재의 리눅스 배포판들은 계정을 추가하는 명령어인 useradd와 adduser의 그 쓰임이 다를수 있다는 것을 인지해야 한다.

사용자추가 - useradd

일반적인 리눅스 배포판들은 useradd와 adduser가 심볼릭 링크로 그 사용법이 같다.

useradd paul

[옵션]

  • -c : 간단한 사용자설명 코멘트를 등록한다. 주로 이름이나 사무실명등을 입력
  • -d : 생성하는 계정사용자의 홈디렉토리위치지정 (ex. -d /home/paul)
  • -e : 생성하는 계정의 사용종료일자 지정 (ex. -e 2013-12-31)
  • -f : 생성하는 계정의 패스워드 유효일자 지정 (ex. -f -30 , 앞으로 30일동안 유효한 계정)
  • -g : 생성하는 계정의 로그인 그룹, 지정하지 않을경우 자동으로 사용자명과 같은 그룹생성
  • -G : 생성하는 걔정의 추가등록 계정의 그룹명, 여러개일경우 , 로 구분. 지정하여도 사용자명과 같은 그룹은 자동으로 생성
  • -p : 생성하는 계정의 패스워드 지정
  • -s : 생성하는 계정의 로그인쉘 (기본값 /bin/bash)
  • -u : 생성하는 계정의 UID 지정 (ex. -u 1000)

Debian / ubuntu 계열에서의 특이점

데비안과 우분투 시스템에서는 useradd와 adduser의 쓰임새가 다르다. adduser 명령어는 비밀번호, 홈 디렉토리, 계정정보등을 입력을 받아 생성하는 대화식(Dialog) 명령이다. useradd 명령어로 계정을 생성하면 홈 디렉토리도 생성되지 않고 쉘도 sh를 사용한다.

useradd -D

useradd로 생성되는 것들의 기본값들을 설정하는 명령어이다. /etc/default/useradd에 이 설정값들이 저장되어 있으며 이를 직접 수정해도 된다. useradd -D 는 이 파일의 설정값을 변경한다.

useradd -D

  GROUP=100
  HOME=/home
  INACTIVE=-1
  EXPIRE=
  SHELL=/bin/bash
  SKEL=/etc/skel
  CREATE_MAIL_SPOOL=yes

홈디렉토리를 /usr 로 변경

useradd -D -b /usr 

기본쉘을 /bin/sh(본쉘)로 변경

useradd -D -s /bin/sh

계정이 생성되면 기본적으로 GID가 100인 users라는 그룹에 소속되는데 이를 변경

useradd -D -g 510

EXPIRE, 계정만료일을 지정

useradd -D -e 2013-12-31

생성한 계정 확인

/etc/passwd - paul 의 계정정보

grep paul /etc/passwd

  paul:x:500:500::/home/paul:/bin/bash

/etc/shadow - paul의 패스워드와 aging(계정 만료일,패스워드 유효일) 정보제목

grep paul /etc/shadow

  paul:$6$ot93LKo6$/XWvlUujWoIIRgal4o4qY13M3GEyf41e8NXalh2xES80jy.:15857:0:99999:7:::

/etc/group - paul 의 그룹정보

grep paul /etc/group

  paul:x:500:

/home/paul 확인 - 홈디렉토리

ls -la

  합계 20
  drwx------  2 paul paul 4096 2013-06-02 07:30 .
  drwxr-xr-x. 5 root root 4096 2013-06-02 07:30 ..
  -rw-r--r--  1 paul paul   18 2013-02-22 06:09 .bash_logout
  -rw-r--r--  1 paul paul  176 2013-02-22 06:09 .bash_profile
  -rw-r--r--  1 paul paul  124 2013-02-22 06:09 .bashrc

/var/spool/mail - 메일박스로 사용될 파일, 즉 paul 에게 도착한 메일을 보관할 장소

ls -la

  합계 8
  drwxrwxr-x. 2 root mail 4096 2013-06-02 07:30 .
  drwxr-xr-x. 8 root root 4096 2013-05-28 01:54 ..
  -rw-rw----  1 paul mail    0 2013-06-02 07:30 paul

패스워드 설정 - passwd

root 는 일반계정사용자의 패스워드를 마음대로 변경가능 하고 일반사용자는 자기자신의 패스워드만 변경할 수 있다.

paul 계정사용자의 패스워드 설정

passwd paul

자기자신의 패스워드 설정

passwd 

패스워드 상태정보 확인

passwd -S paul 

사용자 passwd 락(lock)과 해제

특정사용자의 패스워드에 락(lock)을 걸어서 잠궈버리고 시스템 접속을 차단하는 방법이 있다. 즉, 시스템 root 사용자는 passwd 명령어의 -l 옵션을 사용하여 일반계정사용자의 암호에 lock 을 걸어서 접속을 제한할 수 있다. 호스팅서버에서 일시적으로 계정접속을 제한할 경우에 유용하게 사용할 수 있다.

passwd -l paul

  paul 사용자의 비밀 번호 잠금
  passwd: 성공

잠금 확인을 해보자

grep paul /etc/shadow

  paul:!!$6$ot93LKo6$/XWvlUujWoIIRgal4o4qY13M3GEyf41e8NXalh2xES80jy.:15857:0:99999:7:::

패스워드에 락이 걸리게 되면 /etc/shadow 파일의 paul 패스워드정보 맨앞에 !! 문자가 들어가게 된다. 패스워드자리에 !! 이 설정되어 있다면 어떤 패스워드도 인정되지 않는다.

패스워드 락 해제

passwd -u paul

특정사용자 패스워드 삭제 및 재설정

특정사용자에 대한 패스워드를 아예 삭제해버리면 로그인 자체가 불가능해진다. 어떤 패스워드를 입력하더라도 인정하지 않게 된다. 물론 이 명령어는 root 만이 가능하다.

패스워드 삭제

passwd -d paul 

삭제한 패스워드는 재설정하면 된다.

passwd paul

passwd를 이용해서 특정 계정사용자의 패스워드 aging 정보를 설정할 수 있다. root 만이 가능하다.

특정사용자에 대한 패스워드 aging 정보 설정

-n mindays : 패스워드 최소 수명일 수. 암호를 바꿀수 있는 최소 날짜 수, 0이면 즉시 변경가능. 따로 설정하지 않으면 /etc/login.defs 의 PASS_MIN_DAYS 의 값을 따른다.

passwd -n 10 paul

확인

grep paul /etc/shadow

  paul:$6$ot93LKo6$/XWvlUujWoIIRgal4o4qY13M3GEyf41e8NXalh2xES80jy.:10:99999:7:::

-x maxdays : 패스워드의 최대 수명일 수. 암호를 바꿔야하는 최대 날짜수. 패스워드를 변경하지 않고 현재 패스워드를 지속적으로 사용할 수 있는 최대 날짜 수. 따로 설정하지 않으면 /etc/login.defs 의 PASS_MAX_DAYS 의 값을 따른다.

passwd -x 1000 paul

확인

grep paul /etc/shadow

  paul:$6$ot93LKo6$/XWvlUujWoIIRgal4o4qY13M3GEyf41e8NXalh2xES80jy.:15858:10:1000:7:::

-w warndays : 패스워드 종료일 이전 몇일전부터 종료된다는 warning 메시지를 받을 것인가를 결정함. 따로 설정하지 않으면 /etc/login.defs 의 PASS_WARN_DAYS 의 값을 따른다.

passwd -w 3 paul

확인

grep paul /etc/shadow

  paul:$6$ot93LKo6$/XWvlUujWoIIRgal4o4qY13M3GEyf41e8NXalh2xES80jy.:15858:10:1000:3:::

사용자 수정 - usermod

이름 정보 추가

usermod -c 폴 paul

확인

grep paul /etc/passwd

  paul:x:500:500:폴:/home/paul:/bin/bash

사용자 삭제 - userdel

paul 이라는 사용자 삭제

userdel paul
  • /etc/passwd 파일 내의 계정정보행이 삭제된다.
  • /etc/shadow 파일 내의 패스워드정보행이 삭제된다.
  • /etc/group 파일 내의 그룹정보행이 삭제된다.
userdel -r paul 
  • /etc/passwd 파일 내의 계정정보행이 삭제된다.
  • /etc/shadow 파일 내의 패스워드정보행이 삭제된다.
  • /etc/group 파일 내의 그룹정보행이 삭제된다.
  • /var/spool/mail 내의 메일파일이 삭제된다.
  • 홈디렉토리의 내용이 모두 삭제된다.

사용자 제거시 체크 리스트

  • 사용자 데이터베이스나 전화번호 목록에서 사용자를 제거한다.
  • aliases 파일이나 추가된 전송 주소에서 사용자를 제거한다.
  • 사용자 crontab 파일과 대기 중인 작업을 제거한다.
  • 여전히 실행 중인 모든 사용자 프로세스를 중지시킨다.
  • passwd, shadow, group, gshadow 파일에서 사용자를 제거한다.
  • 사용자 홈 디렉토리를 제거한다.
  • 사용자 메일 스풀을 제거한다.

사용자를 제거하면 사용자 UID가 시스템에서 더 이상 어떤 파일도 소유하지 않게 되므로 고아가 돼버린 파일 경로를 찾으려면 -nouser 매겨변수로 find 명령을 사용한다.

userdel -f paul

삭제대상 사용자가 현재 로그인 중이라 하더라도 삭제된다. 또한 사용자의 홈디렉토리와 메일파일도 함께 삭제된다. 만약 다른 사용자가 삭제대상 사용자와 동일한 홈디렉토리를 사용하고 있다 하더라도 삭제되며, 삭제 대상 사용자의 소유가 아닌 메일파일 또한 삭제된다.

참고로 /etc/login.defs 파일에 "USERGROUPS_ENAB" 설정 값이 yes 로 설정되어있고 삭제 대상 사용자의 그룹이 존재한다면 그 그룹도 함께 삭제될 것이다.

사용자 aging 추가 - chage

chage 명령어는 특정 계정들의 패스워드 종료정책에 대한 정보를 확인 및 수정 할 수 있다. aging 정보는 /etc/shadow 파일에 설정되는 파일이다.

againg 정보 확인

chage -l nestgoer

  # -d 옵션으로 변경
  Last password change                                      : Jun 02, 2013 

  # -M 옵션
  Password expires                                          : never   

  # -I 옵션
  Password inactive                                         : never    

  # -E 옵션
  Account expires                                           : never    

  # -m 옵션
  Minimum number of days between password change            : 0    

  # -M 옵션
  Maximum number of days between password change            : 99999    

  # -W 옵션
  Number of days of warning before password expires         : 7    

aging 정보 수정

chage -E 2013-12-31 -m 5 -W 10 -M 30 nestgoer

[옵션]

  • -d : 1970년 1월 1일부터 패스워드를 마지막으로 변경한 일자
  • -E : 계정사용 종료일자 ( YYYY-MM-DD 포맷으로 설정함 )
  • -I(대문자 i) : 패스워드가 유효기간 종료 이후에 계정 비활성화될 일 수
  • -m : 패스워드를 변경할 수 있는 최소일 수 ( 0 이면 아무때나 변경가능 )
  • -M : 마지막 변경 이후의 패스워드 유효 일 수
  • -W : 패스워드 만료기간 몇 일 전에 안내메시지를 보낼 것인가

aging 정보를 대화형으로 하나씩 설정

chage nestgoer