4월8일 (토)
SetGID
- 프로세스가 실행한 사용자의 GID가아닌 소유한 그룹의 GID권한으로 실행된다.
- SetGID가 설정된 디렉토리에서 만들어지는 파일은 모두 해당 디렉토리의
소유 그룹 허가권을 갖는다.
SetGID 설정밥법
- 기호모드 (g+s)
- 숫자모드 (2000)
- 팀단위로 작업할 경우 모든 사용자가 파일을 공유하도록 할때 사용된다.
Sticky Bit
- 모든 사용자가 생성/수정/삭제가 가능한 디렉토리에 적용하며, StickyBit 설정 후
에는 해당 파일의 소유자만 해당 파일을 삭제할 수 가 있다.
StickyBit 설정
-기호모드 (o+t)
-숫자모드 (1000)
#cd /practice
#mkdir sticky_test
#cd sticky_test
#mkdir temp1 temp2
#chmod 1777 temp1 // 스티키 설정
#chmod 777 temp2 // 일반 777 권한 설정
#touch ./temp1/test1 // 테스트 파일 생성
#touch ./temp2/test1 // 테스트 파일 생성
#chmod 777 temp1/test1 // 777 허가권으로 수정
#chmod 777 temp2/test1 // 777 허가권으로 수정
#useradd web-admin1 // 사용자 계정 추가
#su - web-admin1 // 계정으로 스위칭
$cd /practice/sticky_test
$cd temp2
$ll
rwx rwx rwx -> test1
$rm test1 // 파일 삭제 가능
$cd ..
$cd /temp1
$ll rwx rwx rwx -> test1
rwx rwx rwx ->test1 // 파일 삭제 가능
$rm test1
rm: cannot remove `test1': 명령을 허용하지 않음
허가권이 있음에도 삭제(rm, mv)를 할수가 없다.
속성 (attribution)
chattr - 특정파일에 속성을 변경하고자 할때 사용
lsattr - 특정파일에 속성을 확인하고자 할때 사용
속성의 종류
i (immutable) - 해당 파일의 내용 변경, 삭제, 링크 생성 등을 할수가 없다.
a (append only) - 해당 파일의 내용만 추가가 가능하고, 삭제, 링크 생성 등은
할 수 가 없다.
+ 지정한 속성을 추가
- 지정한 속성을 제거
a_test 파일에 a속성 추가
#cat > a_test // X
#cat >> a_test // O
#vi a_test // X
#rm a_test // X
e는 ext4 포멧을 ext3 포멧으로 변형시켜 주는 것
ACL (Access Control List / 접근 제어 목록)
- 디렉토리 및 파일에 특정 사용자, 그룹에 특정 권한을 부여하는
기능이다.
getfacl [옵션] - 파일과 디렉토리에 ACL 설정 확인
-d 기본 정보에 대해 확인
-R 하위 디렉토리 및 파일까지 적용
setfacl [옵션] [규칙] [파일명]
- 파일과 디렉토리에 ACL 설정
-m 권한을 수정할 때 사용
-x 권한을 삭제할 때 사용
-R 하위 디렉토리 및 파일까지 적용
-b 권한 및 mask를 전부 제거
규칙
u:[UID]:[권한] - 사용자에 대한 ACL을 설정
g:[GID]:[권한] - 그룹에 대한 ACL을 설정
o:[권한] - 기타사용자에대한 ACL을 설정
ex) 계정명 test1
test1 계정의 UID 500
1. u:500:rwx group:500:rwx
2. user:500:rwx g:S-GROUP:rwx
3. user:test1:rwx other:rwx
4. u:test1:rwx
5. u:test1:1 -> --x u:test1:7
6. u:test1:2 -> -w-
7. u:test1:7 -> rwx
# getfacl S-LV01 // S-LV01 디렉토리에 ACL설정을 확인
# file: S-LV01 // 파일/디렉토리의 이름
# owner: root // 소유자
# group: S-GROUP // 소유 그룹
user::--- // 사용자 허가권
group::rwx // 그룹 허가권
other::--- // 기타 사용자 허가권
#setfacl -m user:I-USER1:rwx S-LV01
// 사용자:I-USER1:가 S-LV01 디렉토리에 rwx권한 설정
#getfacl S-LV01
# file: S-LV01
# owner: root
# group: S-GROUP
user::---
user:I-USER1:rwx // I-USER1 계정 추가 확인
group::rwx
mask::rwx
other::---
[root@Server-A test] # ll
d---rwx---+ 2 root S-GROUP 4096 2017-04-08 10:39 S-LV01
d---rwx---. 2 root S-GROUP 4096 2017-04-08 10:39 S-LV02
I-GROUP을 추가 한 후, I-USER1을 I-GROUP에 속하도록 설정
S-LV02 디렉토리는 I-GROUP에 속한 사용자들은 접근이 가능하도록 설정
I-USER1 계정으로 S-LV02 접근 가능 확인
#setfacl -m group:I-GROUP:rwx S-LV02
프로세스
- 시스템 초기화 프로세스
init - 부팅 시 가장 먼저 실행되는 시스템 초기화 프로세스
프로세스 (Process)
- 커널의 관리하에 현재 시스템에서 동작중인 프로그램이다.
- init을 제외한 모든 프로세스는 부모-자식 관계를 가지고 있다.
프로세스 종류
- 데몬 (daemon) 프로세스
커널에 의해서 실행되고, 특정 서비스를 제공하기 위해 동작하고 있는 프로세스
- 부모(parent) 프로세스
- 자식(child) 프로세스
부모 프로세스에 의해 만들어지는 프로세스이다.
자식 프로세스는 종료시 부모 프로세스에게 결과를 전달하고 죵료된다.
- 고아(orphan) 프로세스
자식 프로세스보다 먼저 부모 프로세스가 종료되었을때 해당 자식 프로세스는
고아 프로세스가 되어 init 프로세스가 관리를 한다.
- 좀비(zombie,defunct)프로세스
자식 프로세스의 종료신호를 부모 프로세스가 처리하지 못할 경우, 자식 프로세스는
좀비 프로세스가 된다.
ps (Process Status) - 시스템에 동작중인 프로세스 확인
-e 모든 프로세스에 대한 리스트 출력
-f full format 으로 출력
-a 다른 사용자들의 프로세스도 출력
-u 사용자 이름, 시간 등 상세한 정보를 출력
-x 현재 사용하고 있는 모든 프로세스를 출력
#ps -ef
UID - 프로세스를 실행 시키는 프로세스의 소유자를 의미
PID - 실행된 프로세에 부여된 숫자를 의미
PPID - parents Process ID, 프로세스를 생성한 부모 프로세스의 PID
#ps -ef | grep bash
#ps -aux
kill - 프로세스에게 신호를 전달하여 상태를 변화시키는 명령어
#kill -[시그널] [PID]
시그널 종류 확인
#kill -l
2) SIGINT - 프로세스 종료
15) SIGTERM - 프로세스 종료
9) SIGKILL - 프로세스 강제 종료
18) SIGCONT - 프로세스 재시작
19) SIGSTOP - 프로세스 정지
#kill -SIGKILL 1234
#kill -9 1234
1번 세션 2번세션
#vi /etc/passwd #ps -ef | grep vi
// vi /etc/passwd -> PID 확인
#kill -9 [vi /etc/passwd PID]
#ps -ef | grep vi // 종료 확인
#ps -ef | grep bash
프로세스 동작 형태
1. 포어 그라운드 (Foreground Process)
- 프롬프트에서 입력하는 대부분의 명령어는 포어 그라운드로 동작
- 명령어의 실행 과정이나 결과를 화면에 출력
- 포어 그라운드로 실행되는 프로세스가 종료되길 기다렸다가
종료되면 다시 프롬프트(bash)를 보여주어 명령 대기 상태로 반환
2. 백 그라운드 (Background Process)
- 프로세스의 종료 여부에 관계 없이 즉시 명령 대기 상태가되어
다른 명령을 실행 할 수 있음
- 백그라운드로 실행 시키기 위해 '&' (ampersand)를 붙여 사용
ex) #[명령어] &
작업번호와 PID를 출력하며 백그라운드로 동작
#jobs - 백그라운드에 동작하는 프로세를 확인
#fg - 백그라운드 작업을 포어그라운드로 변경
#bg - 포어그라운드 작업을 백그라운드로 변경
#fg %[작업번호]
#bg %[작업번호]
#sleep [숫자값] - 숫자값 만큼 정지
18) SIGCONT - 프로세스 재시작
19) SIGSTOP - 프로세스 정지
순서대로 명령어 입력
1번세션 2번세션
1. #/bin/bash
2. #/bin/bash
3. #/bin/bash
4. #sleep 9999999 &
5. #cat /etc/services | more
6. #pstree -p
명령어 용도 생각해보기
#exit
#exit
#exit
순서대로 명령어 입력
#clear #clear
1. #/bin/bash
2. #vi /etc/passwd
3. #ps -ef | grep bash
// 방금 실행 시킨 /bin/bash의
PID 번호 확인
4. #kill -9 [확인한 /bin/bash PID]
[vi /etc/passwd PPID]
5. ps -ef
// vi /etc/passwd 의 PID/PPID
확인
작업예약 at & cron
- 주기적으로 반복해야 하는 작업에 사용
#rpm -qa | grep at // at 패키지 설치 유무 확인
#rpm -qa | grep mail // mail 패키지 설치 유무 확인
#yum -y install at // at 패키지 설치
#yum -y install mail // mail 패키지 설치
#rpm -qa | grep at // at 패키지 설치 유무 확인
#rpm -qa | grep mail // mail 패키지 설치 유무 확인
#service atd start // at 데몬 실행
#yum -y install cron*
at - 정해진 시간에 한번 실행
형식 #at [옵션] [시간]
옵션 -l 현재 실행 대기 중인 목록을 출력 (#atq)
-r 현재 실행 대기 중인 작업을 삭제 (#atrm)
시간 형태
yyyy-mm-dd, HH:MM, today, tomorrow, hours, days,wekks, now, midnight...
ex) #at 6pm + 4days // 지금부터 4일 후 오후6시에 작업을 수행
ex) #at 10am jul 18 // 7월 18일 오전 10시에 작업을 수행
ex) #at 3am tomorrow // 내일 오전3시에 작업을 수행
ex) #at 10:00am today // 오늘 오전 10시에 작업을 수행
ex)
#at today + 1min // at 실행
at> ls -l
at> <EOT> // Ctrl + D 저장
// EOT - End Of Transmission
#at -l
[작업번호][날짜][시간][큐이름][사용자]
at 예약 작업은 /var/spool/at 디렉토리에 큐 파일이 임시 저장된 후, 저장이 완료되면
자동으로 삭제가 되며, /var/spool/mail 디렉토리에 사용자명으로 결과가 저장된다.
#cd /var/spool/mail
#cat root
#at now + 1min
at> mkdir /practice/at_test
at> echo "at test!!" > /practice/at_test/at_test1
at> <EOT>
#at -l or #atq
cron - 정해진 시간에 반복 실행
ex) 매일 오전 9시에 특정 파일 압축하여 전송
ex) 매달 1일에 /var 디렉토리를 삭제하라
#crontab //crontab 파일을 관리
옵션 -l crontab 파일을 출력
-r crontab 파일을 삭제
-e crontab 수정
-u [사용자명] 해당 사용자의 crontab 설정
분 시 일 월 요일 작업내용
0~59 0~23 1~31 1~12 0~6 반복할 명령어/스크립트
- 일요일 (0), 월요일(1), 토요일(6)
- 사용자 별로 각각 crontab 생성이 되며, 해당 파일에 반복할 작업의 내용을 작성
- 여러개의 작업도 저장할 수 있으며, 한 행에 하나의 작업을 설정
- 항목에 '*' (asterisk)이면 해당 항목의 모든 값을 의미
- ' - ' (hypen) 두 숫자 사이에 포함된 범위 (ex 1-5 == 1,2,3,4,5)
- ' , ' (comma)로 구분하여 나열된 숫자 중 일치하는 경우 (ex 1,3,5)
- ' / ' (slash)로 시간 간격을 지정 할 수 있다.
#cat /etc/crontab // 기본 양식
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
#crontab -e
ex) 30 23 1 * * cp -R /home/test /backup/home
- 매요일 매월 1일 23시 30분에 /home/test를 /backup/home으로 복사하라
ex) */2 10 * * * [명령어]
- 매요일 매월 매일 10시에 2분마다 [명령어] 실행
ex) 1-10 12 * * * [명령어]
- 매요일 매월 매일 12시 1분 부터 10분까지 [명령어] 실행
ex) 1,10 12 * * * [명령어]
- 매요일 매월 매일 12시 1분, 10분에 [명령어] 실행
분 시 일 월 요일 작업내용
0~59 0~23 1~31 1~12 0~6 반복할 명령어/스크립트
#crontab -e
문제 1) 매요일 매월 매일 매시 1,2,3분에 /practice 디렉토리에 test1 파일 생성
확인 - #crontab -l
#date -s "2017-04-08"
1,2,3 분에 /practice 디렉토리에 파일 생성 확인
#mkdir -p /home/cron_test
#crontab -e
1,2,3 * * * * touch /home/cron_test/cron1_`date +\%H-\%M`
1-3 * * * * touch /home/cron_test/cron2_`date +\%H-\%M'
#date -s "2017-04-08"
#watch -d -n 1 "ls -l /home/cron_test"
crontab 명령 사용 제한하기
/etc/cron.allow, /etc/cron.deny 파일로 사용자의 접근을 허용/차단 할 수 있다.
한줄의 사용자 계정명 하나씩만 작성하며, /etc/cron.deny 파일은 기본적으로 있지만
/etc/cron.allow 파일은 관리자 직접 만들어야 한다.
- /etc/cron.allow 파일이 있을 경우
-> 해당 파일에 명시된 사용자만 사용 가능
- /etc/cron.allow 파일은 없고, cron.deny 파일이 있을 경우
-> cron.deny 파일에 명시 되지 않은 사용자만 사용 가능
- /etc/cron.allow, cron.deny 파일이 둘 다 없을 경우
-> root 만 사용이 가능
#useradd cron_user1 // 테스트 계정 추가
#su - corn_user1 // 테스트 계정 스위칭
$crontab -e // 테스트 계정 crontab 명령어 실행
종료 // 실행 가능
$exit
#vi /etc/cron.deny // 차단 파일 수정
cron_user1 // 차단할 계정명 입력
:wq // 저장 후 종료
#su - corn_user1 // 테스트 계정 스위칭
$crontab -e // 테스트 계정 crontab 명령어 실행
// 실행 불가능
$exit
#mv /etc/cron.deny /etc/cron.deny_bk // deny파일 이름 변경
// allow 파일도 없고, deny 파일도 없는 경우 테스트
#su - S-USER1
$crontab -e // 명령어 실행 여부 확인
vi를 이용하여 /etc/cron.allow 파일을 생성 한 후,
내용에 S-USER1 추가, S-USER1 과 cron_user1 계정 각각 crontab 명령어 사용 가능 여부 확인