리눅스 실습하기-02{2023년05월16일}
계정확인하기
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root)
[jslee11g@localhost ~]$ id
uid=1000(jslee11g) gid=1000(jslee11g) groups=1000(jslee11g)
[oracle@localhost ~]$ id
uid=1001(oracle) gid=1001(dba) groups=1001(dba)
UID : 사용자 식별 번호
- 슈퍼유저의 UID는 0
- 1 ~ 499 시스템을 제어하는 계정 - > 로그인 되지 않도록 생성하는 것이 원칙
- 500 ~ 60000 까지 일반 계정
- 전체 계정 확인은 /etc/passwd에서 사용자 식별 번호 확인 가능
[root@localhost ~]# 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:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:994::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
# 아래 두줄은 계정 생성
jslee11g:x:1000:1000:jslee11g:/home/jslee11g:/bin/bash
oracle:x:1001:1001::/home/oracle:/bin/bash
# /etc/passwd 파일의 읽는 법
jslee11g:x:1000:1000:jslee11g:/home/jslee11g:/bin/bash
[사용자명]:[비밀번호]:[UID]:[GID]:[사용자계정설명]:[홈 디렉터리]:[셸]
궁금해서 찾아본 /bin/bash?
GID : 그룹 식별 번호
- 슈퍼유저의 GID는 0
- 그룹을 통해서 사용자를 묶을 수 있다.
- /etc/passwd 또는 /etc/group에서 그룹 식별 전호 확인 가능
[root@localhost ~]# 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:postfix
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:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
input:x:999:
systemd-journal:x:190:
systemd-network:x:192:
dbus:x:81:
polkitd:x:998:
libstoragemgmt:x:997:
ssh_keys:x:996:
abrt:x:173:
rpc:x:32:
cgred:x:995:
tss:x:59:
sshd:x:74:
slocate:x:21:
postdrop:x:90:
postfix:x:89:
chrony:x:994:
ntp:x:38:
tcpdump:x:72:
stapusr:x:156:
stapsys:x:157:
stapdev:x:158:
# 생성된 두줄
jslee11g:x:1000:
dba:x:1001:
$ user : 현재 서버에 로그인 되어 있는 모든 사용자 출력
(접속 순서와 상관없이 알파벳 순서로 출력)
# 현재 jslee11g로 접속한 상황인데 oracle로 계정 접속을 해보면?
[jslee11g@localhost ~]$ users
jslee11g oracle root
# 순서로 보면 jslee11g 자리에 oracle이 접속된 것처럼 보이지만 root로 접속해보면
[oracle@localhost ~]$ users
oracle oracle root
[root@localhost ~]# users
oracle root root
# 위와 같이 현재 호스트에 접속된 사용자들은 순서가 아닌 알파벳 순으로 출력되는 것을 알 수 있다.
$ whoami : 현재 로그인한 사용자의 이름
(호스트 로그인과는 별개로 현재 계정 로그인 사용자 이름을 출력한다.)
[jslee11g@localhost ~]$ users
oracle root root
[jslee11g@localhost ~]$ whoami
jslee11g
계정 추가 명령어 : # useradd 계정이름
[root@localhost ~]# useradd jslee
[root@localhost ~]# 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:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:994::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
jslee11g:x:1000:1000:jslee11g:/home/jslee11g:/bin/bash
oracle:x:1001:1001::/home/oracle:/bin/bash
jslee:x:1002:1002::/home/jslee:/bin/bash
# 새로 생성된 계정의 정보에서 확인해볼 수 있는데,
# 옵션을 추가하지 않는다면 자동으로 그룹도 동일한 이름으로 생성된다.
# root(수퍼계정)이 아닌 다른 계정으로는 생성이 불가능 하다.
[jslee@localhost ~]$ useradd widm
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.
useradd -d 경로 생설될이름 : 홈 디렉터리 지정하기
useradd -g 그룹이름(기존에 존재해야 함) 생성될이름 : 기존 그룹에 새로운 계정을 추가하기
useradd -g 기존GID 생성될이름 : 기존 그룹 이름 대신 GID 값을 입력해도 생성된다.
[root@localhost jslee]# tail -4 /etc/passwd
oracle:x:1001:1001::/home/oracle:/bin/bash
jslee:x:1002:1002::/home/jslee:/bin/bash
jslee1:x:1003:1003::/home/jslee1:/bin/bash
jslee2:x:1004:1004::/home/jslee1:/bin/bash
# 새로운 계정인 jslee4를 만들때 jslee 그룹에 추가하기
[root@localhost jslee]# useradd -g jslee jslee4
[root@localhost jslee]# tail -5 /etc/passwd
oracle:x:1001:1001::/home/oracle:/bin/bash
jslee:x:1002:1002::/home/jslee:/bin/bash
jslee1:x:1003:1003::/home/jslee1:/bin/bash
jslee2:x:1004:1004::/home/jslee1:/bin/bash
jslee4:x:1005:1002::/home/jslee4:/bin/bash
# 단, 기존에 생성된 계정은 useradd의 옵션을 이용해 변경이 불가능하다.
[root@localhost jslee]# useradd -g jslee jslee2
useradd: user 'jslee2' already exists
# -g 를 통해 GID값 을 지정한 모습
[root@localhost jslee]# tail -5 /etc/passwd
jslee:x:1002:1002::/home/jslee:/bin/bash
jslee1:x:1003:1003::/home/jslee1:/bin/bash
jslee2:x:1004:1004::/home/jslee1:/bin/bash
jslee4:x:1005:1002::/home/jslee4:/bin/bash
jslee5:x:1009:1009::/home/jslee5:/bin/bash
[root@localhost jslee]# useradd -g 1009 jslee3
[root@localhost jslee]# tail -5 /etc/passwd
jslee1:x:1003:1003::/home/jslee1:/bin/bash
jslee2:x:1004:1004::/home/jslee1:/bin/bash
jslee4:x:1005:1002::/home/jslee4:/bin/bash
jslee5:x:1009:1009::/home/jslee5:/bin/bash
jslee3:x:1010:1009::/home/jslee3:/bin/bash
useradd -u [500~60000사이 중 없는 번호] 생성될이름 : 유저 생성시 UID를 지정한다.
UID값 지정시 GID 값 또한 동일하게 지정된다.
[root@localhost jslee]# tail -5 /etc/passwd
oracle:x:1001:1001::/home/oracle:/bin/bash
jslee:x:1002:1002::/home/jslee:/bin/bash
jslee1:x:1003:1003::/home/jslee1:/bin/bash
jslee2:x:1004:1004::/home/jslee1:/bin/bash
jslee4:x:1005:1002::/home/jslee4:/bin/bash
[root@localhost jslee]# useradd -u 1005 jslee5
useradd: UID 1005 is not unique
# 새롭게 만들 jslee5 계정에 jslee4가 가지고 있는 UID 1005를 지정을 요청해도 불가능하다.
# 새롭게 만들 jslee5 계정에 UID 1009를 지정한 모습.
[root@localhost jslee]# useradd -u 1009 jslee5
[root@localhost jslee]# tail -5 /etc/passwd
jslee:x:1002:1002::/home/jslee:/bin/bash
jslee1:x:1003:1003::/home/jslee1:/bin/bash
jslee2:x:1004:1004::/home/jslee1:/bin/bash
jslee4:x:1005:1002::/home/jslee4:/bin/bash
jslee5:x:1009:1009::/home/jslee5:/bin/bash
그렇다면 옵션을 모두 사용하여 입력이 가능할까? UID값만 중복되지 않는다면 충분히 가능하다.
[root@localhost jslee]# useradd -u 1012 -g 1009 jslee7
[root@localhost jslee]# tail -3 /etc/passwd
jslee3:x:1010:1009::/home/jslee3:/bin/bash
jslee6:x:1011:1003::/home/jslee6:/bin/bash
jslee7:x:1012:1009::/home/jslee7:/bin/bash
useradd -g 1차그룹명 -G 2차그룹명
만약 하나의 계정으로 두가지 그룹의 소유권을 가지고자 한다면?
[root@localhost ~]# cat /etc/passwd | grep newid
newid1:x:1015:1015::/home/newid1:/bin/bash
newid2:x:1016:1016::/home/newid2:/bin/bash
# newid3에 newid1 그룹 소유권과 새로운 그룹의 소유권을 가지고 할때는 생성이 불가능하다.
# -g와 -G 옵션 입력시 기존에 그룹이 존재해야 한다.
[root@localhost ~]# useradd -g 1015 -G 1017 newid3
useradd: group '1017' does not exist
# newid3에 newid1 그룹과 newid2 그룹에 속한 newid3 생성시 1차 그룹 1015에 newid3가 포함된 것을 확인
# 하지만 2차그룹 확인은 불가능하다.
[root@localhost ~]# useradd -g 1015 -G 1016 newid3
[root@localhost ~]# cat /etc/passwd | grep newid
newid1:x:1015:1015::/home/newid1:/bin/bash
newid2:x:1016:1016::/home/newid2:/bin/bash
newid3:x:1017:1015::/home/newid3:/bin/bash
# 2차 그룹 확인은 /etc/group 에서 확인이 가능하다.
[root@localhost ~]# cat /etc/group | grep newid
newid1:x:1015:
newid2:x:1016:newid3
# 좀더 명확하게는 id 명령어를 통해 확인이 가능하다.
[root@localhost ~]# id newid3
uid=1017(newid3) gid=1015(newid1) groups=1015(newid1),1016(newid2)
userdel 사용자이름
[newid3@localhost home]$ ls
newid1 newid2 newid3
[newid3@localhost home]$ su root
Password:
[root@localhost home]# userdel newid3
userdel: user newid3 is currently used by process 4956
# 현재 newid3가 로그인 되어 있기 때문에 로그아웃을 진행해준 후 해결해야 한다.
[newid3@localhost home]$ exit
logout
[root@localhost ~]# cd /home
[root@localhost home]# userdel newid3
[root@localhost home]# ls
newid1 newid2 newid3
# 계정을 삭제하더라도 newid3에 대한 홈디렉터리는 남아 있다.
userdel -r 사용자이름 : 사용자이름에 대한 홈디렉터리까지 삭제가 된다.
[root@localhost home]# ls
newid1 newid2 newid3
[root@localhost home]# userdel -r newid2
[root@localhost home]# ls
newid1 newid3
[root@localhost home]# id newid2
id: newid2: no such user
-g 를 통해 새로운 계정에 기존에 있던 그룹을 지정하고 해당 그룹의 그룹의 '장'을 삭제한다면 어떻게 될까?
[root@localhost ~]# id widm1
uid=1016(widm1) gid=1016(widm1) groups=1016(widm1)
[root@localhost ~]# useradd -g 1016 widm3
[root@localhost ~]# cat /etc/passwd | grep widm
widm1:x:1016:1016::/home/widm1:/bin/bash
widm2:x:1017:1017::/home/widm2:/bin/bash
widm3:x:1018:1016::/home/widm3:/bin/bash
# widm1에 대한 계정은 삭제되었다. 하지만 widm1의 GID 1016 에 속해 있는 widm3를 확인할 수 있다.
[root@localhost ~]# userdel widm1
userdel: group widm1 is the primary group of another user and is not removed.
[root@localhost ~]# cat /etc/passwd | grep widm
widm2:x:1017:1017::/home/widm2:/bin/bash
widm3:x:1018:1016::/home/widm3:/bin/bash
[root@localhost ~]# cat /etc/group | grep widm
widm1:x:1016:
widm2:x:1017:
# 계정이 삭제되더라도 id widm1에서 GID의 이름이 widm1 그대로 남아있다.
패스워드 설정하기
[root@localhost ~]# passwd widm2
Changing password for user widm2.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
# -d의 역할은 패스워드를 없애고 패스워드 없이 로그인 가능하게 한다.
[root@localhost ~]# passwd -d widm2
Removing password for user widm2.
passwd: Success
# 계정이 없는 상황에서 passwd를 설정 잡으면 존재하지 않는 user라 설정이 불가능하다.
[root@localhost ~]# passwd widm4
passwd: Unknown user name 'widm4'.
계정 설정 변경
usermod
[root@localhost ~]# cat /etc/passwd | grep widm
widm2:x:1017:1017::/home/widm2:/bin/bash
widm3:x:1018:1016::/home/widm3:/bin/bash
widm4:x:1019:1019::/home/widm4:/bin/bash
# widm4의 1차그룹과 2차그룹 변경이 가능하다.
[root@localhost ~]# usermod -g 1016 -G 1017 widm4
[root@localhost ~]# cat /etc/passwd | grep widm
widm2:x:1017:1017::/home/widm2:/bin/bash
widm3:x:1018:1016::/home/widm3:/bin/bash
widm4:x:1019:1016::/home/widm4:/bin/bash
[root@localhost ~]# cat /etc/group | grep widm
widm1:x:1016:
widm2:x:1017:widm4
widm4:x:1019:
[root@localhost ~]# id widm4
uid=1019(widm4) gid=1016(widm1) groups=1016(widm1),1017(widm2)
# widm4의 UID 설정 변경 또한 가능하다.
[root@localhost ~]# usermod -u 1020 widm4
[root@localhost ~]# id widm4
uid=1020(widm4) gid=1016(widm1) groups=1016(widm1),1017(widm2)
그룹 계정 설정하기
[root@localhost ~]# tail -2 /etc/group
widm4:x:1019:
iruen1:x:1021:
# 기존 그룹명이 동일하게 존재한다.
[root@localhost ~]# groupadd iruen1
groupadd: group 'iruen1' already exists
# 새로운 그룹명으로 생성시 기존 그룹명이 존재하지 않는다면 생성이 된다.
[root@localhost ~]# groupadd iruen2
[root@localhost ~]# tail -2 /etc/group
iruen1:x:1021:
iruen2:x:1022:
# -f 옵션은 이미 생성되어 있더라도 성공으로 간주한다.
[root@localhost ~]# groupadd -f iruen1
[root@localhost ~]# tail -2 /etc/group
iruen1:x:1021:
iruen2:x:1022:
# -g 옵션을 통해 GID를 설정 후 그룹명을 지정하면 생성된다.
[root@localhost ~]# groupadd -g 1023 iruen3
[root@localhost ~]# tail -3 /etc/group
iruen1:x:1021:
iruen2:x:1022:
iruen3:x:1023:
# 그룹 명이 지정되지 않으므로 생성이 불가능하다.
[root@localhost ~]# groupadd 1024
groupadd: '1024' is not a valid group name
[root@localhost ~]# groupadd 1022
groupadd: '1022' is not a valid group name
groupmod : 그룹 정보 변경
[root@localhost ~]# tail -3 /etc/group
iruen1:x:1021:
iruen2:x:1022:
iruen3:x:1023:
# -g 를 통해 변경할GID 기존그룹명 을 입력하여 GID를 변경할 수 있다.
[root@localhost ~]# groupmod -g 1024 iruen1
[root@localhost ~]# tail -3 /etc/group
iruen1:x:1024:
iruen2:x:1022:
iruen3:x:1023:
# -n을 통해 그룹 이름을 변경할 수 있다.
# group -n [변경할 그룹명] [변경전 그룹명]
[root@localhost ~]# groupmod -n iruen1 iruen4
groupmod: group 'iruen4' does not exist
[root@localhost ~]# groupmod -n iruen4 iruen1
[root@localhost ~]# tail -3 /etc/group
iruen2:x:1022:
iruen3:x:1023:
iruen4:x:1024:
그룹삭제하기
# iruen1 계정은 현재 GID 1024(iruen4)에 속해 있다.
[root@localhost ~]# cat /etc/passwd | grep iruen
iruen1:x:1021:1024::/home/iruen1:/bin/bash
[root@localhost ~]# cat /etc/group | grep iruen
iruen2:x:1022:
iruen3:x:1023:
iruen4:x:1024:
[root@localhost ~]# groupdel iruen4
groupdel: cannot remove the primary group of user 'iruen1'
# 1024(iruen4) 그룹 안에 iruen1 계정이 존재하므로 그룹삭제가 불가능하다.
# 그룹안에 아무런 계정이 속해 있지 않았을때 삭제를 하면? 정상적으로 삭제가 완료 된다.
[root@localhost ~]# groupdel iruen2
[root@localhost ~]# cat /etc/group | grep iruen
iruen3:x:1023:
iruen4:x:1024: