전자책 출간 알림 [마이크로서비스패턴 쉽게 개발하기]

티스토리 뷰

user관리 파일

Linux의 user 유형에는 3가지가 있습니다.

  • root: 전체 관리 권한 user
  • service user: Linux시스템관리를 위한 특수한 user
  • user : 일반 사용자

/etc/passwd의 내용을 보면 전체 user목록을 볼 수 있습니다.
아래 예에서 root, ocean1을 제외하면 모두 service user들입니다.
각 column은 user name:암호:UID:primary GID:Comments:Home directory:Login shell입니다.
2번째 컬럼 '암호'값이 'x'이면 별도 파일인 /etc/shadow에 암호가 있다는 뜻입니다.

sh-4.4# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
ocean1:x:1000:1000::/home/ocean1:/bin/bash

group관리 파일

group은 /etc/group에서 관리됩니다.
각 column은 group name:암호:GID:comments입니다.

sh-4.4# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:33:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
users:x:100:
nobody:x:65534:
utmp:x:22:
utempter:x:35:
dbus:x:81:
input:x:999:
kvm:x:36:
render:x:998:
systemd-journal:x:190:
systemd-coredump:x:997:
systemd-resolve:x:193:
ocean1:x:1000:

user가 존재하는 지 체크

/etc/passwd에서 체크합니다.

sh-4.4# grep ocean1 /etc/passwd
ocean1:x:1000:1000::/home/ocean1:/bin/bash

user전환

su라는 명령을 사용하면 됩니다.
user로 전환하면서 그 user의 home directory에 있는 Login shell을 실행하고 싶으면
su 뒤에 '-'를 붙이십시오.

sh-4.4# su ocean1
[ocean1@557bc45cf6f2 /]$ exit
exit
sh-4.4# su - ocean1
Last login: Wed Jun  3 01:36:40 UTC 2020 on pts/1
[ocean1@557bc45cf6f2 ~]$

user logout

exit를 입력하거나 또는 CTRL-d를 누르십시오.

/etc/sudoers

sudoers파일은 sudo프레임워크의 설정파일로서 sudo 사용 권한자를 등록할 수 있습니다.
sudoers파일은 root권한이나 sudo권한을 가진 user가 수정할 수 있습니다.
'sudo vi /etc/sudoers'로 직접 수정하지 마시고, visudo라는 명령을 사용하십시오.
visudo를 사용하면 동시 수정을 막고 저장 시 syntax체크를 하는 등 안전하게 suders파일을 편집할 수 있습니다.

❯ sudo visudo
Password:
visudo: /etc/sudoers.tmp unchanged

user 추가 및 삭제

useradd명령어를 이용하여 os user를 추가합니다.
자동으로 /home밑에 user 디렉토리도 만들어집니다.

sh-4.4# useradd docker
sh-4.4# id docker
uid=1001(docker) gid=1001(docker) groups=1001(docker)
sh-4.4# ls -al /home
total 16
drwxr-xr-x 1 root   root   4096 Jun  3 02:04 .
drwxr-xr-x 1 root   root   4096 Jun  2 08:27 ..
drwx------ 2 docker docker 4096 Jun  3 02:04 docker
drwx------ 2 ocean1 ocean1 4096 Jun  2 08:22 ocean1

추가한 user의 암호를 지정합니다.

[root@bastion tmp]# passwd docker
Changing password for user docker.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@bastion tmp]# grep docker /etc/shadow
docker:$6$TZQlCJ4e$nc6GXzDm1TsKrRY62/TY5wPJoKdnvtAJQBepvxgBHFQ..kLC5k2qGPZ5Tez17DTtfJuKRTaAskaGZiWdCqFWi1:18437:0:99999:7:::
[root@bastion tmp]#

생성 시 group, uid, 암호를 지정하려면 아래와 같이 하십시오.

[root@bastion work]# groupadd designer -g 9001

[root@bastion work]# useradd smith -g designer -u 8002 -p redhat
[root@bastion work]# id smith
uid=8002(smith) gid=9001(designer) groups=9001(designer)

[root@bastion work]# useradd john -G designer -u 8001 -p redhat
[root@bastion work]# id john
uid=8001(john) gid=8001(john) groups=8001(john),9001(designer)

 

user를 삭제해 보겠습니다.
삭제는 userdel명령어를 이용합니다.
주의할 점은 user가 삭제되어도 home디렉토리는 여전히 남아 있다는 겁니다.

sh-4.4# userdel docker
sh-4.4# id docker
id: 'docker': no such user
sh-4.4# ls -li /home
total 8
3428279 drwx------ 2   1001   1001 4096 Jun  3 02:04 docker
3293099 drwx------ 2 ocean1 ocean1 4096 Jun  2 08:22 ocean1

이전 user의 home디렉토리를 지우지 않고 새 user를 추가해 봅시다.
동일한 uid인 '1001'로 생성되었습니다.
이런 경우는 이전 user의 home디렉토리의 owner user와 group도 변경됩니다.

sh-4.4# useradd tmp
sh-4.4# id tmp
uid=1001(tmp) gid=1001(tmp) groups=1001(tmp)
sh-4.4# ls -li /home
total 12
3428279 drwx------ 2 tmp    tmp    4096 Jun  3 02:04 docker
3293099 drwx------ 2 ocean1 ocean1 4096 Jun  2 08:22 ocean1
3428284 drwx------ 2 tmp    tmp    4096 Jun  3 02:08 tmp

user삭제 시 home directory도 삭제하려면 'userdel -r'을 이용하십시오.

sh-4.4# userdel -r tmp
sh-4.4# ls -li /home
total 8
3428279 drwx------ 2   1001   1001 4096 Jun  3 02:04 docker
3293099 drwx------ 2 ocean1 ocean1 4096 Jun  2 08:22 ocean1

group추가, 수정, 삭제

새로운 group은 groupadd명령으로 추가합니다.

sh-4.4# groupadd group1
sh-4.4# grep group1 /etc/group
group1:x:1001:

groupadd <group명> -g <gid>와 같이 groupid를 지정할 수 있습니다.

 

user를 그룹에 추가하려면 'usermod -a -G'명령을 이용합니다. user의 supplemetary(보충,추가의)그룹으로 추가됩니다.

sh-4.4# usermod -a -G group1 ocean1
sh-4.4# id ocean1
uid=1000(ocean1) gid=1000(ocean1) groups=1000(ocean1),1001(group1)

usermod -G만 사용하면 supplemetary그룹이 overwrite됩니다.

sh-4.4# id ocean1
uid=1000(ocean1) gid=1001(group1) groups=1001(group1),1002(group2),1003(group3)
sh-4.4# usermod -G group3 ocean1
sh-4.4# id ocean1
uid=1000(ocean1) gid=1001(group1) groups=1001(group1),1003(group3)

아래와 같이 -aG로 여러개의 supplementary그룹을 추가할 수 있습니다. 
sh-4.4# usermod -aG group2,group3 ocean1
sh-4.4# id ocean1
uid=1000(ocean1) gid=1001(group1) groups=1001(group1),1002(group2),1003(group3)

user의 primary group을 수정하려면 'usermod -g'명령을 수행합니다.

sh-4.4# id ocean1
uid=1000(ocean1) gid=1000(ocean1) groups=1000(ocean1),1001(group1)
sh-4.4# usermod -g group1 ocean1
sh-4.4# id ocean1
uid=1000(ocean1) gid=1001(group1) groups=1001(group1)

user가 속한 모든 group목록을 보려면 groups명령을 이용하십시오.

sh-4.4# groups ocean1
ocean1 : ocean1 group1

사용자 암호 설정

사용자 암호는 /etc/passwd파일로 관리되지 않습니다.
아래와 같이 2번째 컬럼에 'x'로 되어 있다는것은 이 파일에서 암호를 관리하지 않는다는 의미입니다.

sh-4.4# grep ocean1 /etc/passwd
ocean1:x:1000:1001::/home/ocean1:/bin/bash

사용자 암호에 대한 설정은 /etc/shadow파일에 있습니다.
암호 변경은 'usermod -p'명령을 이용합니다. 'passwd '명령도 가능합니다.

sh-4.4# usermod -p passw0rd1 ocean1
sh-4.4# grep ocean1 /etc/shadow
ocean1:passw0rd1:18416:1:26:4:3:18418:

암호에 대한 각종 설정은 'chage' 명령을 이용합니다.
각 컬럼의 의미는 아래와 같습니다.

# 설명
1 user id ocean1
2 사용자암호 생략
3 생성일(1970-01-01이후 일수) 18415
4 암호변경 후 며칠 후부터 암호변경이 가능한가? 1
5 암호 변경 후 며칠까지 암호를 변경해야 하는가? 26
6 암호 만료일 며칠 전부터 warning할것인가? 4
7 암호 만료일 며칠 후 계정을 완전 expire할것인가? 3
8 계정 폐기일(1970-01-01이후 일수) 18418

아래 예는 아래와 같은 의미입니다.

- 암호변경 후 1일부터 암호를 다시 변경할 수 있고, 26일 후 까지는 반드시 변경해야 한다.

- 암호만료일 4일 전부터 warning할것이고, 암호만료일 3일 후까지 암호를 변경 안하면 계정을 만료 시킬것이다.

- 이 계정은 2020-06-05일에는 최종 폐기될것이다.  

sh-4.4# chage -m 1 -M 26 -W 4 -I 3 -E 2020-06-05 ocean1
sh-4.4# grep ocean1 /etc/shadow
ocean1:!!:18415:1:26:4:3:18418:

'chage -l'명령으로 설정 값을 보다 보기 좋게 볼 수 있습니다.

sh-4.4# chage -l ocean1
Last password change                    : Jun 02, 2020
Password expires                    : Jun 28, 2020
Password inactive                    : Jul 01, 2020
Account expires                        : Jun 05, 2020
Minimum number of days between password change        : 1
Maximum number of days between password change        : 26
Number of days of warning before password expires    : 4

사용자 계정 lock / unlock

usermod -L 과 -U를 사용합니다.
Locking되었을 때는 사용자 암호값 앞에 '!'가 붙습니다.

sh-4.4# usermod -L ocean1
sh-4.4# id ocean1
uid=1000(ocean1) gid=1001(group1) groups=1001(group1),1002(group2),1003(group3)
sh-4.4# grep ocean1 /etc/shadow
ocean1:!passw0rd:18416:1:26:4:3:18418:
sh-4.4# usermod -U ocean1
sh-4.4# grep ocean1 /etc/shadow
ocean1:passw0rd:18416:1:26:4:3:18418:

사용자 계정/암호 정책 설정

기본적인 계정 및 암호 정책 설정은 /etc/login.defs파일에서 합니다.

sh-4.4# cat /etc/login.defs | grep ^[^#]
MAIL_DIR    /var/spool/mail
PASS_MAX_DAYS    99999
PASS_MIN_DAYS    0
PASS_MIN_LEN    5
PASS_WARN_AGE    7
UID_MIN                  1000
UID_MAX                 60000
SYS_UID_MIN               201
SYS_UID_MAX               999
GID_MIN                  1000
GID_MAX                 60000
SYS_GID_MIN               201
SYS_GID_MAX               999
CREATE_HOME    yes
UMASK           077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512

 

사용자 홈 디렉토리 변경 

아래 예제는 user01의 홈디렉토리를 /users/user01로 변경하는 것입니다.

기본적으로 사용자의 홈디렉토리는 /home/{username} 입니다.

usermod -d /users/user01 user01

 

댓글

전자책 출간 알림 [마이크로서비스패턴 쉽게 개발하기]