본문 바로가기
시스템운영

Linux 보안일반사항

by 보이드메인 2016. 1. 5.

리눅스 보안 일반

ntsysv

시스템이 부팅되면서 자동적으로 실행될것인지, 말것인지를 정의

chkconfig

리눅스의 런레벨 0~6번까지 총 7개의 런레벨이 있는데 이 런레벨을 각각 지정하여 관리

service

서비스명 stop|start|restart|status

해당 서비스만 중지 시작 재시작 상태 보기만 가능


시스템의 런레벨 설정되어 있는 그 위치로 가서 서비스를 제어한다.

(예)내 시스템이 런레벨3번이 되어 있다고 하자.

리눅스 제일 먼저 실행하는 프로 세스는?? init

init PID = 1

init PPID = 0

#pstree -p[프로세스]

#ps -ef | grep init

     ~~~~init[3]<-런레벨 3이다.

#runlevel

현재 우리는 런레벨 3번이다.

/etc/rc.d/rc3.d/ 라는 디렉토리에 있는 서비스를 제어한다.

1. service<-ntsysv가 안될 때 할수 있는 방법

*************************************************************************

/etc/init.d

init.d =>service가 가능한 스크립트

*************************************************************************

K로 시작되어 있는 파일은 부팅 시 실행 되지 않는다.

S로 시작되어 있는 파일은 부팅 시 실행 된다.

낮은 숫자 분터 실행이 된다.

***************************************************************************

대표적으로 kill 하여야 하는 서비스에 대해 알아보자.

S05apmd : laptop에서 전원관리를 위해 필요하므로 서버에서는 필요없다.

S10cups : Common UNIX Printing System 으로 서버에는 필요없다. (단, samba 서버 구현시에는 필요하다.)

S10xntpd : Network time protocol이다. 사용할 경우가 없으므로 필요없다.

S11portmap : NIS나 NFS 서비스 이용시 R로 시작되는 서비스에 대한 port를 mapping 시켜주는 서비스이므로 보안상 문제가 많다. 필요 없다.

S15sound : 서버에서 sound를 서비스 하지 않으므로 필요없다.

S15netfs : nfs client가 nfs server를 마운트 할 때 필요하므로 역시 필요없다.

S20rstatd, S20rusersd, S20rwhod, S20rwalld : R로 시작하는 서비스는 인증과정이 취약하고 Remote에서 실행하는 것이므로 반드시 서비스를 하지 않도록 하여야 한다.

S20bootparamd : 하드나 플로피 등 부팅 수단에 없을 때 이용하는 것으로 반드시 서비스하지 않아야 한다.

S25squid : squid 프록시 서버를 가동하는 설정이므로 사용하지 않는다면 필요없다.

S34yppasswdd : NIS server에서 필요하므로 필요없다.

S35ypserv : 역시 NIS에서 필요한 설정이므로 필요없다.

S35dhcpd : dhcp(IP 동적 할당 서비스)에서 필요하므로 일반적으로 필요없다.

S40atd : cron과 같은 서비스인데, cron 서비스를 이용하므로 이 서비스는 필요 없다.

S45pcmcia : 노트북에서 필요하므로 삭제한다.

S50snmpd : 원격의 이용자가 트래픽이나 시스템에 대한 정보를 필요로 할 때 필요한데, 사용한다면 snmp community string을 엄격하게 설정하고 사용하지 않는다면 삭제한다.

S55named : DNS 서비스를 제공한다면 이용하지만 그렇지 않으면 삭제한다.

S55routed : 라우터가 아닌 이상 일반 서버에서는 삭제한다.

S60lpd : 프린트 서버가 아닌 이상 반드시 삭제한다.

S60mars-new : Netware 에서 쓰는 file 이나 printer server 이므로 삭제한다.

S60nfs : NFS server 에서 필요하므로 nfs 서비스하지 않는다면 삭제한다.

S72amd : AutoMount daemon으로 원격지의 File system을 mount 할 때 필요하다

Amd는 전통적으로 보안 취약성이 있으므로 삭제한다.

S80sendmail : sendmail 데몬이다. 메일 서비스를 제공한다면 삭제한다.

S85httpd : Apache 웹서버이다. 컴파일 하여 실치하였을 경우에는 이 부분을 삭제하고 해당 부분을 /etc/rc.d/rc.local에 추가한다.

S87ypbind : NIS를 쓸 때 필요하다. 사용하지 않는다면 반드시 삭제한다.

S90xfs : X font server로, 서버에서는 X-Windows 서비스를 하지 않으므로 삭제한다.

S95innd : News server로 news 서비스를 하지 않으므로 삭제한다.

S99linuxconf : 원격지에서 브라우저를 통해 리눅스 시스템의 설정을 변경할 수 있는 것으로 보안상 취약성을 가지고 있으므로 반드시 삭제하여야 한다.

***************************************************************************

S05apmd -> K05apmd

#mv S05apmd K05apmd

로 하면 수동으로 바꿀 수 있다.

2. PAM 및 ulimit를 활용한 리소스(resource) 제한

리눅스를 포함해서 멀티유저 환경의 시스템을 운영하다 보면 가끔 시스템의 자원을 많이 사용하는 특정한 유저 때문에 골머리를 앓는 경우가 있다. 또한 프로그램에서 무한루프가 돌아 시스템이 먹통이 되는 경우도 한번쯤은 경험했을 것이다. 이처럼 의도적이든 의도적이지 않든 간에 아무리 하드웨어적으로 성능이 뛰어나다 하더라도 간단한 루프만 돌아도 서비스에 직접적인 악영향을 주는 것이 사실이다. 실제로 아무리 최신의 시스템이라도 무한루프를 도는 단 몇 줄의 코드로도 시스템이 다운될 수 있기 때문에 사용가능한 자원을 적당히 제한할 필요가 있다.

아파치 등 각각의 응용 프로그램에서 제한 설정하는 방법 외에 시스템 수준에서 설정할 수 있는 방법으로는 PAM을 이용하거나 ulimit를 이용하는 방법이 있다.

쉽게 말하자면,

즉 무한 루프를 도는 것을 제한 할 수 있는 것 이다.

<PAM이란?>

Pluggable Authentication Modules의 약자로서 그대로 해석한다면 “뺐다 붙였다 할 수 있는 인증모듈’ 정도가 된다.

(01) PAM 모듈 설정 파일 : /etc/pam.d/

(02) 모듈(공유 라이브러리) 파일: /lib/security/

1.PAM 사용하게 하는 방법(/etc/pam.d/login)

[root@localhost pam.d]# vi login

/etc/pam.d/login 파일 하단에

session required /lib/security/pam_limits.so

추가 하여 PAM을 사용 할 수 있게 한다.

2.PAM 설정 파일인

/etc/security/limits.conf 아래와 같이 설정해 보자.

* hard core  0

* hard rss  5000

* hard nproc  20

@users hard maxlogins 6

* hard maxlogins 4

===========================================================================

<설명>

* : 모든 유저

@users : users라는 그룹에 속하는 유저들을 말한다.

hard : 절대 한계를 넘을 수 없음을 말한다.


* hard core 0 # CORE 파일을 생성하지 않는다.

* hard rss 5000 # 사용 가능한 메모리를 5M로 제한한다.

* hard nproc 20 # 생성 프로세스를 20개로 제한한다.

@users hard maxlogins 6 # 동시 접속을 6개로 제한.

* hard maxlogins 4 # 동시 접속을 4개로 제한

===========================================================================

---------------------------------------------------------------------------

실습

하나의 계정을 만들고 같은 계정으로 원격 접속 프로그램을 통해서 4번 이상 접속해 보자.

그러면 5번째는 연결 되지가 않고 끊어져 버리는 것을 알수 있을 것이다. 그건 위의 “동시 접속을 4개로 제한” 했기 때문이다.

<TIP>

PAM을 이용한 제한 설정은 모든 유저에 적용되는데, 단 예외적으로 수퍼유저인 root에는 적용되지 않는다.

(PAM을 이용한 제한이 maxlogins를 제외하고는 특정 OS 버전에서 제대로 작동되지 않는 버그가 있다.)

---------------------------------------------------------------------------


---------------------------------------------------------------------------

시스템에서 설정 시 soft, hard 하게 설정이 가능 하다.

 50 100메모리

soft 설정 |-----------|

50%설정 => 50% 이상 설정 시 경고 메시지와 관리자 에게 메일이 간다.

 50 100메모리

hard 설정 |-----------|

50%설정 => 40% 경고메시지 시스템 로그 다운.

시스템 마다 용도마다 다르다.

soft&hard의 차이점

---------------------------------------------------------------------------

다른 유저가 실행 시킨 명령어를 보는 빙밥

pstree mysqld

doom접속

pstree doom

ssh-----bash

ssh와 bash를 실행 시킬 수 있다.


(04) ulimit를 이용한 시스템 자원 제한 방법


ulimit는 쉘 로깅 하는 모든 유저에 대해 제한할 수 있으며 이 제한은 root도 포함된다는 점에서 PAM과 차이가 있다.

---------------------------------------------------------------------------

<옵션>

-S : soft하게 시스템 자원을 제한한다.

-H : 엄격하게 시스템 자원을 제한한다. 일반 유저는 soft limit를 변경할 수 있지만 최대 hard limit 이상은 넘을 수 없다. hard limit는 오직 root 만이 변경할 수 있다.

-a : 현재의 모든 제한 사항을 보여준다.

-m : K byte 단위로 물리적인 메모리를 정의한다.

-t : 초단위로 최대 CPU 시간을 설정한다.

-f : 쉘에서 생성 가능한 최대 파일 사이즈를 정의한다.

-u : 유저 프로세스의 최대값을 정의한다.

-v : 가상 메모리의 크기를 정의한다.

---------------------------------------------------------------------------

현재 설정 보기 : ulimit –a

***************************************************************************

실습

vi /etc/profile

# ulimit test

if [ $LOGNAME != "root" ];

then

ulimit -Su 10 # 유저가 생성 가능한 프로세스 수 10개로 제한

ulimit -Sv 20000 # 유저가 사용 가능한 메모리 20M로 제한

ulimit -Sf 5000 # 생성할 수 있는 한 파일의 사이즈 5M로 제한

fi

***************************************************************************

<중요> /etc/profile 파일 수정후에 바로 적용시킬려면 # source /etc/profile 해줘야 한다!

외부 테스트

su - doom

pwd

/home/doom/

외부에서 5MB 이상 파일을 다운로드 한다.

받아 보면 5120000만 들어와 있다.

내부 테스트

dd if=/dev/zero of=file1 bs=10MB count=1

dd if=/dev/zero of=file2 bs=10MB count=1

결과

파일 크기 제한을 초과함



'시스템운영' 카테고리의 다른 글

[ Mac ] 맥 OS 에서 root 계정 관리 하기  (0) 2016.01.05
[Linux ] samba  (0) 2016.01.05
[UNIX] Shared Memory 설정  (0) 2016.01.05
[ solaris ] crontab  (0) 2016.01.05
[Solaris] 계졍설정  (0) 2016.01.05

댓글