여행을 개발하다

[Linux] useradd (adduser) 명령어 - 사용자 추가 본문

운영체제/Linux

[Linux] useradd (adduser) 명령어 - 사용자 추가

yhtragramming 2020. 4. 17. 17:02

 

이번 포스팅에서는 리눅스의 사용자 관리, 그중에서도 사용자 계정을 추가하는 useradd (adduser) 명령어에 대해 이야기해보고자 한다. 참고로 사용자 추가 권한은 root 권한이 있는 사용자만 허용되며, 일반 사용자는 해당 작업에 대한 권한이 없다. 따라서, 아래의 예제는 모두 root 사용자로 진행할 것이며, 리눅스는 ubuntu를 사용한다.

 

하지만 최근 들어 root 계정으로 바로 접속하여 사용자 관리를 하는 것에 대해 회의적이고 조심스러운(?) 분위기라고 한다. 아무래도 보안상의 문제인 것 같다. 이 포스팅은 단순 설명용이므로, 실제로 활용할 때는 일반 사용자 접속 후 sudo 명령어를 사용하는 방식을 적극 권장한다.

 

먼저, useradd (adduser) 명령어의 주요 옵션들을 살펴본다.

 

주요 옵션

옵션

의미

-p

사용자의 암호를 추가 시에 지정할 수 있다. 현재 리눅스에서는 암호화된 값을 사용하므로 암호화된 값으로 지정해야 한다.

-d

홈 디렉터리를 지정할 때 쓰인다. 최종 디렉터리만 생성하므로 중간 경로가 있는 경우에는 미리 생성해야 한다.

-g

그룹을 지정할 때 사용하는데, 지정할 그룹이 미리 생성되어 있어야 한다. 이 옵션을 지정하지 않으면, 레드햇 계열에서는 아이디와 동일한 그룹에 포함시키고, 다른 배포판에서는 users에 포함시킨다.

-G

기본 그룹 이외에 추가로 그룹에 속하게 할 경우에 쓴다.

-c

사용자 생성 시 사용자에 대한 설명을 설정한다.

-s

사용자 생성 시 사용자가 사용할 셸을 지정한다.

-D

/etc/default/useradd에 설정된 유저 추가와 관련된 기본 사항들을 보여준다.

-m

사용자를 생성할 때 홈 디렉터리를 생성해 주는 옵션으로 레드햇 리눅스는 이 옵션을 사용하지 않아도 홈 디렉터리가 생성되지만 다른 배포판에서는 생성되지 않으므로 이 옵션을 지정해야 한다. 보통 -k 옵션과 같이 사용하여 사용자 생성 시 기본적으로 부여되는 목록이 들어있는 skeldir을 지정할 때 사용한다.

-k

사용자 생성 시에 제공되는 환경 파일들은 기본적으로 /etc/skel로 지정되어 있는데, 이외의 디렉터리를 지정할 때 쓰인다.

-f

패스워드의 만기일을 날짜 수로 지정한다.

-e

계정의 만기일을 YYYY-MM-DD 형식으로 지정한다.

-u

사용자 추가 시에 UID 값을 지정한다.

참고 서적 : 리눅스 마스터 1급 정복하기, 북스홀릭 (정성재, 배유미 공저)

 

1. useradd -D (사용자 추가에 대한 기본 사항 확인하기)

- 신규 사용자를 추가할 때 반영되는 기본 사항들을 확인하는 명령어이다.

사용법 : useradd -D

- /etc/default/useradd 파일의 내용을 참고하며, 이 파일의 내용을 그대로 보여준다고 생각하면 된다.

 

리눅스에 새로운 사용자를 추가할 때 참고하는 파일이 있는데, 그중 하나가 /etc/default 디렉터리 하위에 있는 'useradd'라는 파일이다. 'cat' 명령어로 파일 내용을 출력해보면 사용자의 셸, 그룹, SKEL, 메일 계정 생성 여부 등에 대한 내용이 나와있으며, 사용자가 별도의 옵션을 지정하지 않으면 이 파일에 설정되어 있는 대로 사용자가 생성된다.

root@ubuntu:/# cat /etc/default/useradd 
SHELL=/bin/sh
GROUP=100
HOME=/home
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

 

이제는 'useradd -D' 명령어를 통하여 내용을 확인해본다. /etc/default/useradd 파일에서 설정한 내용이 그대로 출력되며, 계정의 만기일을 나타내는 EXPIRE 변수는 따로 설정한 내역이 없기 때문에 값을 가져오지 못한다.

root@ubuntu:/# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

 

2. useradd(adduser) 사용자명

- '사용자명'으로 신규 사용자를 추가한다.

- 별도의 옵션 없이 사용이 가능하다.

 

'user2'라는 사용자를 추가하고자 한다면 아래의 명령어를 입력하면 된다.

root@ubuntu:/# useradd user2

 

추가된 사용자는 /etc/passwd 파일에서 확인할 수 있다.

root@ubuntu:/# tail -1 /etc/passwd
user2:x:1002:1002::/home/user2:/bin/sh

 

'/etc/passwd' 파일에 관해서는 추후 포스팅에서 언급하겠지만, '콜론(:)'으로 구분된 위의 한 줄은 다음과 같은 정보를 포함하고 있다.

 

field1

field2

field3

field4

field5

field6

field7

사용자명

비밀번호

uid

gid

사용자 계정 설명

홈 디렉터리

user2

x

1002

1002

 

/home/user2

/bin/sh

 

3. useradd -d dir [-m] (홈 디렉터리 지정하기)

- 사용자의 홈 디렉터리를 지정하는 옵션이다.

- 사용법 :useradd -d 디렉터리 경로 [ -m] 사용자명

- 중간 경로가 있을 경우에는 미리 생성해 줘야 한다.

- 별도로 지정하지 않으면 /etc/default/useradd의 'HOME' 변수에 지정된 디렉터리에 '사용자명'으로 생성된다.

- [-m] 옵션을 함께 사용하면, 디렉터리를 동시에 생성할 수 있다.

 

필수 옵션은 아니기 때문에 별도로 지정하지 않아도 무관하다. 하지만 특정 디렉터리를 지정하여 생성하고 싶다면 절대 경로를 full path로 적어줘야 한다.

root@ubuntu:/home# ls -trl
total 12
drwxr-xr-x  3 user1   user1   4096 Mar 17 00:24 user1
drwxr-xr-x 14 yhjeong yhjeong 4096 Apr 16 17:02 yhjeong
drwxrwxrwx  2 root    root    4096 Apr 16 21:04 testUser

 

예를 들어, 'user2'라는 사용자의 홈 디렉터리를 '/home/testUser'로 지정하여 추가하려고 한다. 단, '/home/testUser' 디렉터리는 root 계정의 소유로 이미 생성되어 있는 상태이다. 이 경우, 다음과 같은 명령어로 홈 디렉터리를 지정하여 사용자를 생성할 수 있다.

root@ubuntu:/home# useradd -d /home/testUser/ user2

 

작업이 완료된 후 '/etc/passwd' 파일을 확인해보면, 사용자 추가 명령어에서 지정한 위치에 홈 디렉터리가 생성되어 있음을 확인할 수 있다.

root@ubuntu:/home# cat /etc/passwd | grep user2
user2:x:1002:1002::/home/testUser/:/bin/sh

 

단, 이러한 방식은 다른 사용자의 소유권으로 디렉터리를 먼저 생성해놓아야 한다는 한계가 있다. 또한, 先 사용자 생성, 後 소유권 변경 이라는 프로세스 때문에 권한 문제가 발생할 수 있다. 이에 대한 해결책으로, [-m] 옵션을 함께 사용하면 수고로움을 덜 수 있다 (단, 아래 예제는 위의 user2의 계정 및 홈 디렉터리 삭제 후에 실행했다).

 

다음은 [-d], [-m] 옵션을 함께 사용하여 'user3' 계정을 생성해보기는 예제이다. 홈 디렉터리는 '/home/testUser1'으로 지정한다.

root@ubuntu:/home# useradd -d /home/testUser1 -m user3

 

작업 결과, 기존에 없었던 '/home/testUser1' 디렉터리가 생성되었으며, '/etc/passwd' 파일에서도 'user3' 계정의 홈 디렉터리 지정 결과를 확인할 수 있다. 홈 디렉터리의 소유권 역시 'user3'으로 깔끔하게 지정되어 있다.

root@ubuntu:/home# ls -trl
total 12
drwxr-xr-x  3 user1   user1   4096 Mar 17 00:24 user1
drwxr-xr-x 14 yhjeong yhjeong 4096 Apr 16 17:02 yhjeong
drwxr-xr-x  2 user3   user3   4096 Apr 16 21:39 testUser1
root@ubuntu:/home# cat /etc/passwd | grep user3
user3:x:1002:1002::/home/testUser1:/bin/sh

 

4. useradd -g gid (그룹 지정하기)

- 사용자가 소속될 그룹을 지정하는 옵션이다.

- 이 옵션을 생략할 경우, 아이디와 동일한 그룹에 포함시킨다.

- 옵션을 사용하여 gid를 지정하는 경우, 해당 gid는 반드시 생성되어 있는 것이어야만 한다.

- 사용법 :useradd -g gid 사용자명

 

리눅스 사용자는 하나 이상의 그룹에 속하게 되어 있다.그 그룹은 계정이 생성될 때 '사용자명'으로 생성되는데, 이와 동시 그룹의 고유 id인 'gid(group id)'도 발번된다 (리눅스 배포판마다 다름).그룹명과 gid는 '/etc/group' 파일을 보면 확인할 수 있다. 이 파일도 '/etc/passwd' 파일처럼 여러 개의 필드가 '콜론(:)'으로 구분되어 있는데, 여기서 첫 번째 필드가 그룹명이고, 세 번째 필드가 gid이다.즉, 'user1' 그룹의 gid는 1001번이 되는 것이다.

root@ubuntu:/home# tail -3 /etc/group
yhjeong:x:1000:
sambashare:x:126:yhjeong
user1:x:1001:

 

이 상태에서 신규 사용자 계정 'user4'를 별도의 옵션을 지정하지 않고 추가해본다. '/etc/passwd' 파일에서 user4 계정의 내용을 확인해보면, gid가 1002번이 되어있으며, 거꾸로 '/etc/group' 파일에서 gid가 1002번인 그룹의 이름은 'user4'라는 것을 확인할 수 있다.

root@ubuntu:/home# cat /etc/passwd | grep user4
user4:x:1002:1002::/home/user4:/bin/sh
root@ubuntu:/home# cat /etc/group | grep 1002
user4:x:1002:

 

하지만 별도의 신규 그룹을 추가하지 않고, 이미 존재하는 그룹에 신규 사용자 계정을 추가해야 하는 상황도 발생할 수 있다. 이럴 때는 '-g gid' 옵션을 추가하여 사용자 생성도 가능하다. 예를 들어, 'user5' 계정을 생성하되, 별도의 신규 그룹을 생성하지 않고 그룹명 'user4'인 '1002(gid)'에 추가하는 명령어를 실행해본다.

root@ubuntu:/# useradd -g 1002 user5

 

명령 실행 결과, 'user5'의 gid가 '1002'로 설정되어 있음을 확인할 수 있다.

root@ubuntu:/# cat /etc/passwd | grep user5
user5:x:1003:1002::/home/user5:/bin/sh

 

5. useradd -G gid (2차 그룹 지정하기)

- 사용자가 소속될 2차 그룹을 지정하는 옵션이다.

- [-g] 옵션과 마찬가지로, 해당 gid는 이미 생성되어 있는 것이어야만 한다.

- 사용법 :useradd -G gid 사용자명

 

리눅스 사용자는 반드시 한 개 이상의 그룹에 속해야 한다고 언급했었다. 그러므로, 사용자는 여러 개의 그룹에 동시에 속할 수도 있다. '[-G]' 옵션을 사용하면 사용자가 기본적으로 속한 그룹 외, 다른 그룹에도 동시에 속하게 할 수 있다. 'user6'의 기본 그룹(1차 그룹)을 '1002'로, 2차 그룹을 '1001'번으로 지정하여 계정을 생성해본다.

root@ubuntu:/# useradd -g 1002 -G 1001 user6

계정 생성 후 '/etc/passwd' 파일을 살펴보면, 기본 그룹은 '1002'로 추가되었음을 확인할 수 있다.

root@ubuntu:/# cat /etc/passwd | grep user6
user6:x:1004:1002::/home/user6:/bin/sh

 

반면, 2차 그룹은 '/etc/group' 파일의 마지막 필드에서 확인할 수 있는데, 이 필드에서는 해당 그룹 id를 2차 그룹으로 지정한 사용자 리스트를 보여준다.

root@ubuntu:/# cat /etc/group | grep user6
user1:x:1001:user6

 

6. useradd -u uid (uid 지정하기)

- 사용자의 uid를 설정하는 옵션이다.

- 별도의 옵션을 지정하지 않을 경우, uid는 자동 발번되어 추가된다.

- 사용법 :useradd -u uid 사용자명

 

gid가 'group id'의 약자라면, uid는 'user id'의 약자이다. uid 또한 리눅스에서 사용자 계정에 부여하는 고유 번호이다. 별도의 옵션을 지정하지 않으면, 자동 채번되어 사용자가 생성된다. 하지만 사용자의 필요에 따라 특정 uid를 지정하여 생성할 수도 있다. 단, 다른 사용자가 이미 사용 중인 uid는 지정할 수 없다.

 

예를 들어, 위에서 생성했던 'user6'의 uid인 '1004'를 지정하여 user7을 생성하는 명령어를 입력해보면, 다음과 같은 에러가 발생한다.

root@ubuntu:/# useradd -u 1004 user7
useradd: UID 1004 is not unique

 

그래서 안전하게 uid를 '2000'으로 지정하여 'user7'을 생성하고, 그 결과를 확인해본다.

root@ubuntu:/# useradd -u 2000 user7 ; cat /etc/passwd | grep user7
user7:x:2000:2000::/home/user7:/bin/sh

 

7. useradd -c 설명내용 (사용자 설명 추가하기)

- 사용자에 대한 설명을 추가하는 옵션이다.

- 사용법 :useradd -c 설명내용

 

'comment'의 이니셜로, 사용자에 대한 설명을 추가하는 옵션이다. 띄어쓰기가 필요할 경우, 따옴표('')로 묶어준다. 'user8' 계정을 'Just for test!!'라는 설명을 추가하여 생성하고, 그 결과를 확인한다.

root@ubuntu:/# useradd -c 'Just for test!!' user8
root@ubuntu:/# cat /etc/passwd | grep user8
user8:x:2001:2001:Just for test!!:/home/user8:/bin/sh

 

 

8. useradd -e 만기일 (계정 만기일 설정하기)

- 계정의 만기일을 설정한다.

- 사용법 :useradd -e 만기일

- 만기일 형식은 반드시 'YYYY-MM-DD'로 설정해야 한다.

 

사용자를 추가했다면, 사용자별 만기일을 지정할 수도 있다. 이때 사용하는 옵션이 '-e' 옵션이며, 뒤에 따라오는 만기일은 'YYYY-MM-DD' 형식을 준수하여 입력해야 한다. 만기일은 '/etc/shadow' 파일에서 확인 가능한데, 콜론(:)으로 구분된 필드의 8번째 필드이다. 다만, 표기 방식이 숫자이기 때문에, 1970년 1월 1일부터 만기 일자의 날짜 수로 표기됨에 유의해야 한다.

 

만기일을 2020년 12월 31일로 지정하고, 사용자 'user9'를 추가한다. 참고로, 2020년 12월 31일은 1970년 1월 1일로부터 18,627일째 되는 날이다. 명령 실행 후 결과를 확인해본다.

root@ubuntu:/home# useradd -e '2020-12-31' user9; cat /etc/passwd | grep user9
user9:!:18369:0:99999:7::18627:

 

 

9. useradd -f 날짜 수 (패스워드 만기일 설정하기)

- 패스워드 만기일을 설정하는 옵션이다.

- 사용법 :useradd -f 날짜 수

 

'[-f]' 옵션을 사용하면 패스워드 만기일을 날짜 수로 지정할 수 있다. 예를 들어, 'user10' 계정을 생성하되, 패스워드를 3일 이내 만기 시켜야 할 경우 다음과 같이 명령어를 입력하면 된다. 결과는 '/etc/shadow'의 7번째 필드를 확인하면 되는데, 오늘(2020년 4월 17일)로 부터 3일 후인 2020년 4월 20일이 패스워드 만기일이 된다.

root@ubuntu:/home# useradd -f 3 user10; cat /etc/shadow | grep user10
user10:!:18369:0:99999:7:3::

 

 

10. useradd -s 셸 (사용자의 셸 지정하기)

- 사용자의 셸을 지정하는 옵션이다.

- 옵션을 지정하지 않으면, '/etc/default/useradd' 파일의 기본 설정을 따른다.

- 사용법 :useradd -s 셸

 

일명 '명령어 해석기'라는 셸을 사용자별로 지정하는 옵션이다. 리눅스는 기본적으로 'bash' 셸을 사용하는데, 이 외에도 다양한 셸이 존재한다. 현재 사용하는 리눅스에서 사용 가능한 셸의 목록을 확인하려면 '/etc/shells' 파일을 확인해보면 된다.

root@ubuntu:/bin# cat /etc/shells 
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash

 

 

만약, 'user11' 계정의 기본 셸을 bash 셸이 아닌 rbash 셸로 설정하고 싶을 경우 다음과 같이 명령어를 입력하면 된다. 계정별 사용하는 셸은 '/etc/passwd' 파일에서 확인할 수 있다.

root@ubuntu:/bin# useradd -s /bin/rbash user11
root@ubuntu:/bin# cat /etc/passwd | grep user11
user11:x:2004:2004::/home/user11:/bin/rbash

 

지금까지 리눅스의 사용자 관리, 그중 신규 계정을 추가하는 useradd(adduser) 명령어에 대해 알아보았다.

 

긴 글 읽어주셔서 감사하며, 잘못되거나 부족한 부분에 대한 지적은 언제든지 환영입니다.

 

감사합니다!! : )

 

Comments