Linux

Linux #18

broom7946 2023. 3. 27. 17:01

  MRTG(Multi Router Traffic Grapher)

  MRTG는 전통적으로 네트워크 모니터링에서 사용되는데 Snort처럼 다른 보안 모니터링 도구들과 묶여서 널리 사용된다. 네트워크상의 노드들의 정보를 SNMP 프로토콜로 모아서 그래픽으로 보여주므로 네트워크의 대역폭 등을 진단할 때 유용하다. 최근에는 널리 사용되고 있지는 않지만 snort처럼 다른 도구들과 연계되어 작동될 수 있는 좋은 도구이다.

=>SNMP에서 나오는 OID(Object ID)는 새의 이동, 동물의 이동, 물류의 이동 등을 관찰할 때 사용되는 객체 고유의 ID이다.

 

  네트워크 모니터링 도구 - Cacti

  RRDtool(Round Robin Database tool)을 사용하는 MRTG를 좀 더 유연하게 사용자 친화적으로 만든 도구가 Cacti인데 MRTG보다 편리하고 강력한 네트워크 모니터링 도구이다. Cacti에서 원하는 타겟 호스트를 add device를 통해서 추가해주면 모니터링 할 수 있는데 타겟 호스트에는 SNMP가 실행되고 있어야 트래픽을 Cacti 서버에게 전해줄 수 있다. Cacti MySQL, PHP 등의 패키지와 함께 작동된다. CactiEZ-v0.7.iso 파일로 설치한다.

 

  Zabbix로 네트워크 모니터링하기

  이번에는 오픈소스 네트워크 모니터링 도구인 Zabbix를 사용해보자. 이 도구도 현장에서 많이 사용되고 있으므로 잘 알아 둘 필요가 있다.

 

  Nagios

  이번에는 클라우드와 네트워크 모니터링 도구로 유명한 Nagios를 살펴보자.

  작동은 대략 다음그림과 같은데 원격의 UNIX/Linux 머신들을 SSL을 통해서 안전하게 모니터링하는 구조이다.

 

  관리자적 명령어들

1. root의 패스워드 변경하기

2. 부팅 정보를 가지고 있는 /etc/grub.conf 파일 잠궈두기

3. chroot(change root)

  관리자는 서버 시스템에 FTP ,HTTP, NFS 등의 서버 서비스를 설정해두고,

  클라이언트들이 FTP Telnet, SSH, HTTP 등으로 서버에 연결해서 파일을 업/다운로드하게 하는데 FTP 서버인 경우 FTP 서버의 오픈 디렉터리 /var/ftpd/pub 디렉터리, HTTP인 경우 /var/www/html 디렉터리로 들어와서 cd ../ ls ../ 해서 오픈된 pub 디렉터리의 상위 디렉터리로 이동하거나 살펴보게 하면 보안상 문제가 될 수 있다.

  이럴 때 chroot를 사용하는데 이 명령어는 어느 디렉터리를 가상의 최상위 / 디렉터리로 만들어서 cd ../ 했을 때 더 이상 상위 디렉터리로 이동하지 못하게 해서 보안을 증진시킨다.

  SSH 서비스가 있다는 것은 SSL로 이미 키를 사용해서 연결한다는 의미이다.

=>SSL(Secure Socket Layer) sftp, https, smtps, ... 등이 가능한 것이다.

4. chcon(change context) restorecon

  chcon 명령어는 예를 들어 기존 혹은 신규 파일 B의 보안설정을 기존 파일 A의 보안설정을 복사하거나 참조하게 해서 파일 B의 보안 속성 설정이 파일 A의 보안 속성설정과 동일하게 설정되게 해주는 기법이다.

  보안 속성설정 확인은 'ls –lZ|dZ 파일/디렉터리_'으로 확인할 수 있다.

=>이 기법은 SELinux enforcing으로 해두어도 외부에서 접속되게 해준다.

  그리고 restorecon은 이름대로 변경된 보안 context 속성을 원래대로 복구해준다.

 

  chcon(change context)

  이 명령어는 SELinux로 보안을 설정할 때 사용된다. 뒤에서 SELinux를 실습할 때 이 chcon 명령어를 주로 사용할 것이다. 불편하다는 이유로 SELinux 설정을 디폴트 enforcing에서 permissive disabled로 해두고 서버 서비스를 운영하는데, 필요해서 개발된 SELinux 보안설정을 무시하고 시스템을 운영하는 것도 사실 잘못된 것이다.

  예를 들어 웹 서버를 운영한다면 각종 파일이 있는 웹 디렉터리를 만들고 이 웹 디렉터리의 보안설정을 SELinux enforcing인 상태의 보안 설정에 맞게 변경해 주면 웹 디렉터리가 보안이 강화된 상태에서도 잘 운영될 수 있다. 물론 접속하는 사용자도 이 보안 설정에 맞아야 들어올 수 있다.

  getsebool -a 해서 보면 많은 서비스의 Security 설정(SELinux 설정) Boolean on/off로 된 것을 볼 수 있는데 어느 서비스가 on이면 SELinux 설정과 일치해야만 실행되기 때문에 강력한 보안이 된 상태에서 해당 서비스가 실행되는 것이고, off이면 SELinux의 설정을 무시하고 유연하게 운용되게 된다.

 

  웹 서버 설정은

  /etc/httpd/conf/httpd_config 파일이 메인 설정파일인데

  이 파일 맨 끝에는 IncludeOptional conf.d/*.conf 설정이 있다.

==>이 말은 /etc/httpd/conf.d/ 아래에 ~.conf 파일을 만들어 두면 메인 실행 설정파일 /etc/httpd/conf/httpd_config 파일에서 이 파일을 불러 올려서 실행시킨다는 의미이다. 이렇게 하면 모든 설정이 메인 설정 파일에 집중되지 않기 때문에 무겁지 않고, 다양할 설정을 각각 모듈별로 ~/conf.d/~.conf 파일로 설정해둘 수도 있다. 

  CentOS 웹 서버에서 SELinux=enforcing인 상태에서

메인 /var/www/html/index.html은 보안 레벨이 같기 때문에 외부에서 들어갈 수 있었지만 서브 /web/index.html은 보안 레벨이 같지 않기 때문에 못 들어가는 것이다.

=>/var/www/html/index.html context 속성과

  /web/index.html context 속성이 다르기 때문이다.

===>해결책은

a. SELinux=permissive로 낮추거나

b. /web/index.html의 보안 context 속성을 /var/www/html/index.html의 보안 context 속성으로 맞추어 주면 된다!!!

 ** ls -dZ /var/www/html 했을 때

drwxr-xr-x. root root

system_u(=>user):object_r(=>role):httpd_sys_content_t(=>type):s0(=>Security Level) /var/www/html

 

  보안 설정을 맞추는 방법은

원하는 레벨을 복사해서 붙여넣는 방법과

--reference=원하는_레벨 해서 참조시키는 방법이 있다.

 

 Security Level에는 룰 레벨이

s0 DAC(Discretionary Access Control)이다.

s1 MAC(Mandatory Access Control)라고 한다. 

 

  보안설정이 변경된 A 파일을

같은 디렉터리 내에서 복사나 이동하면 A 파일은 변경된 보안설정을 그대로 유지하고,

다른 디렉터리로 복사하면 A 파일은 변경된 보안설정이 그대로 유지되지만,

다른 디렉터리로 이동하면 A 파일은 변경 전 원래 보안설정으로 되돌아간다.

 

  restorecon

  restorecon 명령어를 사용하면 SELinux Enforcing일 때 자동으로 파일을 모니터링해서 콘텍스트가 변경된 것이 있으면 SELinux 설정에 맞는 표준 보안설정으로 바꿔준다.

  예를 들어 restorecon –R /var/www/html/식으로 하면 /var/www/html/ 아래에 있는 파일들을 모니터링해서 보안설정이 변경된 것이 있으면 자동으로 표준 보안설정으로 설정해준다.

 

  chattr lsattr

  앞에서 알아본 chattr 명령어는 일반 사용자가 특정 파일을 실행하지 못하게 할 뿐 아니라 root 자신도 실수로 특정 파일을 삭제하지 못하도록 해당 파일의 권한 속성 변경을 못하게 하는 명령어이다. 일반 ls -l, ls -dl 식으로 보아도 속성 변경 설정이 보이지 않는다.

  CentOS를 설치하면 디폴트로 디렉터리는 755, 파일은 644 권한을 갖는데(umask 해서 0022가 보이면 디렉터리는 0777, 파일은 0666에서 이 숫자를 뺀 것이 디렉터리와 파일의 권한이 된다), 사용자의 useradd/userdel, 시스템 리소스 확인 top, 파티션 fdisk 등의 명령어는 관리자 root의 명령어이므로 일반 사용자가 사용하지 못하게 해두고, 속성도 변경하지 못하게 하는 것이 좋은데

chattr ~ 로 속성을 변경하고,

lsattr ~ 로 속성을 살펴볼 수 있다. 

 

  SetUID, SetGID, Sticky Bit

  Linux를 설치하면 root 소유로 SetUID(user에 대해서) SetGID(group에 대해서), 그리고 Sticky bit(other에 대해서)가 설정된 파일들이 만들어진다.

  root 소유의 파일/디렉터리에 sticky bit가 붙으면 other에게도 그 권한이 있게 되므로 주의해야 한다. 이들은 실행(x) 권한이 있을 때만 적용되기 때문에 이 속성이 보안상 매우 중요하다. root 사용자와 root 그룹 소유의 파일/디렉터리라도 setUID setGID 해주면 일반 사용자도 root 소유/그룹의 파일을 사용할 수 있다.

  chmod 명령어 뒤에 4xxx(SetUID), 2xxx(SetGID), 그리고 1xxx(Sticky bit)를 붙이면 SetUID(user x), SetGID(group x), 그리고 Sticky bit(other x)가 설정되고, 0xxx를 붙이면 이들 설정이 해제된다.

  SetUID, SetGID, 그리고 StickyBit는 실행 x 권한과 관계가 있고 읽기와 쓰기 r, w 등과는 무관하다.

 

  SetUID, SetGID, 그리고 Sticky bit 기법은

어느 중요한 설정 파일, 개발 파일, 명령어 등과 같은 파일/디렉터리가 있을 때 이 파일/디렉터리에 대한 권한을 다 없애고 특정 사용자만 이용하게 하거나

특정 사용자가 만든 파일/디렉터리를 다른 사용자들도 들어와서 작업하게 하거나

특정 명령어 사용 제한 등에서 요긴하게 활용될 수 있다.

 

  SetUID

  일반적으로 Linux에서 A 명령어가 실행되는 순서는

'$HOME/bin이나 $PATH에서 A 명령어의 위치를 찾고 =>A 명령어 실행자의 실행권한을 확인해서 실행권한이 있으면 A 명령어를 실행시키고, 없으면 A 명령어(파일) SetUID가 설정되어 있는지 보고 =>SetUID가 설정되어 있으면 현재 실행자의 UID A 명령어를 실행한다'이다. 보안상 위험하지만 활용상 유용하므로 Linux 시스템은 이런 설정을 유지하고 있다. 따라서 관리자가 SetUID가 설정된 파일들을 늘 감시해야 한다. 예전에는 많은 파일들에 SetUID가 설정되어져 있었지만 현재는 이런 보안상 문제로 인해서 많이 줄어들었다. SetUID로 설정된 부모 디렉터리 아래에 생성되는 자식 디렉터리는 모두 부모 디렉터리의 속성을 상속(inherited)하게 된다.

 

  파일을 보는 cat 명령어에 SetUID를 걸면 일반 사용자도 /etc/shadow 파일을 볼 수 있고,

  대상 파일 /etc/shadow SetUID를 걸면 cat, head, tail 등 모든 읽을 수 있는 명령어로 이 파일을 볼 수 있다.

 

  SetGID

  group 권한에 s가 있는 퍼미션을 SetGID가 설정되었다고 하는데 자주 사용되는 기능은 아니다. 보통 파일을 생성하면 '생성자_:생성자_그룹'으로 소유권이 정해지게 된다. 이럴 때에는 해당 디렉터리에 미리 SetGID로 지정해두고 사용자를 생성하면서 해당 디렉터리의 그룹에 포함시키면 사용자 관리나 디렉터리 관리가 편리할 것이다.

 

  Sticky bit

  other 권한에 t가 있는 퍼미션을 Sticky bit가 설정되었다고 한다. 일반 사용자들이 공동으로 이용하는 디렉터리를 하나 만들어서 파일 등을 넣어두고 거기에 Sticky bit를 설정해두면 /tmp 디렉터리처럼 일반 사용자들의 공용 디렉터리가 된다. 해당 디렉터리가 root 소유일지라도 누구나(other) 들어와서 작업을 할 수 있기 때문에 관리자가 공지사항을 올리거나 교수가 과제 파일을 학생들에게 올리게 할 때 등에서 이용될 수 있다.

  특정 파일/디렉터리에 대해서 root 관리자가 필요한 사용자나 그룹에 대해서 setUID setGID를 설정해주지만(그룹인 경우에는 사용자를 그룹에 지정), Sticky bit로 설정해두면 관리자의 간섭 없이 누구나 쉽게 해당 파일/디렉터리를 사용할 수 있게 된다.