웹마스터 팁
리눅스 기초 보안처리
2010.06.27 02:52
리눅스 자가 서버 운영시의 약간의 보안강화 처리
리눅스로 자가 서버를 운영하시는 분들이 많이 계신데, 다른 유져들과 나눠쓰거나 지인들에게 계정을 열어주는 경우가 있습니다.
그런데 이럴경우 의도하지 않게 타인에게 사이트 소스가 노출된다든지 , 불순한 의도의 접속자가 생길 수 도 있기때문에 어느정도 보안을 강화하는것이 좋습니다.
리눅스 배포판의 경우, 별다른 조치가 없다면 ftp로 접속시 다른 사이트의 db정보를 빼내오는것은 정말로 쉬운것이라고 느낄정도로 허술한 경우가 있습니다.
XE사이트에서는 APM등 Zend Optimizer등 속업관련 팁만 있지, 보안에 관해서는 팁이 적은것 같아 한번 적어봅니다..
저의 경우 CentOS만 사용했으므로, 레드헷 계열 배포판 중심으로 적겠습니다.
1. ssh의 root 로그인 방지
대개의 배포본은 기본적으로 root계정으로 ssh의 접속을 막아놓습니다만 IDC입주의 경우 초기세팅에서 root의 로그인을 허용하므로 한번 확인하는것이 좋습니다.
root의 접속은 반드시 su 명령으로 통하여 획득할 수 있도록 합니다.
#vi /etc/ssh/sshd_config
PermitRootLogin no
퍼밋 루트로그인을 no로 설정하면 root로 ssh접속이 불가능해집니다.
2. ftp서버의 상위루트 노출 막기
ftp로 접속시 로그인계정 디렉토리 외에도 다른 계정의 디렉토리까지도 노출될 경우가 있습니다.
이럴경우 sql계정정보나 사이트의 모든 문서를 자유롭게 다운받을 수 있게됩니다.
이런 현상을 방지하기 위해 로그인 계정외는 노출을 금지시켜야 합니다.
리눅스 ftp서버로서는 vsftp와 proftp를 많이 씁니다.
컴파일형과 rpm형이 있는데..
뭐 어떤 방식이든 환경설정을 만져주어야 합니다. 환경설정 파일의 위치를 모른다면
#find / -name vsftp.conf 이런식으로 찾아주면 쉽게 찾을 수 있겠죠.
#vsftp.conf
chroot_local_user=YES
proftpd.conf
#DefaultRoot ~
#주석을 제거합니다.
흠..그런데 DefaultRoot ~ !wheel
요런식으로 하면 wheel그룹 계정은 상위 디렉토리 노출이 가능해집니다..전 proftp만 써서요..ㅋ
3. ssh접속시 상위 디렉토리 노출시키지 않기
사용자계정들이 들어가게 되는 디렉토리의 퍼미션을 변경합니다. 이럴경우 ftp접속시에도 상위디렉토리가 노출되지 않는 효과도 생깁니다.
만약 /home 디렉토리에 사용자계정 디렉토리들이 들어가게 된다면..
#chmod 701 /home
#chmod 701 /
등으로 일반 사용자들에게 노출되기 싫은 디렉토리의 권한을 잡아주면 됩니다.
4. 특정 파일을 root만 사용하게 만들기..
gcc나 gcc+등과 같이 컴파일러나 df같이 하드디스크의 정보나 ps와 같이 메모리에 상주된 프로그램등, 시스템에 관련된 파일들을 일반계정 사용자가 실행할 수 없게 만들어 주면 보안상 좀 더 유리해질것입니다.
#chmod 100 /usr/bin/gcc /usr/bin/g++
#chattr +i /usr/bin/gcc /usr/bin/g++
이와 같이 퍼미션을 주게 되면 일반유져들은 실행을 할수 없게 되고 +i옵션을 주어 수정,복사,삭제가 불가능하게 됩니다.
[root@localhost bin]# chmod 100 /bin/ps
[root@localhost bin]# chattr +i /bin/ps
이런식으로 일반계정 사용자가 실행하면 좀 껄끄러운 파일들을 루트사용자만 사용할 수 있게끔 설정해주면 됩니다.
특히 c나 c++컴파일러는 불순한 의도를 가지고 사용자가 사용할 수 있으므로 웹서비스만 하는 서버에서는 막아주는것이 좋습니다.
5. su명령어를 특정계정 사용자만 사용할 수 있게 만들자.
불량 계정접속자들의 루트로그인을 막기 위해 su명령을 신뢰할 수 있는 계정 사용자에게 줄 필요성이 있어집니다.
이 방법은 정해진 계정으로만 접속해야 만 루트사용자로 로그인을 할 수 있게 되죠..
#vi /etc/group
wheel:x:10:root,manager
그룹설정 파일을 보면 wheel:x:10:root항목이 있습니다. 뒤에 , su명령어로 루트접속이 가능하게 할 계정을 입력해줍니다. 위의 경우 manager계정만 su명령어로 루트에 접속할 수 있게됩니다.
그룹파일을 수정하였으면 ...
# chown root.wheel /bin/su
# chmod 4750 /bin/su
# chattr +i /bin/su
su명령어를 root와 wheel두 그룹만 소유하게 됩니다.
6. ping차단하기
고전수법이지만 ping명령어로 서버의 속도를 저하시킬 수 있습니다. 그러므로 ping명령을 차단시킬 필요가 있답니다.
#vi /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_all=1
net.ipv4.icmp_echo_ignore_all=1를 해주면 ping명령이 차단됩니다.
콘솔상에서 #/sbin/sysctl -w net.ipv4.icmp_echo_ignore_all=0하면 다시 ping이 허용되며 0대신 1을 넣어주면 다시 차단이 됩니다.
7. SYN Flooding 공격방어
이것은 Dos공격의 일종으로 통신상 일어나는 현상을 교묘히 이용하여 생기는 공격입니다. 이 공격을 막는 방법으로는 백로그큐를 늘려주거나 tcp_syscookies값을 1을 주어 공격을 차단할 수 있습니다.
#vi /etc/sysctl.conf
net.ipv4.tcp_syscookies=1
하지만 너무 과도하게 이 방법만 믿으면 안됩니다. KLDP같은 포럼에서 신종 공격에 대비하는 비책들을 항상 스크랩하고 자신의 서버에 적용시켜야 겠죠.
8. SetuID 속성파일들의 권한 변경.
좀 약간 헷갈리는 내용인데 Setuid로 설정된 파일은 실행시키면 실행자의 권한이 아니라 소유자의 권한으로 파일이 구동됩니다.
이해를 쉽게 하자면 passwd명령은 소유자가 루트이지만 모든 계정사용자가 자신의 비밀번호를 바꿀때 사용할 수 있습니다. 하지만 이 passwd는 사용자계정으로 실행해도 root권한으로 실행되게 됩니다.
[root@localhost ~]# ls -al /usr/bin/passwd
-rwsr-xr-x 1 root root 22984 1월 7 2007 /usr/bin/passwd
위와같이 rwsr부분이 rwxr이 아니라 rwsr이 되죠..
이것이 바로 setuid가 설정된 파일이라는 것입니다.
시스템 관리자의 패턴을 잘 아는 불순한자들이라면 setuid(0)과 같은 c언어 몇줄로서 백도어 프로그램을 시스템에 숨겨놓고 Setuid파일로 위장해서 루트권한을 획득할 수 있습니다.
그러므로 setuid로 정의 된 파일들을 항상 관심있게 체크해볼 필요가 있습니다.
find 명령으로 setuid가 부여된 파일들중 잘 쓰지않는 파일들을 찾아 권한을 변경합니다.
[root@localhost ~]# find / -user root -perm -4000 -print
/usr/kerberos/bin/ksu
/usr/lib/nspluginwrapper/plugin-config
/usr/libexec/openssh/ssh-keysign
/usr/sbin/userhelper
/usr/sbin/usernetctl
/usr/sbin/suexec
/usr/sbin/ccreds_validate
/usr/bin/chfn
/usr/bin/rcp
/usr/bin/newgrp
/usr/bin/rlogin
/usr/bin/sudoedit
/usr/bin/at
/usr/bin/rsh
/usr/bin/chsh
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/crontab
/usr/bin/staprun
/usr/bin/sudo
/usr/bin/passwd
/usr/bin/Xorg
/lib/dbus-1/dbus-daemon-launch-helper
/sbin/umount.nfs4
/sbin/pam_timestamp_check
/sbin/mount.ecryptfs_private
/sbin/mount.nfs
/sbin/unix_chkpwd
/sbin/mount.nfs4
/sbin/umount.nfs
/bin/su
/bin/ping6
/bin/umount
/bin/mount
/bin/ping
[root@server4-166 ~]# find / -user root -perm -2000 -print
/sbin/netreport
/usr/bin/wall
/usr/bin/crontab
/usr/bin/ssh-agent
/usr/bin/write
/usr/bin/lockfile
/usr/bin/screen
/usr/local/firewall
/usr/libexec/utempter/utempter
/usr/sbin/sendmail.sendmail
/usr/sbin/lockdev
이런식으로 setuid파일들을 검색하고 ping과 같이 꼭 root권한이 필요없는 파일들이나 일반유져들에게 없어도 되는 파일들은 setuid속성을 없애줍니다.
방법은 간단히
#chmod 100 /bin/ping
요런식으로 권한을 바꾸어줍니다.
/usr/bin/change
/usr/bin/wall
/usr/bin/chfn
/usr/bin/at
/bin/mount
/bin/unmount
/usr/bin/crontab
/usr/bin/newgrp
/usr/bin/write
/usr/sbin/usernetctl
/bin/ping
/bin/traceroute
위의 파일들은 일반계정사용자에게는 전혀 필요없고 또한 서버운영상 불필요한 것들도 있으므로 권한을 바꾸어줍니다.
그 외 나머지 파일들은 파일의 크기등을 따로 보관후 쉘등을 이용해서 일괄적으로 용량등을 체크해서 파일의 변화가 있었는지 주시할 필요가 있습니다.
비정상 파일들을 찾아서 삭제하는 방법등등 아직도 많은 보안정책등이 있는데 오늘은 졸려서 이정도만 하겠습니다.. ftp와 ssh같은 서버들의 포트를 바꾸는것도 좋을듯 하고요..lastlog등으로 항상 ssh접속을 시도한 불순한자들을 찾아내고 root의 .bash_history파일이 용량이 적어졌다거나 하면 불순한자들이 있을지도 모른다는 생각을 해보셔야 합니다.
작년에 서버 운영하면서...lastlog를 보니
css pts/2 85.186.129.154 Sun May 31 03:21:12 +0900 2009
테스트용 계정을 만들고 이것저것 해보다가 문득 이상한 느낌이 들어 로그기록을 보니 역시 있더군요..
ip 를 검색하니
person: Astral Telecom Hostmaster
address: UPC Romania Srl
address: ROMANIA
먼 루마니아에서 친히 들어오셨더군요..
저도 서버운영하면서 스크랩 해놓은것들이 있는데.. 오늘은 이정도만 해야겠네요
잘봤습니다. 기회가 되신다면 .iptable도 알려주시면 감사하겠습니다.