gpasswd - /etc/group, /etc/gshadow 파일을 관리한다.
#gpasswd [옵션] [그룹명]
-a [계정] 사용자 계정을 그룹에 추가한다.
-d [계정] 사용자 계정을 그룹에서 삭제한다.
-r 그룹 암호를 삭제한다.
1. 사용자 계정 추가
#useradd member1
#useradd member2
2. 그룹추가
#groupadd -g 2017 group2017
#cat /etc/passwd | tail -2 // 계정 생성 확인
#cat /etc/group | tail -1 // 그룹 생성 확인
3. 사용자 계정을 그룹에 추가
#gpasswd -a member1 group2017 // member1 계정을 group2017 그룹에 추가
#usermod -G 2017 member2 // member2 계정을 group2017 그룹에 추가
group2017 member2
#cat /etc/passwd | tail -2 // GID 필드 확인
#cat /etc/group | tail -1 // 멤버 필드 확인
group2017:x:2017:member1,member2
#groups [계정명]
#groups member1 member2
[계정명]: [주그룹] [보조그룹] ... [보조그룹]
member1 : member1 group2017
member2 : member2 group2017
4. 그룹 멤버 삭제
#gpasswd -d member2 group2017 // group2017 그룹에서 member2 계정 제거
#cat /etc/group | tail -1
#groups member2
5. 그룹 암호 설정
#gpasswd group2017 // group2017 그룹에 패스워드 설정
group2017 그룹의 암호를 바꾸는 중
새 암호:
새 암호를 다시 입력하십시오:
#cat /etc/gshadow | tail -1 // 패스워드 설정 확인
6. 그룹 패스워드 용도 확인
#gpasswd -a member2 wheel // member1 계정을 wheel 그룹에 추가
#id member2
uid=1240(member2) gid=1241(member2) groups=1241(member2),10(wheel)
#su - member2 // member2 계정 스위칭
$groups // 소속 그룹 확인
member2 wheel // 주 그룹 member2
보조그룹 wheel
$newgrp wheel // member2 <--> wheel
$groups // 주그룹 member2를 wheel 로 변경
wheel member2
$newgrp group2017 // 자신이 속한 그룹이아닌 다른 그룹으로
$groups // 주그룹을 변경
group2017 wheel member2 // group2017 그룹에 암호가 설정되어 있어
변경 시 해당 그룹에 암호가 필요하다.
sudo 권한 설정
사용자 추가나, 시스템 종료 등 특정 명령어만 실행할 수 있는 권한을 부여하는것
sudo 권한 설정 파일
/etc/sudoers
sudo 권한 설정 명령어
visudo == vi /etc/sudoers // 차이점은 오타나 문법이 틀렸을때 저장이 안됨
vipw == vi /etc/passwd
vigw == vi /etc/groups
90 ## Allow root to run any commands anywhere
91 root ALL=(ALL) ALL
[계정명] [호스트]=(옵션) [명령어]
실습 1
(1) 일반 사용자 계정으로 로그인 ( member1 ) 후, 일반 사용자가
사용할 수 없는 명령어 3개 찾기
(2) 명령어 실행이 불가능 한 것 확인 후, 해당 명령어가 위치한
절대 경로 확인 ( shutdown, reboot, halt 등 제외 )
절대 경로 확인 방법 - #which [명령어]
명령어 1 경로 : /usr/sbin/useradd
명령어 2 경로 : /usr/sbin/usermod
명령어 3 경로 : /usr/sbin/userdel
#visudo
member1 ALL=/usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod
#su - member1
$passwd // 암호 설정
$sudo [명령어]
$sudo useradd sudotest-1
[sudo] password for member1: // member1 암호 입력
$cat /etc/passwd | tail -1 //sudotest-1 계정 생성 확인
$sudo usermod -c "sudo-test" sudotest-1 //usermod 실행 확인
$cat /etc/passwd | tail -1 //sudotest-1 계정 정보 변경 확인
$sudo userdel -r sudotest-1 // sudotest-1 계정 삭제
$cat /etc/passwd | tail -1 // 계정 삭제 확인
패스워드 없이 sudo 명령어 사용 설정
#visudo
member1 ALL=NOPASSWD: /usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod
------------------------------------------------------------------------------
패스워드 정책 설정
chage - 패스워드 정책 설정
-l 설정 내용 확인
-d : 최종 암호 변경일 (/etc/shadows 3번째 필드)
-m : 암호를 변경한 후 다시 변경할 수 있는 최소 기간 (/etc/shadows 4번째 필드)
-M : 유효한 암호의 최대 일 수 (/etc/shadows 5번째 필드)
-W : 사용자가 암호가 만료되기전 경고할 일 수 (/etc/shadows 6번째 필드)
-I : 암호 유효기간이 발료된 후 사용자의 계정이 비활성화 될 일 수 (/etc/shadows 7번째 필드)
-E : 사용자 계정을 사용할 수 있는 유효기간 (YYYY/MM/DD) (/etc/shadows 8번째 필드)
시스템 날짜 변경
#date -s "2017-04-02"
2017. 04. 02. (일) 00:00:00 KST
계정명 : member1 계정 유효 기간 : 2018-04-02
최초 설정한 암호는 최소 하루뒤에 변경 할 수 있으며, 암호는 10일에 한번씩 변경해야 하고,
최소 3일 전에 암호를 변경할 수 있도록 경고를한다. 만약 암호가 만료된 10일 뒤에도
암호를 변경하지 않으면 계정을 비활성화 시킨다.
#passwd memeber1
#chage -l member1 //member1 계정의 패스워드 정책 확인
마지막으로 암호를 바꾼 날 : 4월 02, 2017
암호 만료 : 안함
암호가 비활성화 기간 : 안함
계정 만료 : 안함
암호를 바꿀 수 있는 최소 날 수 : 0
암호를 바꿔야 하는 최대 날 수 : 99999
암호 만료 예고를 하는 날 수 : 7
최초 설정한 암호는 최소 하루뒤에 변경 할 수 있으며 ( m 1 )
암호는 10일에 한번씩 변경해야 하고, ( M 10 )
최소 3일 전에 암호를 변경할 수 있도록 경고를한다. ( W 3 )
만약 암호가 만료된 10일 뒤에도 암호를 변경하지 않으면 계정을 비활성 ( I 10 )
계정 유효 기간 : 2018-04-02 ( E 2018/04/02 )
#chage -E 2018/04/04 -m 1 -M 10 -W 3 -I 10 member1
#chage -l member1
마지막으로 암호를 바꾼 날 : 4월 02, 2017
암호 만료 : 4월 12, 2017
암호가 비활성화 기간 : 4월 22, 2017
계정 만료 : 4월 04, 2018
암호를 바꿀 수 있는 최소 날 수 : 1
암호를 바꿔야 하는 최대 날 수 : 10
암호 만료 예고를 하는 날 수 : 3
1번 세션 (root) 2번 세션 (member1)
#su - member1
$passwd
(현재) UNIX 암호:
암호 변경을 위해 조금더 기다려 주십시오.
#date -s "2017-04-03" $passwd
#date -s "2017-04-09" $su - memeber1 // member1 로그인
#date -s "2017-04-10" 2 $su - memeber1 // member1 로그인
#date -s "2017-04-11" 1 $su - memeber1 // member1 로그인
#date -s "2017-04-12" 0 $su - memeber1 // member1 로그인
#date -s "2017-04-13" $su - memeber1 // member1 로그인
#date -s "2017-04-02"
#passwd member1
#chage -E 2018/04/04 -m 1 -M 10 -W 3 -I 10 member1
#chage -l member1
#chage -d 2017/04/02 member1
#date -s "2017-04-09" $su - memeber1 // member1 로그인
#date -s "2017-04-10" 2 $su - memeber1 // member1 로그인
#date -s "2017-04-11" 1 $su - memeber1 // member1 로그인
#date -s "2017-04-12" 0 $su - memeber1 // member1 로그인
#date -s "2017-04-13" $su - memeber1 // member1 로그인
디렉토리 및 파일의 권한과 소유권
- 시스템에 있는 모든 파일과 디렉토리는 접근 할 수 있는 권한 및 소유권 부여되어있다.
- 파일이나 디렉토리의 접근을 제한 것을 허가권(Permission)이라 한다.
- 파일이나 디렉토리의 소유권한을 소유권 (Ownership) 이라고 한다.
실습용 계정,그룹 생성
#groupadd -g 800 web_user
#groupadd -g 900 web_admin
#useradd -g 800 web-user1
#useradd -g 900 web-admin1
#cat /etc/passwd
web-user1:x:500:800::/home/web-user1:/bin/bash
web-admin1:x:501:900::/home/web-admin1:/bin/bash
#ll /bin/ls
-rwxr-xr-x. 1 root root 109208 2016-05-11 17:59 /bin/ls
root root
[소유계정] [소유그룹]
chown (change ownership / 소유권 변경)
형식 - #chown [소유계정]:[소유그룹] [파일/디렉토리명]
#cd /home/web-user1
#touch test
#ll
-rw-r--r--. 1 root root 0 2017-04-02 12:29 test
#chown web-admin1 test // test 파일의 소유자를 web-admin1 변경
#ll
-rw-r--r--. 1 web-admin1 root 0 2017-04-02 12:29 test
#chown web-user1 test
-rw-r--r--. 1 web-user1 root 0 2017-04-02 12:29 test
#chown web-admin1:web_admin test // test 파일의 소유계정:소유그룹 변경
-rw-r--r--. 1 web-admin1 web_admin 0 2017-04-02 12:29 test
test파일의 소유권 변경
소유계정 : web-user1
소유그룹 : web_user
#chown web-admin1:web_admin test
#chown web-admin1.web_admin test
형식 - #chown [소유계정]:[소유그룹] [파일/디렉토리명]
chown [계정명] [파일] 소유계정 변경
chown :[그룹명] [파일] 소유 그룹 변경
허가권 (Permission)
-rwxrwxrwx
- r w x r w x r w x
파일 유형 사용자(User) 그룹(Group) 기타사용자(Other)
소유 계정 소유 그룹
rwx의 의미
r (Read) - 읽기
w (Write) - 쓰기
x (eXecute) - 실행
- (bar) - 해당 권한이 없는 경우
ex)
rwxr-xr-x : 사용자는 읽기, 쓰기, 실행권한을 모두 가지고 있고,
그룹과 기타사용자는 읽기와 실행권한만 있다.
rw------- : 사용자만 읽고 쓰기가 가능하고, 그룹과 기타사용자는 아무 권한이 없다.
r-------- : 사용자만 읽기 권한을 가지고 있다.
#ll /etc/passwd /etc/shadow
chmod - 허가권 변경
- 기호 모드 (상대값) (symbolic mode) - 사람의 입장
- 숫자 모드 (절대값) (absolute mode) - 컴퓨터의 입장
chmod [옵션] [기호/숫자모드] [파일명]
-R 하위 디렉토리 및 파일까지 전부 적용
- 기호모드
+ : 허가권 부여 u : 사용자(소유자) 권한
- : 허가권 제거 g : 그룹 권한
= : 허가권 유지 o : 기타 사용자
s : SetUID,SetGID 권한 부여 a : 사용자, 그룹, 기타 사용자 모두
t : Sticky Bit 권한 부여
ex) 허가권 rwx r-x r-x 파일명 test
-> 그룹과 기타사용자의 x(실행)권한을 제거
#chmod go-x test
-> 그룹에는 쓰기권한 추가, 기타사용자에게 읽기, 실행권한 제거
#chmod g+w,o-rx test
#mkdir -p /practice/symbolic_chmod/
#cd /practice/symbolic_chmod/
#touch test-file
#ll
rw- r-- r-- test-file
(1)파일의 소유자(사용자), 그룹과 기타사용자에 실행권한 추가
rwx r-x r-x
#chmod u+x,g+x,o+x test-file
#chmod a+x test-file
(2) 파일의 소유자의 모든 권한을 제거하고, 그룹은 모든권한, 기타사용자는
쓰기 권한만 추가
--- rwx -w-
#chmod u-rwx,g+w,o-rx+w test-file
(3) 사용자, 그룹, 기타 사용자 모두 읽기와 쓰기 권한만 추가
rw- rw- rw-
#chmod u+rw,g-x,o+r test-file
- 숫자 모드
- 각각의 허가권 필드를 3자리의 8진수로 표기
- 완전환 표기법은 4자리이나 일반적으로 3자리를 사용
사용자 필드 허가권 기호 숫자모드
사용자 읽기 r 400 (100단위)
쓰기 w 200
실행 x 100
그룹 읽기 r 40 (10단위)
쓰기 w 20
실행 x 10
기타 사용자 읽기 r 4 (1단위)
쓰기 w 2
실행 x 1
ex) rwx r-x r-x
사용자 400 + 200 + 100 = 700
그룹 40 + 10 = 50
기타 사용자 4 + 1 = 5
= 755
사용자 필드 사용자 그룹 기타 사용자
r w x r w x r w x
자리수 4 2 1 4 2 1 4 2 1
2진수 1 1 1 1 1 1 1 1 1
8진수 7 7 7
r w x r - x r - x
1 1 1 1 0 1 1 0 1
7 5 5
r - x r - x r - x
4 + 1 4 + 1 4 + 1
5 5 5
test-file
chmod 744 test-file ( rwx r-- r-- )
ex) rwx rwx r-x ( 7 7 5 )
r-x r-- --- ( 5 4 0 )
rw- rwx --x ( 6 7 1 )
디렉토리 허가권 테스트
#cd /practice/symbolic_chmod/
#mkdir test-dir
#chmod 000 test-dir
--- --- ---
세션 추가
1번 세션 root 2번 세션 web-admin1
# #su - web-admin1
$cd /practice/symbolic_chmod/
test-dir 디렉토리의 허가권을 001, 002, 003 ... 007 까지 변경하면서
허가권 변경하는 명령어 입력 후, 2번세션에서 아래 명령어 테스트
(1) $cd test-dir X
성공 시 (2), (3) 진행 후 cd.. 으로 상위 디렉토리 이동 후 다음 권한 진행
(2) $touch test W
(3) $ls R
--x (1) O (2) X (3) X
-w- (1) X (2) X (3) X
-wx (1) O (2) O (3) X
r-- (1) X (2) X (3) X
r-x (1) O (2) X (3) O
rw- (1) X (2) X (3) X
rwx (1) O (2) O (3) O
UMASK - 새로운 파일/디렉토리 생성 시 기본 허가권을 경정하는 기준이되는 값
- 기본값 022
- 파일의 기본 허가권 666
- 디렉토리의 기본 허가권 777
- 파일이나 디렉토리의 기본 허가권에서 UMASK 값을 뺀 값이 허가권으로 결정
디렉토리 파일
기본값 777 666
UMASK 022 022
결정된 허가권 755 644
기호 rwx r-x r-x rw- r-- r--
#mkdir test123 // 디렉토리 허가권 확인
#touch test456 // 파일 허가권 확인
#umask // 현재 시스템에 설정된 UMASK 값을 확인하는 명령어
0022
#umask [값] // [값]으로 UMASK 값 변경
#umask 007 // UMASK 값 변경
#umask
0007
디렉토리 파일
777 666 기본값
007 007 UMASK
770 660 적용값
RWX RWX --- RW- RW- ---
777 666
020 020 UMASK
757 646
RWX R-X RWX RW- R-- RW-
#umask 022
#cd /home
#ll
rwx------. 2 web-admin1 web_admin 4096 2017-04-02 12:15 web-admin1
drwx------. 2 web-user1 web_user 4096 2017-04-02 12:29 web-user1
#useradd -g web_admin web-admin2
계정 그룹
web-admin1 web_admin
web-admin2
web-admin2 계정이 web-admin1의 홈디렉토리 접근, 읽기, 쓰기가 가능 하도록 설정
단, 기타 사용자 권한은 수정X
#chmod 770 web-admin1
rrwxwx---. 2 web-admin1 web_admin 4096 2017-04-02 12:15 web-admin1
#su - web-admin2
$cd /home/web-admin1 (x)
$touch test1 (w)
$ls (r)
특수권한의 종류 SetUID, SetGID, StickyBit
SetUID
- 실행파일에 한해서 설정이 가능하며, SetUID 속성이 있는 경우
실행한 사용자가 아닌 파일을 소유한 사용자의 권한으로 프로세스(프로그램) 실행된다.
- SetUID는 보통 root가 소유한 실행파일에 적용을 하며, 이런 경우에 해당 파일을
실행하는 순간에는 root의 권한을 가지게 된다.
#ll /etc/passwd /etc/shadow
644 400
rw- r-- r-- r-- --- ---
#su - web-admin1
$passwd // 명령어 실행 가능
$exit
#ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 2015-11-24 01:30 /usr/bin/passwd
SetUID 설정방법
기호모드 (u+s)
숫자모드 (4000)
#cd /practice
#mkdir SetUID
#cd SetUID
#touch SetUID-FILE-1
#touch SetUID-FILE-2
#chmod 4644 SetUID-FILE-1
#chmod 4544 SetUID-FILE-2
#ll
-rwSr--r--. 1 root root 0 2017-04-02 14:51 SetUID-FILE-1
-r-sr--r--. 1 root root 0 2017-04-02 14:51 SetUID-FILE-2
실행 권한이 있는 파일 : s
없는 파일 : S
#cat > SetUID-FILE-3
SetUID FILE TEST!!!!!!!!
#chmod 400 SetUID-FILE-3
-r--------. 1 root root 23 2017-04-02 14:55 SetUID-FILE-3
#su - web-admin1
$cat /practice/SetUID/SetUID-FILE-3
$exit
#ll /bin/cat
-rwxr-xr-x. 1 root root 45224 2016-05-11 17:59 /bin/cat
#chmod u+s /bin/cat
#ll /bin/cat
-rwsr-xr-x. 1 root root 45224 2016-05-11 17:59 /bin/cat
#su - web-admin1
$cat /practice/SetUID/SetUID-FILE-3
#su - webadmin1
$whoami
$who am i
UID - RUID (Real UID)
web-admin1
EUID (Effective UID)
root pts/1 2017-04-02 22:40 (100.100.100.1)
GID - RGID
EGID
원상복구
cat 파일의 SetUID 제거
#chmod u-s /bin/cat