6장 프로세스 데몬 프로세스 : 특정 서비스를 제공하기 위해서 24시간 백그라운드에서 동작하는 프로세스 고아 프로세스 : 자식보다 부모가 먼저 종료된 프로세스. 좀비 프로세스 : 자식 프로세스가 실행을 종료 했는데도 프로세스 테이블 목록에 남아있는 프로세스.
ps [옵션] : 현재 실행 중인 프로세스의 목록을 보여줌 UNIX 옵션( 자주 사용 ) -ef : -e 와 -f 를 합친 옵션, 프로세스의 자세한 정보를 출력한다. BSD 옵션 -aux : 프로세스의 자세한 정보를 출력한다.
ps -ef grep | 문자열 >> 실행중인 프로세스의 자세한정보 출력. ( PID를 확인한다 ) 프로세스 종료하기 kill -9 PID ( 9번은 강제 종료이기 때문에 최후의 수단으로 사용하자 ) kill 기본값 : 15 ( 정상적인 마무리 )
백그라운드 작업 하는법 : [명령어] & Ctrl + Z : 현재 포그라운드 작업을 정지 시킨 후 백그라운드로 전환 jobs : 백그라운드 작업 정보 bg %작업 번호 : 해당 작업을 백그라운드로 전환 fg %작업 번호 : 해당 작업을 포그라운드로 전환
nohup [명령어] & : 로그아웃 후에도 백그라운드 작업 계속 하게 하기 결과 출력은 nohup.out 에 저장된다. nohup [명령어] > [파일명] 2>&1 & : nohup.out 말고 다른 파일에 저장하기
at : 실행 예약 at -l : 실행 예약중인 목록 보기 at -d [작업번호] : 예약 취소 하기
과제 : ps -ef 명령어를 실행해서 /root/at/psfile01에 저장하게 하라 2분이나 3분뒤에 저장되게 하라 at now +3min ps -ef > /root/at/psfile01 ctrl+d
crontab : 지정 시간마다 반복적으로 명령 실행 crontab -e : 편집 (생성, 삭제 등) crontab -l : 예약작업 리스트 출력 crontab -r : 현재 계정의 crontab 내용 모두 삭제(일부만 삭제는 -e로 편집) * 11 21 7 * ls -al > /tmp/crontab.out
* 기호를 입력한 필드에서는 모든 값에서 cron이 수행된다. 위 예제에서는 매 분마다.
예시
매년 1월 첫번째 일요일에 재부팅이 되도록 설정
0 0 1-7 1 0 reboot
매월 오후 1시부터 5시까지 10분마다 date 명령어를 실행해서 date01에 이어쓰기로 저장하도록 설정
*/10 13-17 * * * date >> date01
------------------------------------------------------ test 사용자가 매년 크리스마스에 메리크리스 메시지를 /tmp/christmas 파일에 덮어쓰기를 하게 해보자 root계정에서 crontab -e -u test 0 0 25 12 * echo "Merry Christmas" > /tmp/christmas
엑세스 제어 설정 파일 <Centos7 기준> -> 다른 리눅스, 유닉스는 다를 수 있음
at /etc/at.deny /etc/at.allow
crontab /etc/cron.deny /etc/cron.allow
1. *.allow 파일은 존재하지 않고 *.deny 파일만 존재하면 *.deny 파일에 등록된 사용자는 스케쥴링 명령 사용불가 2. *.allow 파일과 *.deny 파일이 둘다 존재하면 *.allow에 등록된 사용자만 스케쥴링 명령 사용 가능 3. 둘다 존재하지 않으면 root만 스케쥴링 명령 사용가능 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 8장 리눅스의 부팅 바이오스 단계 pc에 장착된 기본적인 하드웨어 (키보드 디스크) 의 상태를 확인한 후 부팅 장치를 선택하여 디스크의 첫 섹터에서 512바이트를 로딩 ( master boot record , MBR )
init 프로세스에서 사용하던 런레벨 ( Run Level )의 개념에 대한 이해 필요. init 프로세스 = systemd으로 바뀌기 전의 1번 프로세스
init 5 : GUI 모드 ( 지금 실습 중인 모드 ) ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ systemd 서비스 systemd 를 기반으로 서비스를 시작하거나 종료할 때 사용하는 명령어는 systemctl systemctl start httpd http 서비스를 위해서 서버 시작 ( 아파치 인듯 ) systemctl status httpd httpd 서비스 상태 확인
cd /var/www/html >> 웹 서버 기본 홈 디렉토리 vi index.html <marquee>hello world </marquee> 파이어폭스 > 127.0.0.1 접속
----------------- 80 포트 열기 ( 포트 개방을 하면 윈도우 브라우저에서 ip주소로 접속 가능 )
firewall-cmd --add-service=http -> 재부팅하면 다시 닫힘 firewall-cmd --add-port=80/tcp
chmod u+x 파일명 = 파일 소유자 ( u ) 에게 실행 ( x ) 권한을 부여 ( + )
새 터미널 실행
su - centos
centos 계정으로 로그인
chown 계정명 파일명 소유자 바꾸는 명령어
chown centos file1 file1의 소유자가 centos 계정이 됨
chown :centos file1 file1의 소유 그룹이 centos그룹이 됨
chown centos1:centos2 file1 file1의 소유자가 centos1계정이 되고 소유 그룹이 centos2그룹이 됨 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
8진수 모드
r 100 4 w 010 2 x 001 1 소유주 / 그룹 / 기타사용자 7 7 7
예제
touch p1 p2 p3 p4 /tmp 같은 디렉터리에서 작업
p1 8진수 방식으로 소유주 읽기 실행, 소유 그룹 실행 권한만, 기타 사용자에게는 쓰기 권한만 chmod 512 p1
p2 8진수 방식으로 모든 사용자 모든 권한 삭제 chmod 000 p2
p3 8진수 방식으로 소유그룹만 읽기, 쓰기 권한 줄 것 chmod 060 p3
p4 8진수 방식으로 모든 사용자에게 실행 권한만 줄 것 chmod 222 p4
/root/filea 디렉토리에 기타 사용자가 들어올 수 없도록 권한을 변경하시오. ( 실행 권한 제거 ) chmod o-x /root/filea
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
<기본 퍼미션> 일반 사용자 664 775
root 644 755
파일은 생성 될때 기본값이 666 디렉터리는 생성될때 기본값이 777
일반사용자는 마스크값이 0002 664( 일반 ) 775( 루트 ) root는 마스크값이 0022 644( 일반 ) 755( 루트 ) 기본값 - 마스크값 = 변경된 기본값 . 단, 쉘을 다시 시작하면 설정 값이 사라짐
마스크값 변경 명령어 umask [숫자]
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
특수 접근 권한
접근 권한은 원래 4자리
setUid 앞자리 4
setGid 앞자리 2
sticky bit 앞자리 1
setuid 는 파일에만 설정한다.
sticky bit 는 디렉터리에만 설정한다.
setgid는 파일에 설정 가능 하면서 디렉터리에도 설정이 가능하다. 만약 디렉터리에 setgid를 설정하면 해당 디렉터리에서 생성한 파일의 소유 그룹은 해당 디렉터리 소유 그룹으로 자동 설정된다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 6장 프로세스 데몬 프로세스 : 특정 서비스를 제공하기 위해서 24시간 백그라운드에서 동작하는 프로세스 고아 프로세스 : 자식보다 부모가 먼저 종료된 프로세스. 좀비 프로세스 : 자식 프로세스가 실행을 종료 했는데도 프로세스 테이블 목록에 남아있는 프로세스.
ps [옵션] : 현재 실행 중인 프로세스의 목록을 보여줌 UNIX 옵션( 자주 사용 ) -ef : -e 와 -f 를 합친 옵션, 프로세스의 자세한 정보를 출력한다. BSD 옵션 -aux : 프로세스의 자세한 정보를 출력한다.
ps -ef grep | 문자열 >> 실행중인 프로세스의 자세한정보 출력. ( PID를 확인한다 ) 프로세스 종료하기 kill -9 PID ( 9번은 강제 종료이기 때문에 최후의 수단으로 사용하자 ) kill 기본값 : 15 ( 정상적인 마무리 )
2. 확장자 별로 디렉터리를 만들고 해당 파일들을 옮겨주세요 >> mkdir 로 디렉터리 만들고 , mv로 이동했음 mkdir txt mv *.txt txt
jpg txt avi conf
3. 옮긴 파일들 중에서 A가 들어간 파일들을 복사해서 별도의 디렉터리에 모아줍니다. (/tmp/A) find 명령어를 활용해보는 문제?? 같아서 사용해보았음. find ./*/A.* -exec mv {} /tmp/A \; pwd 위치 : /home ( 홈 디렉터리 ) [패턴] = 현재 디렉터리 내에 하위 디렉터리에서 A로 시작하는 파일들. find [패턴] -exec [명령어] {} [명령어 인자] \; {} = find 명령으로 검색한 모든 파일 \; = exec 옵션 내용의 마지막을 알림
find 를 사용 하는게 아니라 cp를 많이 써보라는 의도 같음 !!
4. 홈 디렉터리에 있는 jpg 디렉터리는 안의 파일만 지우고 >> rm -r jpg ( jpg 디렉터리 삭제 ) >> 디렉터리 내부 파일을 지우겠냐고 물어봄 ' Y ' >> 마지막에 폴더까지 지우겠냐고 물어봄 ' N '
rm -rf jpg/* << 이게 더 좋네요
txt 디렉터리는 통째로 디렉터리까지 삭제하세요. rm -rf txt
5. avi 디렉터리는 통째로 /tmp 디렉터리에 복사 cp -r avi /tmp -r 옵션으로 디렉터리 이름을 명시
10.0.0.0 ~ 10.255.255.255 사설 네트워크에서 사용 (A클래스)
172.16.0.0 ~ 172.31.255.255 사설 네트워크에서 사용(B클래스)
192.168.0.0 ~ 192.168.255.255 사설 네트워크에서 사용 (C클래스)
▲7월14일 폴더 - 04. 프로토콜.pdf - 20페이지 프로토콜 헤더 구조 분석 ip 프로토콜 ip 헤더는 일반적으로 20바이트 크기 version : 4bit ipv4, ipv6 등 ip 버전 확인용 IHL : 4bit IP Header Length 헤더길이/4 저장 일반적으로 5라는 값이 옴 =
TOS : Type of service : 거의 사용되지 않음. QOS와 관련
Total Length : ip헤더 길이 + 데이터 길이
Identification : 단편화된 조각을 구분하기 위한 구분자
IP FLAGS : 단편화옵션 D : do not frag 0 1 M : More frag 0 1 Fragment Offset : 단편화된 조각 위치 TTL : 네트워크에서의 패킷의 수명, 3계층이상 장비를 지날때마다 1씩 감소 목적지를 못 찾고 무한루프하는 패킷을 자동으로 소멸시켜줌.
protocol : 데이터에 포함된 상위 프로토콜 종류 01: ICMP 06: TCP 17: UDP
Header checksum : 헤더에 에러가 있는지 체크
보내는 사람 주소 : 4바이트 받는 사람주소 : 4바이트
기타옵션 : ip 전달에 걸린 시간값, 라우터에게 특별한 명령을 내린다 등등의 각종 옵션
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ TCP 프로토콜 tcp , udp 비교 TCP : 안정적인 전송이 목표 , 연결수립 , 윈도우 사이즈 설정을 통해 흐름제어 , 긴 데이터 전송에 적합 , 대부분의 프로그램에서 사용 UDP : 단순하고 빠른 데이터 전송이 목표 , 연결수립 하지않음 , 흐름제어 불가 , 짧은 데이터 전송에 적합 , DNS DHCP SNMP TFTP
▲ 7월14일 폴더 - 04. 프로토콜.pdf - 35페이지 출발지 포트 : 2바이트 목적지 포트 : 2바이트
Sequence numbr : 4바이트 Acknowledgment nmber : 4바이트 > 신뢰성 있는 통신과 관련 TCP FLAGS U : URG 긴급한 데이터가 있을 경우 A : ACK 데이터 수신 확인 P : PSH 보내는 데이터를 버퍼에 저장하지 않고 전달 R : RST 비정상인 연결 재수립 요청 S : SYN 연결 수립할 때 사용 ( 아래 사진 첫 연결 . ) F : FIN 연결 종료할 때 사용
Windows size : 수신 가능한 버퍼의 크기 Checksum : 오류 체크 ( 헤더 + 데이터 ) Urgent Pointer : 긴급 데이터의 위치를 표시 ( 거의 쓰이는 일은 없음 ) TCP Options : TCP 헤더에 없는 정보를 송신할 때 사용
1. 보내는 쪽은 임의의 숫자를 지정하여 자신의 seq를 생성 2. 데이터 송신 후 자신의 seq값에 보낸 데이터의 양 만큼의 숫자를 증가 시킴 3. 받는 쪽에서는 전송 받은 seq와 데이터 양을 확인하고 ack값을 계산해서 응답으로 보냄 4. ack는 전송 받은 데이터의 양을 표시
HTTP.cap ( WireShark ) 3way handshake 1. 클라이언트가 서버에게 연결 시도 : syn flag 2. 서버가 클라이언트에게 연결 허용 알림 : syn + ack flag 3. 클라이언트가 수신 확인 전송 : ack flag
4way handshake 1. 연결을 끊고자 하는 쪽에서 연결 종료 시도 : FIN + ACK Flag 2. 상대방에서 연결 종료 신호 수신 확인 : ACK Flag 3. 상대방도 연결 종료 시도 : Fin + Ack Flag 4. 연결을 끊는 쪽에서도 연결 종료 수신 확인 : ACK Flag ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ ARP 프로토콜 ARP가 어떻게 IP에 해당하는 MAC 주소를 알아오는가?
1. 대상을 찾기 위해 IP주소에 해당하는 MAC ADDRESS를 ARP로 요청 - 브로드캐스트 2. 해당 IP를 가지고 있는 호스트는 ARP요청을 전송한 호스트에게 ARP응답을 전송합니다. - 유니캐스트
Hardware Type : 2계층 프로토콜 타입, 1 ( Ethernet ) Protocol Type : 3계층 프로토콜 타입, 0x0800 ( IPv4 )
Hardware Address length : MAC address의 길이, 일반적으로 6 ( 바이트 ) Protocol address length : IP address의 길이, 4
ARP.pcap 분석 예제 arp 요청을 하는 호스트의 ip/mac은? 192.168.0.114 / 00:16:ce:6e:8b:24 ( 1번 sender ) arp 요청 패킷의 전송 방식 및 목적지는? 브로드캐스트 , 모든 통신장비 ㅇㅇ arp 프로토콜의 프로토콜 주소 ( IP주소 ) / 하드웨어 주소 ( MAC 주소 )의 타입/길이는 ? IPv4 ( 4 ) , Ethernet ( 6 ) , arp 응답을 하는 호스트의 ip는? MAC주소는? 192.168.0.1 / 00:13:46:0b:22:ba ( 2번 sender ) arp 응답 패킷의 전송 방식 및 목적지는? 유니캐스트 , ( 2번 target ) arp 요청/응답에 따른 operation code는? 요청 1 / 응답 2
Type : 대분류 Code : 소분류
ICMP의 기능 : 오류 보고 ( Error Report ) , 질의 메시지 ( Query ) ICMP의 메시지 유형 0 : echo 응답 ( echo reply ) > ping의 응답 : ip 호스트 진단 ( 라이브 여부 확인 ) 8 : echo 요청 ( echo request ) > ping의 요청 : ip 호스트 진단 ( 라이브 여부 확인 ) 3 : 수신처 도달 불가능 ( Destination Unreachable ) : 목적지 도달 불가능 알림
ICMP.pcap 분석하기 예제 192.168.0.114 > 192.168.0.1 icmp 요청을 한 호스트와 대상의 ip는? 통신 2종류임 192.168.0.114 > 72.14.207.99
icmp 패킷의 ttl값을 통해 os 추측해보자 128 = 윈도우 / 255 = 리눅스 , cisco 장비 ( 라우터 )
icmp 요청/응답의 icmp type 및 code를 보자. 요청 Type : 8 / 응답 Type : 0
ICMP2.pcap 분석하기 예제 icmp 요청한 호스트와 대상 ip? 10.2.10.2 > 10.4.88.88 icmp 요청/응답의 type 및 code? 요청 8 / 수신지 도착불가 3 , code 1 : 호스트를 찾지 못함 분석 결과 알 수 있는 것은? Destination Unreachable
[가] IP주소가 속한 Network Address , 10.74.69.48 /29
[나] IP주소가 속한 Network의 Broadcast Address , 10.74.69.55
[다] 해당 Network의 할당가능한 IP주소 대역 , 10.74.69.49 ~ 10.74.69.54
[라] 보기에 주어진 IP주소가 할당가능한 주소인지 확인하시오 예
[마] 만약 할당할 수 없다는 주소라면 그이유를 쓰시오. 없음
할당할 수 있는 주소인 경우는 '없음' 쓰시오.
(2) 85.98.46.119 /25
[가] IP주소가 속한 Network Address , 85.98.46.0 /25
[나] IP주소가 속한 Network의 Broadcast Address , 85.98.46.127
[다] 해당 Network의 할당가능한 IP주소 대역 , 85.98.46.1 ~ 85.98.46.126
[라] 보기에 주어진 IP주소가 할당가능한 주소인지 확인하시오 예
[마] 만약 할당할 수 없다는 주소라면 그이유를 쓰시오. 없음
할당할 수 있는 주소인 경우는 '없음' 쓰시오.
(3) 96.13.44.146 /30
[가] IP주소가 속한 Network Address , 96.13.44.144 /30
[나] IP주소가 속한 Network의 Broadcast Address , 96.13.44.147
[다] 해당 Network의 할당가능한 IP주소 대역 , 96.13.44.145 ~ 96.13.44.146
[라] 보기에 주어진 IP주소가 할당가능한 주소인지 확인하시오 예
[마] 만약 할당할 수 없다는 주소라면 그이유를 쓰시오. 없음
할당할 수 있는 주소인 경우는 '없음' 쓰시오.
(4) 75.55.86.210 /26
[가] IP주소가 속한 Network Address , 75.55.86.192 /26
[나] IP주소가 속한 Network의 Broadcast Address , 75.55.86.255
[다] 해당 Network의 할당가능한 IP주소 대역 , 75.55.86.193 ~ 75.55.86.254
[라] 보기에 주어진 IP주소가 할당가능한 주소인지 확인하시오 예
[마] 만약 할당할 수 없다는 주소라면 그이유를 쓰시오. 없음
할당할 수 있는 주소인 경우는 '없음' 쓰시오.
(5) 129.72.16.116 /28
[가] IP주소가 속한 Network Address , 129.72.16.112 /28
[나] IP주소가 속한 Network의 Broadcast Address , 129.72.16.127
[다] 해당 Network의 할당가능한 IP주소 대역 , 129.72.16.113 ~ 129.72.16.126
[라] 보기에 주어진 IP주소가 할당가능한 주소인지 확인하시오 예
[마] 만약 할당할 수 없다는 주소라면 그이유를 쓰시오. 없음
할당할 수 있는 주소인 경우는 '없음' 쓰시오.
(6) 222.79.61.159 /27
[가] IP주소가 속한 Network Address , 222.79.61.128 /27
[나] IP주소가 속한 Network의 Broadcast Address , 222.79.61.159
[다] 해당 Network의 할당가능한 IP주소 대역 , 222.79.61.129 ~ 222.79.61.158
[라] 보기에 주어진 IP주소가 할당가능한 주소인지 확인하시오 아니오
[마] 만약 할당할 수 없다는 주소라면 그이유를 쓰시오. Broadcast Address 로 예약된 주소이기 때문이다.
할당할 수 있는 주소인 경우는 '없음' 쓰시오.
(7) 192.89.10.255 /23
[가] IP주소가 속한 Network Address , 192.89.10.0 /23
[나] IP주소가 속한 Network의 Broadcast Address , 192.89.11.255
[다] 해당 Network의 할당가능한 IP주소 대역 , 192.89.10.1 ~ 192.89.11.254
[라] 보기에 주어진 IP주소가 할당가능한 주소인지 확인하시오 예
[마] 만약 할당할 수 없다는 주소라면 그이유를 쓰시오. 없음
할당할 수 있는 주소인 경우는 '없음' 쓰시오.
(8) 156.22.191.0 /22
[가] IP주소가 속한 Network Address , 156.22.188.0 /22
[나] IP주소가 속한 Network의 Broadcast Address , 156.22.191.255
[다] 해당 Network의 할당가능한 IP주소 대역 , 156.22.188.1 ~ 156.22.191.254
[라] 보기에 주어진 IP주소가 할당가능한 주소인지 확인하시오 예
[마] 만약 할당할 수 없다는 주소라면 그이유를 쓰시오. 없음
할당할 수 있는 주소인 경우는 '없음' 쓰시오.
(9) 225.77.29.42 /21
[가] IP주소가 속한 Network Address , 225.77.24.0 /21
[나] IP주소가 속한 Network의 Broadcast Address , 225.77.31.255
[다] 해당 Network의 할당가능한 IP주소 대역 , 225.77.24.1 ~ 225.77.31.254
[라] 보기에 주어진 IP주소가 할당가능한 주소인지 확인하시오 예
[마] 만약 할당할 수 없다는 주소라면 그이유를 쓰시오. 없음
할당할 수 있는 주소인 경우는 '없음' 쓰시오.