■ 사용자 계정 관리
리눅스는 다중 사용자 시스템 (multi user system)


# 사용자 계정 정보
[root@centos ~]# cat /etc/passwd
...
user1:x:1000:1000:user1:/home/user1:/bin/bash

user1 x 1000 1000 user1 /home/user1 /bin/bash
사용자이름 암호(암호화) 사용자ID 사용자가 소속된 그룹ID 전체이름 홈디렉터리 기본셸



# 그룹 정보
[root@centos ~]# cat /etc/group
...
user1:x:1000:user1

user1 x 1000 user1
그룹이름 암호 그룹ID 그룹에 속한 유저






■ useradd, adduser
유저 생성하는 명령어

useradd [옵션] 유저

-g 기본 그룹(1차원 그룹)
-G 2차원 그룹



# 유저 생성 useradd
[root@centos ~]# useradd user2
[root@centos ~]# tail -1 /etc/passwd
user2:x:1001:1001::/home/user2:/bin/bash
[root@centos ~]# tail -1 /etc/group
user2:x:1001:


# 유저 생성 adduser
[root@centos ~]# adduser user3
[root@centos ~]# tail -1 /etc/passwd
user3:x:1002:1002::/home/user3:/bin/bash
[root@centos ~]# tail -1 /etc/group
user3:x:1002:





■ passwd
사용자의 비밀번호를 지정하거나 변경하는 명령어

passwd [옵션] 유저이름

-S 사용자의 패스워드 정보 출력
-l 사용자의 계정 lock
-u 사용자의 계정 unlock
-d 사용자의 패스워드 제거



[root@centos ~]# passwd user2
Changing password for user user2.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@centos ~]# su - user2
[user2@centos ~]$ pwd
/home/user2

[root@centos ~]# passwd -S user3
user3 LK 2023-12-04 0 99999 7 -1 (Password locked.)     ----> 비번설정이 안되어있어서 정보가 없다.
[root@centos ~]# passwd user3
Changing password for user user3.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@centos ~]# passwd -S user3
user3 PS 2023-12-04 0 99999 7 -1 (Password set, SHA512 crypt.)


[root@centos ~]# passwd -l user3
Locking password for user user3.
passwd: Success

[user3@centos ~]$ su - user1
Password:
Last login: Mon Dec  4 10:06:02 KST 2023 on pts/0
[user1@centos ~]$ su - user3
Password:
su: Authentication failure


[root@centos ~]# passwd -u user3
Unlocking password for user user3.
passwd: Success


[root@centos ~]# passwd -d user3
Removing password for user user3.
passwd: Success
>> 유저간 이동은 가능, 신규접속은 비번이 없어 불가


#  패스워드 관리하는 파일 (암호화)
[root@centos ~]# cat /etc/shadow





■  usermod
계정 정보를 변경하는 명령어

usermod [옵션] 유저

-g 기본 그룹(1차원 그룹)
-G 2차원 그룹



[root@centos ~]# usermod -g oinstall -G dba,oper user5
             >>> usermod -g 1차원그룹명 -G 2차원그룹명 대상유저
[root@centos ~]# tail -5 /etc/group
vboxdrmipc:x:980:
oinstall:x:2002:
dba:x:2000:user5
oper:x:2001:user5
user5:x:1001:
[root@centos ~]# id user5
uid=1001(user5) gid=2002(oinstall) groups=2002(oinstall),2000(dba),2001(oper)
uid= 유저ID(유저명) gid=그룹ID(1차원그룹)  groups=1차원 그룹, 2차원그룹


[root@centos ~]# useradd -g oinstall -G dba,oper oracle
             >>> useradd -g 1차원그룹명 -G 2차원그룹명 신규유저명
[root@centos ~]# id oracle
uid=1002(oracle) gid=2002(oinstall) groups=2002(oinstall),2000(dba),2001(oper)
[root@centos ~]# tail -1 /etc/passwd
oracle:x:1002:2002::/home/oracle:/bin/bash
[root@centos ~]# tail -5 /etc/group
vboxdrmipc:x:980:
oinstall:x:2002:
dba:x:2000:user5,oracle
oper:x:2001:user5,oracle
user5:x:1001:



■ userdel
계정 삭제하는 명령어

userdel [옵션] 계정

-r 유저에게 할당된 모든 파일, 디렉터리를 다 삭제
-f 유저가 리눅스에 접속을 했더라도 kill 시킨 후 삭제



[root@centos ~]# userdel user3
userdel: user user3 is currently used by process 3658
[root@centos ~]# tail -3 /etc/passwd
vboxadd:x:987:1::/var/run/vboxadd:/bin/false
user2:x:1001:1001::/home/user2:/bin/bash
user3:x:1002:1002::/home/user3:/bin/bash        >>> 접속중인 경우 삭제가 안되었다

[root@centos ~]# userdel -f user3
userdel: user user3 is currently used by process 3658
[root@centos ~]# tail -3 /etc/passwd
user1:x:1000:1000:user1:/home/user1:/bin/bash
vboxadd:x:987:1::/var/run/vboxadd:/bin/false
user2:x:1001:1001::/home/user2:/bin/bash

[root@centos ~]# ls /home
user1  user2   user3        >>> 삭제옵션 -r 사용을 안하면 남아있다.


[root@centos ~]# userdel -rf user2
[root@centos ~]# tail -3 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
user1:x:1000:1000:user1:/home/user1:/bin/bash
vboxadd:x:987:1::/var/run/vboxadd:/bin/false





■ 그룹 (group)
그룹이란 사용자를 하나로 묶어 관리 가능하게 하는 기능으로 모든 사용자는 그룹에 속하도록 되어있다.
사용자를 그룹을 통하여 관리하면 각 그룹에게 보안설정, 접근설정, 권한 등을 주고 일괄적으로 그룹에 속한 사용자에게 적용할 수 있다.


# 현재 사용자 그룹 확인
[root@centos ~]# groups
root

[user1@centos ~]$ groups
user1


# 그룹 정보
[root@centos ~]# cat /etc/group





■ groupadd
그룹을 생성하는 명령어

-g 번호 그룹 번호 임의 설정



[root@centos ~]# groupadd oinstall
[root@centos ~]# groupadd -g 2000 dba
[root@centos ~]# groupadd -g 2001 oper
[root@centos ~]# tail -3 /etc/group
oinstall:x:1001:
dba:x:2000:
oper:x:2001:


** oinstall, dba, (oper) : 오라클 설치를 위한 필수 그룹





■ groupmod
그룹을 변경하는 명령어
그룹이름, 그룹번호 변경

-n 그룹 이름 변경
-g 그룹 번호 변경



# 그룹명 변경
[root@centos ~]# groupmod -n dbaoper oper
             >>> groupmod -n 새로운그룹명 기존그룹명
[root@centos ~]# tail -3 /etc/group
oinstall:x:1001:
dba:x:2000:
dbaoper:x:2001:

[root@centos ~]# groupmod -n oper dbaoper
[root@centos ~]# tail -3 /etc/group
oinstall:x:1001:
dba:x:2000:
oper:x:2001:


# 그룹 ID 수정
[root@centos ~]# groupmod -g 2002 oinstall
[root@centos ~]# tail -3 /etc/group
oinstall:x:2002:
dba:x:2000:
oper:x:2001:





■ gpasswd
특정 그룹에 유저를 추가, 제거하는 명령어

gpasswd [옵션] 유저

-a 특정 그룹에 새로운 유저(멤버) 추가
-d 특정 그룹에 기존 유저(멤버) 제거



[root@centos ~]# useradd user5
[root@centos ~]# tail -1 /etc/group
user5:x:1001:
[root@centos ~]# tail -1 /etc/passwd
user5:x:1001:1001::/home/user5:/bin/bash
[root@centos ~]# gpasswd -a user5 oinstall
Adding user user5 to group oinstall
[root@centos ~]# tail -5 /etc/group
vboxdrmipc:x:980:
oinstall:x:2002:user5
dba:x:2000:
oper:x:2001:
user5:x:1001:


[root@centos ~]# gpasswd -d user5 oinstall
Removing user user5 from group oinstall
[root@centos ~]# tail -5 /etc/group
vboxdrmipc:x:980:
oinstall:x:2002:
dba:x:2000:
oper:x:2001:
user5:x:1001:





■ groupdel
그룹을 삭제하는 명령어

# 2차원 그룹 삭제
[root@centos ~]# groupdel dba
[root@centos ~]# groupdel oper
[root@centos ~]# id user5
uid=1001(user5) gid=2002(oinstall) groups=2002(oinstall)
[root@centos ~]# id oracle
uid=1002(oracle) gid=2002(oinstall) groups=2002(oinstall)
[root@centos ~]# tail -5 /etc/group
user1:x:1000:user1
vboxsf:x:981:
vboxdrmipc:x:980:
oinstall:x:2002:
user5:x:1001:


# 1차원 그룹 삭제
[root@centos ~]# groupdel oinstall
groupdel: cannot remove the primary group of user 'user5'         >> 연결된 유저가 있어 삭제가 안된다.
root@centos ~]# usermod -g user5 user5
[root@centos ~]# id user5
uid=1001(user5) gid=1001(user5) groups=1001(user5)
[root@centos ~]# groupdel oinstall
groupdel: cannot remove the primary group of user 'oracle'        >> 연결된 유저가 있어 삭제가 안된다.
[root@centos ~]# usermod -g oracle oracle
usermod: group 'oracle' does not exist
[root@centos ~]# groupadd oracle
[root@centos ~]# usermod -g oracle oracle
[root@centos ~]# groupdel oinstall
[root@centos ~]# tail -5 /etc/group
user1:x:1000:user1
vboxsf:x:981:
vboxdrmipc:x:980:
user5:x:1001:
oracle:x:2003:





■ 파일의 접근 권한 관리

★ 권한의 종류 3가지
1. 읽기(read) 권한
2. 쓰기(write) 권한
3. 실행(execute) 권한

권한 대표문자 file directory
읽기권한 r 읽기, copy 디렉터리에서 ls 실행 가능
쓰기권한 w 수정 디렉터리에서 파일을 생성
실행권한 x shell script 실행 디렉터리에 cd로 접근 가능



[user1@centos ~]$ cp /etc/passwd .
[user1@centos ~]$ ls -l passwd
-rw-r--r--. 1 user1 user1 2436 Dec  4 11:51 passwd

rw- r-- r--
파일의 소유자의 권한 그룹의 권한 기타사용자 권한



u 유저
g 그룹
o 기타유저
a 전체
R 서브 디렉터리 포함

 

+ 권한 부여
- 권한 해지

 

r 읽기
w 쓰기
x 실행




■ chmod
권한을 수정하는 명령어

[user1@centos ~]$ ls -l passwd
-rw-r--r--. 1 user1 user1 2436 Dec  4 11:51 passwd
[user1@centos ~]$ chmod u+x passwd
[user1@centos ~]$ ls -l passwd
-rwxr--r--. 1 user1 user1 2436 Dec  4 11:51 passwd

[user1@centos ~]$ chmod g+w passwd
[user1@centos ~]$ ls -l passwd
-rwxrw-r--. 1 user1 user1 2436 Dec  4 11:51 passwd

[user1@centos ~]$ chmod o+w passwd
[user1@centos ~]$ ls -l passwd
-rwxrw-rw-. 1 user1 user1 2436 Dec  4 11:51 passwd

[user1@centos ~]$ chmod a-w passwd
[user1@centos ~]$ ls -l passwd
-r-xr--r--. 1 user1 user1 2436 Dec  4 11:51 passwd

[user1@centos ~]$ chmod a+rwx passwd
[user1@centos ~]$ ls -l passwd
-rwxrwxrwx. 1 user1 user1 2436 Dec  4 11:51 passwd

[user1@centos ~]$ chmod a-rwx passwd
[user1@centos ~]$ ls -l passwd
----------. 1 user1 user1 2436 Dec  4 11:51 passwd

[user1@centos ~]$ chmod a+r passwd
[user1@centos ~]$ ls -l passwd
-r--r--r--. 1 user1 user1 2436 Dec  4 11:51 passwd


[user8@centos ~]$ ls -l /home
total 4
drwx------.  3 oracle oracle   78 Dec  4 11:08 oracle
drwx------. 17 user1  user1  4096 Dec  4 12:09 user1
drwx------.  3 user5  user5    78 Dec  4 10:57 user5
drwx------.  5 user8  user8   107 Dec  4 12:10 user8
>>> 소유자 외 권한 없다. 단, root는 가능


[root@centos ~]# chmod a+r /home/user1
[user8@centos ~]$ ls -l /home/user1
ls: cannot access /home/user1/Desktop: Permission denied
...
d????????? ? ? ? ?            ? Desktop
...
>>> user1디렉터리에 대한 읽기가능

[user8@centos ~]$ cd /home/user1
-bash: cd: /home/user1: Permission denied
>>> 권한없다


[root@centos ~]# chmod a+x /home/user1
[root@centos ~]# ls -l /home/ user1
total 1
drwxr-xr-x. 17 user1  user1  4096 Dec  4 12:09 user1
[user8@centos user1]$ ls -l /home/user1
total 4
drwxr-xr-x. 2 user1 user1    6 Nov 30 17:19 Desktop
drwxr-xr-x. 2 user1 user1    6 Nov 30 17:19 Documents
...


[root@centos ~]# ls -l /home
drwxr-xr-x. 17 user1  user1  4096 Dec  4 12:09 user1
[root@centos ~]# chmod go-rwx /home/user1
drwx------. 17 user1  user1  4096 Dec  4 12:09 user1



■ 권한을 설정하는 숫자
r w x    r w x    r w x
4 2 1    4 2 1    4 2 1

0 권한을 허용하지 않겠다
1 실행(x) 권한 허용
2 쓰기(w) 권한 허용
4 읽기(r) 권한 허용



[user1@centos ~]$ chmod 000 ls_print
[user1@centos ~]$ ls -l ls_print
----------. 1 user1 user1 1970 Dec  4 13:49 ls_print

[user1@centos ~]$ chmod 777 ls_print
[user1@centos ~]$ ls -l ls_print
-rwxrwxrwx. 1 user1 user1 1970 Dec  4 13:49 ls_print

[user1@centos ~]$ chmod 744 ls_print
[user1@centos ~]$ ls -l ls_print
-rwxr--r--. 1 user1 user1 1970 Dec  4 13:49 ls_print


[user1@centos ~]$ mkdir -p u01/u02
[user1@centos ~]$ ls -ld u01
drwxrwxr-x. 3 user1 user1 17 Dec  4 14:08 u01
[user1@centos ~]$ cd u01
[user1@centos u01]$ ls -ld u02
drwxrwxr-x. 2 user1 user1 6 Dec  4 14:08 u02
[user1@centos ~]$ chmod -R 755 u01
[user1@centos ~]$ ls -ld u01
drwxr-xr-x. 3 user1 user1 17 Dec  4 14:08 u01
[user1@centos ~]$ ls -ld ~/u01/u02
drwxr-xr-x. 2 user1 user1 6 Dec  4 14:08 /home/user1/u01/u02



■ 기본 접근 권한
리눅스에서는 파일이나 디렉터리를 생성할 때 기본 접근 권한이 자동으로 설정된다.

[user1@centos ~]$ ls -al > ls_print
[user1@centos ~]$ ls -l ls_print
-rw-rw-r--. 1 user1 user1 1970 Dec  4 13:49 ls_print

[user1@centos ~]$ mkdir new
[user1@centos ~]$ ls -ld new
drwxrwxr-x. 2 user1 user1 6 Dec  4 13:50 new

[user1@centos ~]$ umask
0002


# 마스크 값을 문자로 출력
[user1@centos ~]$ umask -S
u=rwx,g=rwx,o=rx
>>> 디렉터리 생성권한 떄문에 x를 보여줄 뿐 일반파일에서는 해당 안됨
리눅스에서는 기본적으로 파일을 생성하면 실행권한('x')을 갖고 생성하지 못하도록 되어있다.


일반 파일의 최대 권한 : 666
rw- rw- rw-
110 110 110 -> 10진수 : 666
000 000 010 -> 마스크값 : 002
666 - 002 = 664 기준으로 파일이 만들어 진다. -> rw-rw-r--


디렉터리의 최대 권한 : 777
rwx rwx rwx
111 111 111 -> 10진수 : 777
000 000 010 -> 마스크값 : 002
777 - 002 = 775 기준으로 파일이 만들어 진다. -> rwxrwxr-x


# umask 수정
[user1@centos ~]$ umask 022    --> 기준 수정
[user1@centos ~]$ umask -S
u=rwx,g=rx,o=rx
[user1@centos ~]$ cal > cal_print
[user1@centos ~]$ ls -l cal_print
-rw-r--r--. 1 user1 user1 150 Dec  4 14:28 cal_print
[user1@centos ~]$ mkdir u
[user1@centos ~]$ ls -ld u
drwxr-xr-x. 2 user1 user1 6 Dec  4 14:29 u


[root@centos ~]# umask
0022
[root@centos ~]# date > date_test
[root@centos ~]# ls -l date_test
-rw-r--r--. 1 root root 29 Dec  4 14:33 date_test
[root@centos ~]# mkdir u01
[root@centos ~]# ls -ld u01
drwxr-xr-x. 2 root root 6 Dec  4 14:33 u01


일반계정 002
root계정 022
유닉스계열 022





■ chown
파일이나 디렉터리의 소유자와 소유그룹을 변경하는 명령어. 소유자가 진행.

chown [옵션] 소유자:그룹 파일(디렉터리)
chown [옵션] 소유자 파일(디렉터리)

-R 디렉터리 내 모든 파일과 서브디렉터리 포함



[root@centos ~]# cal > /home/user1/cal_12
[user1@centos ~]$ ls -l cal_12
-rw-r--r--. 1 root root 150 Dec  4 15:02 cal_12
[user1@centos ~]$ chmod 666 cal_12
chmod: changing permissions of ‘cal_12’: Operation not permitted
[root@centos ~]# chown user1:user1 /home/user1/cal_12
[root@centos ~]# ls -l /home/user1/cal_12
-rw-r--r--. 1 user1 user1 150 Dec  4 15:02 /home/user1/cal_12
[user1@centos ~]$ chmod 666 cal_12
[user1@centos ~]$ ls -l cal_12
-rw-rw-rw-. 1 user1 user1 150 Dec  4 15:02 cal_12


# 서브디렉터리의 소유자와 소유 그룹 변경
[root@centos ~]# mkdir -p /home/user1/temp1/temp2
[root@centos ~]# cal > /home/user1/temp1/cal_12
[root@centos ~]# date > /home/user1/temp1/temp2/date_12
[root@centos ~]# ls -ldR /home/user1/temp1
drwxr-xr-x. 3 root root 33 Dec  4 15:13 /home/user1/temp1
[root@centos ~]# ls -lR /home/user1/temp1/
/home/user1/temp1/:
total 4
-rw-r--r--. 1 root root 150 Dec  4 15:13 cal_12
drwxr-xr-x. 2 root root  21 Dec  4 15:13 temp2

/home/user1/temp1/temp2:
total 4
-rw-r--r--. 1 root root 29 Dec  4 15:13 date_12
[root@centos ~]# chown -R user1:user1 /home/user1/temp1
[root@centos ~]# ls -ld /home/user1/temp1/
drwxr-xr-x. 3 user1 user1 33 Dec  4 15:13 /home/user1/temp1/
[root@centos ~]# ls -lR /home/user1/temp1/
/home/user1/temp1/:
total 4
-rw-r--r--. 1 user1 user1 150 Dec  4 15:13 cal_12
drwxr-xr-x. 2 user1 user1  21 Dec  4 15:13 temp2

/home/user1/temp1/temp2:
total 4
-rw-r--r--. 1 user1 user1 29 Dec  4 15:13 date_12


# 소유자만 변경
[root@centos ~]# date > /home/user1/date_12
[root@centos ~]# ls -l /home/user1/date_12
-rw-r--r--. 1 root root 29 Dec  4 15:22 /home/user1/date_12
[root@centos ~]# chown user1 /home/user1/date_12
[root@centos ~]# ls -l /home/user1/date_12
-rw-r--r--. 1 user1 root 29 Dec  4 15:22 /home/user1/date_12





■ chgrp
파일이나 디렉터리의 소유 그룹을 변경하는 명령어

[root@centos ~]# chgrp user1 /home/user1/date_12
[root@centos ~]# ls -l /home/user1/date_12
-rw-r--r--. 1 user1 user1 29 Dec  4 15:22 /home/user1/date_12


# 디렉터리 안에 있는 파일, 서브디렉터리의 소유 그룹 변경
[root@centos ~]# chgrp -R root /home/user1/temp1
[root@centos ~]# ls -Rl /home/user1/temp1
/home/user1/temp1:
total 4
-rw-r--r--. 1 user1 root 150 Dec  4 15:13 cal_12
drwxr-xr-x. 2 user1 root  21 Dec  4 15:13 temp2

/home/user1/temp1/temp2:
total 4
-rw-r--r--. 1 user1 root 29 Dec  4 15:13 date_12





■ tar
파일을 압축하고 압축해제하는 명령어


# 압축할 때
tar cvf 압축파일명 압축대상파일

# 압축 해제
tar xvf 압축파일명 압축해제할위치

-c compress, 여러개의 파일을 하나로 만든다.
-v view, 압축되는 과정을 화면에 출력
-f file, 생성될 파일명을 지정
-x extract, 묶여있는 파일을 해제
-C 압축이 풀릴 위치 지정
-z gzip, 압축 적용 옵션, 알아서 디렉터리 생



[user1@centos ~]$ mkdir test
[user1@centos ~]$ cal > ./test/cal_12
[user1@centos ~]$ date > ./test/date_12
[user1@centos ~]$ date > ./test/date_2023
[user1@centos ~]$ cd test
[user1@centos test]$ ls -l
total 12
-rw-rw-r--. 1 user1 user1 150 Dec  4 16:11 cal_12
-rw-rw-r--. 1 user1 user1  29 Dec  4 16:12 date_12
-rw-rw-r--. 1 user1 user1  29 Dec  4 16:12 date_2023
[user1@centos test]$ tar cvf all.tar *
cal_12
date_12
date_2023
[user1@centos test]$ ls -l
total 24
-rw-rw-r--. 1 user1 user1 10240 Dec  4 16:13 all.tar
-rw-rw-r--. 1 user1 user1   150 Dec  4 16:11 cal_12
-rw-rw-r--. 1 user1 user1    29 Dec  4 16:12 date_12
-rw-rw-r--. 1 user1 user1    29 Dec  4 16:12 date_2023


[user1@centos test2]$ cd
[user1@centos ~]$ tar xvf ./test/all.tar -C ./test2
cal_12
date_12
date_2023
[user1@centos ~]$ ls -l ./test2
total 12
-rw-rw-r--. 1 user1 user1 150 Dec  4 16:11 cal_12
-rw-rw-r--. 1 user1 user1  29 Dec  4 16:12 date_12
-rw-rw-r--. 1 user1 user1  29 Dec  4 16:12 date_2023



[root@centos ~]# mkdir -p /usr/java
[root@centos ~]# mv jdk-8u131-linux-x64.tar.gz /usr/java
[root@centos usr]# cd /usr/java
[root@centos java]# tar xvfz jdk-8u131-linux-x64.tar.gz
[root@centos java]# ls -l
total 181192
drwxr-xr-x. 8   10  143       255 Mar 15  2017 jdk1.8.0_131
-rw-r--r--. 1 root root 185540433 Dec  4 16:08 jdk-8u131-linux-x64.tar.gz
[root@centos java]# cd jdk1.8.0_131/
[root@centos jdk1.8.0_131]# java -version
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)



* user 생성 시 기본 디렉터리가 없다? gui환경에서 생성하면 생긴다.
* /usr : 윈도우의 프로그램 폴더 비슷





cat /etc/passwd
cat /etc/group
useradd
adduser
passwd
usermod
userdel
groups
groupadd
groupmod
gpasswd
groupdel
chmod
umask
chown
chgrp
tar