2일차_chkconfig, service, iptables, lokkit, corn, facl, kill, lsof, rsync, curl

최지웅·2024년 7월 17일
0

인프라

목록 보기
1/26

chkconfig

  • 서버 서비스 데몬 구동을 위한 Centos 부트 기본상식은, 리눅스 커널이 처음 실행하는 프로세스인 /sbin/init이다. /etc/inittab파일에서 부팅 시 실행할 런레벨 0~6(Halt, single user mode, undefined, multi user mode, undefined, X-win multi user mode, reboot)을 설정가능하다.
  • 런레벨에 맞게 실행되는 프로세스 목록 /etc/rc.d/rcX.d에 있으며 경로의 X는 알파벳이 아니라 0~6 등 런타임 레벨 별 프로세스들이다. 이들을 이용해 시스템 부팅 시 자동으로 함께 구동돼야하는 프로그램들을 등록할 수 있다.
  • chkconfig 유틸리티를 이용해 특정 런레벨에서 실행할 프로그램(아파치 httpd나 ftpd등의 데몬 서비스)을 등록, 설정, 변경할 수 있다.
$ chkconfig --list netfs #런레벨 설정 출력
$ chkconfig netfs off #자동시작 끄기
$ chkconfig netfs on #자동시작 켜기

service

  • service는 /etc/init.d에 Sys V init스크립트 유틸리티로, 부팅 시 실행하는 네트워크 설정이나 방화벽, sshd, httpd 등의 서비스 프로그램 등을 재시작할 수 있다. 이를 통해 MySQL서버나 Postfix 이메일 서버, 아파치 웹 서버 등을 관리할 수 있다.
$ service --status-all
$ service httpd start # 서비스 시작
$ service httpd stop # 서비스 종료
$ service httpd restart # 서비스 재시작

iptables

  • 패킷 필터링/방화벽 프레임워크 ipchains에 이은 netfilter 프레임워크 최상단의 사용자레벨 프로그램인 iptables를 이용해 리눅스 서버로 들어오고 나가는 패킷을 필터링하거나 포트포워딩을 설정할 수 있고, 방화벽으로도 사용할 수 있다. 이후 서비스 설정 시 서비스포트를 열어줄 때 사용된다.
  • table(rules list)이라고 하는 다섯가지인 filter(input, output, forward), nat(network address translation), mangle, raw, security 설비가 있다. 각 테이블은 패킷과 일치하는 규칙의 목록인 체인 그룹을 가지고 있다.
  • 테이블 내 특정 규칙과 일치하는 경우 ACCEPT, DROP, REJECT, QUEUE 등의 타깃을 통해 특정 행동을 지정할 수 있다.
  • 이러한 필터와 체인 설정은 /etc/sysconfig/iptables파일을 통해 접근하며, IPv6용 설정은 etc/sysconfig/ip6tables이다.
  • iptables는 부팅 시 init이 실행하는 스크립트이기에 설정변경시 service명령어로 재구동해야 변경사항이 적용된다.

lokkit

  • 명령줄 기반 iptables 설정 유틸리티로, /etc/sysconfig/iptables를 직접 vim으로 수정하는 것 보다 안전하고 쉽다. 다만 서비스 포트 닫는 옵션을 제공하지 않기에 직접 /etc/sysconfig/iptables를 수정하고 $ service iptables restart를 수행해야한다.
$ lokkit --list-services # 등록된 서비스 리스트
$ lokkit -s ssh -s http -s https #서비스 포트 열기
$ lokkit -p 8080:tcp # 포트번호로 열기

corn

  • corntab 설정파일을 통해 작업 스케줄링을 수행한다. 정기적인 작업은 /etc/anacrontab, 매일 수행할 작업은 /etc/cron.daily디렉토리 내용을 토대로 실행한다.
  • crontab은 5개의 시간필드(분, 시간, 일, 달, 주일)와 수행할 명령어로 구성된다.
$ mysqldump -u root -pmypwd --databased mydb1 mydb2 > /root/mysql_dump.sql
0 23 * * * /usr/local/sbin/mysql_dump.sh
  • /etc/cron.allow로 등록된 사용자만 cron을 사용하거나, /etc/cron.deny로 등록된 사용자를 거부하는 등 권한 관리가 가능하다.
  • 주로 백업 자동화에 사용한다.

setfacl과 getfacl (File Access Control List)

  • chmod만으로는 세밀한 권한 조정이 불가능하기에, ACL(Access Control List)를 이용한다. access ACL은 지정한 파일, 디렉토리에 설정한 제어목록이고, 기본 ACL은 디렉토리에만 지정가능한 선택사항이다.
$ setfacl -m u:jimo:r /etc/sysconfig/iptables # jimo사용자에게 루트만 볼 수 있는 파일의 읽기 권한을 부여
$ setfacl -m g:devel:rw /project/config # devel그룹은 읽고쓸 수 있다
$ setfacl -x u:jimo /etc/sysconfig/iptables # jimo사용자의 모든 권한을 해제

$ getfacl /var/log
  • 이는 루트작업을 최소화하기 위해 아파치 웹 서버의 로그파일을 일반 사용자가 볼 수 있게끔 설정가능하다. 또, 서버를 구동한 계정과 콘텐츠(게시글 작성) 제공 계정이 다른 경우에 별도의 upload폴더를 만들어 권한을 부여하면, 특정 계정만 작성가능하게 하여 해결이 가능하다.
$ getfacl /var/log/httpd/
$ setfacl -m u:jimo:rx /var/log/httpd $ 다른 사용자를 제외하고 jimo만 아파치 웹 서버 로그를 볼 수 있다. (x는 디렉토리를 위함)

kill

  • 특정 이벤트가 발생했음을 프로세스에게 알리는 기본적인 액션으로 TERM, IGN, CORE, STOP, CONT가 있다.
  • 이를 이용해 시그널 핸들러를 등록하여, TERN이나 INT시그널을 받을 경우 사용중인 자원과 객체를 반납하고 메모리를 정리하고 종료하게 구현이 가능하다.
  • 프로세스 종료 시 TERM이나 INT를 두세번정도 보내고 종료되지 않을 경우 KILL시그널을 전송하는 것을 권장한다.(service로 프로세스 종료 시에도 이처럼 동작)
$ kill -1 1234 # hang up
$ kill -9 1234 # kill
$ ps -eaf httpd | grep -v grep | awk '{print "kill -TERM "$2}' | sh -x # httpd프로세스를 모두 종료. 대충 httpd 프로세스 목록을 grep으로 가져온 뒤 해당되는 내용들을 kill -term 내용 처럼 간단한 스크립트 출력문 형태로 만들고 sh -x로 스크립트를 실행시키는 듯

lsof(LiSt Open Files)

  • 시스템에 열린 파일 목록(프로세스, 디바이스, 파일) 등의 상세한 정보를 출력하는 명령어이다.
$ lsof | less # 모든 열린 파일 정보 출력
$ lsof -u jimo | less # jimo사용자가 연 파일
$ lsof -i TCP:80 # TCP 80번포트 사용하는 프로세스 정보 출력
$ lsof -i TCP # TCP 모든포트 출력
$ lsof -p 15879 # 특정 PID인 프로세스가 연 파일 목록 출력
$ lsof -c httpd # httpd 명령어가 연 모든 파일의 정로 출력
  • 이를 통해 많은 fork로 여러 프로세스를 가진 아파치 httpd같은 경우 -c옵션을 통해 네트워크의 연결상태나 포트를 보는 명령어인 netstat보다도 자세한 정보를 얻을 수 있다.
  • 특정 프로세스가 사용하는 파일을 찾거나, 특정 포트를 점유한 프로세스를 찾는 등 문제발생 시 원인분석에 자주 사용된다.

rsync(Remote SYNChronization)

  • 로컬과 리모트 간의 데이터 동기화를 위한 유틸리티로 데이터 전송 시 변경이 일어난 부분만 전송하여 효율적인 동기화가 가능하다.
  • --delete옵션을 사용하는 경우, 실수로 원본 데이터 삭제 시 리모트 파일도 삭제되기에 데이터 백업 시에는 사용하지 않고, 굳이 사용하려거든 주기적인 스냅샷을 만드는 전문 백업 유틸리티의 도움을 받자.
  • rsync options source destination 형식으로 사용하며, 데이터 복제 시 -avzh옵션을 사용한다.
$ rsync -avzh /var/log/ /root/log # 로컬 서버의 두 디렉터리를 복제
$ rsync -avzh /home/jimo/data/ jimo@backup.example.com:/home/jimo/data-backup/ # 콜론 주의 원격지 백업 서버로 데이터 복제
$ rsync -avzh jimo@backup.example.com:/home/jimo/data /home/jimo/data-backup # 원격지 데이터를 로컬에 복제

위 방식은 별도의 포트 없이 SSH프토로콜을 기반으로 사용하기에 원격지에 연결할 때 마다 암호를 넣어야하는데, 번거로울 경우 공개키와 개인키 쌍을 생성하여 공개키를 원격지 서버에 등록할 수 있다.

$ ssh-keygen -t rsa -C jimo@example.com
$ Enter file in which to save the key: 개인키 저장경로(선택)
$ Enter passphrase: 개인키 보호 암호(선택)
$ Enter same passphrase again: 개인키 보호 암호 확인(선택)

$ ssh-copy-id -i ~/.ssh/id_rsa.pub backup.example.com # 공개키를 원격지에 복사
$ ssh backup.example.com # 암호를 묻지 않고 바로 로그인 성공
  • 이를 이용해 두 서버간 파일을 전송하는 rcp, scp를 대체가능하며 데이터백업, 원격사이트미러링 등에 활용된다.
  • crop과 rsync를 조합하여 백업 자동화가 가능하다.

curl

  • 데이터 송수신 툴로 http, https, ftp, ldap, scp, telnet, smtp, pop3 등의 주요 프로토콜을 지원한다.
$ curl http://www.gnu.org/software/bash/manual/html_node/index.html # 컨텐츠를 콘솔출력
$ curl -o bash_manual.html http://www.gnu.org/software/bash/manual/html_node/index.html # 서버 콘텐츠 다운로드
$ curl -O http://www.gnu.org/software/bash/manual/html_node/index.html # 이름을 index.html 그대로 다운로드
$ curl -L http://www.google.com # 웹 서버어세 컨텐츠가 다른 곳에 있다는 응답을 보낼경우 지정된 URL로 다시 따라가서 결과를 가져온다.
$ curl -u jimo:jimo's password http://www.example.com # 사용자 인증으로 id와 password를 보내서 인증을 요청한다.
$ curl -u jimo:jimo's password -H "Content-Type: application/json" http://www.example.com/user/login # http헤더의 이름과 값을 지정하기
$ curl -d "name=jimo+choi&age=30" https://requestb.in/1ap5m1g1 $ HTTP요청 검사하는 서비스로, 데이터를 POST해보자.
  • 이는 유용한 URL처리기로 HTTP/HTTPS서버와 연결해 데이터를 주고받을 때 사용되며, 간단하게 서버 동작을 확인할 수 있고 원격지 서버에서 파일을 내려받거나 전송할 수 있다. rest API기반 서비스의 경우 curl -d 즉 POST기능을 통해 간단하게 정상동작여부를 디버깅할 수 있다.
profile
이제 3학년..

0개의 댓글