User Tools

Site Tools


linuxsecuretips

' Linux 보안을 위한 기본설정 '

TableOfContents


이글에 대한 의문은 PART I을 작성한 분께 문의해 주시면 감사하겠습니다.

      노영환 <webmaster@besthan.com> 

PART II는 PART I에서 수정되어야 하는 부분이나 기타 관련 내용을 당사 직원이 적은 것입니다.

인터넷제국 운영센터 544-0915

PART I

2000년 12월 2일 (주)베스트한컴 www.besthan.net에서 발표하는 자료입니다. 다른 질문과 답은 www.koreaphp.co.kr에서 해주시기 바랍니다.

현재 데이터센터내의 서버들이 무차별적으로 해킹을 당하고 있습니다. 현재로선 뚜렷한 방법이 없습니다. 다만 아래 적는 방법을 통하여 현재 저희 서버는 다소(???) 안전하다고 생각합니다.

데이터센터 내에 서버를 가지고 계신분들은 아래의 권고사항을 꼭 참조하시여 아래와 같이 서버에 보안작업하시고 필요없는 서비스나 포트는 가능한 닫아 주시고 모든 패키지를 업그레이드 하시기 바랍니다.

현재 해킹의 수준은 거의 모든 서버가 가능하다고 하더군요. 본 보안수준은 절대적인 것이 아니며 단독 서버에 여러 도메인을 보유하신 경우에는 꼭 해주실 권고합니다.


보안관련및 기본명령

chmod 700변경하기

본 권한변경 목적은 계정을 통하지 않은 불법적인 접근을 막기 위한 방법으로 가능한 필요하지 않은 파일들의 권한을 변경해 주시기 바랍니다. 특히 suid가 걸린 파일의 경우 절대적으로 권한변경을 해주시기 바랍니다.

/usr/bin/finger(chmod 700 적용) <-- 서버 이용자 파악을 하지 못하게 함 
/usr/bin/nslookup(chmod 700 적용) 
/usr/bin/gcc(chmod 700 적용)  <-- 당연히 막아줘야져. 
/usr/bin/suidperl(chmod 700 적용) <--suid 걸린 파일 
/usr/bin/whereis(chmod 700 적용) 
/usr/bin/cc(chmod 700 적용)    <--- 소스 컴파일은 루트이외에 못하도록 조치 
/usr/bin/sperl5.00503(chmod 700 적용)  <--- perl중에 suid걸린 파일임 
/usr/bin/c++(chmod 700 적용) 
/usr/bin/make(chmod 700 적용) 
/usr/bin/pstree(chmod 700 적용) 
/usr/bin/rlog(chmod 700 적용) 
/usr/bin/rlogin(chmod 700 적용)  <-- 필요없는 경우에는 삭제 하시길 

/usr/bin/which(chmod 700 적용) 
/usr/bin/who(chmod 700 적용) 
/usr/bin/w(chmod 700 적용) 
/bin/mail(chmod 700 적용)  <-- 아웃룩익스프레스가 아닌 계정상에서 
                               텔넷으로 메일을 확인하지 못하게 하십시요. 
/bin/ps(chmod 700 적용) 
/etc/hosts(chmod 700 적용) 
/etc/hosts.deny(chmod 700 적용) 
/etc/hosts.allow(chmod 700 적용) 

anonymous ftp 막기

#vi proftpd.conf (/etc 에 위치) 
   중략 
  <Anonymous  ~ftp> 에서 
  UserAlias                anonymous ftp //이부분을 주석처리 해준다. 
  wq (저장후 종료) 

telnet 사용막기 <--가장 추천하는 방법입니다.

현재 텔넷이 막힌 경우에는 해킹의 위험이 극히 줄어듭니다. 
텔넷을 사용하시고자 하시는 분은 데이터 센터의 보안 서비스나 
다른 방법을 사용하시기 바랍니다. 

ip 거부

#vi hosts.deny  (/etc 에 위치) 
in.telnet:ALL 
wq (저장후 종료) 

{{{#hosts.allow (/etc에 위치) ALL:(IP 추가) <--- 텔넷으로 들어올 아이피만 적는다. wq (저장후 종료) </code> 저장후 다음과 같이 #/etc/rc.d/init.d/inet restart telnet 서비스 제공업체측 ip를 추가해야 telnet 사용가능 ==== ping 막는법 <---당연히 핑도 막아야 겟죠. ==== <code> #echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all //ping 막기 #echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all //ping 열기 </code> ==== chkconfig 사용법(부팅시 수행되는 서비스) <--중요합니다. ==== {{{#chkconfig --list (/sbin 밑에 위치) #chkconfig --help (참고) #chkconfig --level 3 sendmail off (사용방법예) </code> 보통 부팅의 경우 레벨3으로 부팅이 됩니다. 그러므로 레벨3에서 필요하지 않은 데몬은 위와 같은 방법으로 모두 꺼두시기 바랍니다. {{{#chkconfig --list (하면 나오는것들) xfs 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 anacron 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 apmd 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 arpwatch 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 atd 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 keytable 0:끔 1:끔 2:켬 3:켬 4:켬 5:켬 6:끔 gpm 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 inet 0:끔 1:끔 2:끔 3:켬 4:켬 5:켬 6:끔 netfs 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 network 0:끔 1:끔 2:켬 3:켬 4:켬 5:켬 6:끔 random 0:끔 1:켬 2:켬 3:켬 4:켬 5:켬 6:끔 ipchains 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 pcmcia 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 kdcrotate 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 kudzu 0:끔 1:끔 2:끔 3:켬 4:켬 5:켬 6:끔 linuxconf 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 lpd 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 nfs 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 nfslock 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 identd 0:끔 1:끔 2:끔 3:켬 4:켬 5:켬 6:끔 portmap 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 rstatd 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 rusersd 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 rwalld 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 rwhod 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 sendmail 0:끔 1:끔 2:켬 3:켬 4:켬 5:켬 6:끔 syslog 0:끔 1:끔 2:켬 3:켬 4:켬 5:켬 6:끔 snmpd 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 crond 0:끔 1:끔 2:켬 3:켬 4:켬 5:켬 6:끔 ypbind 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 yppasswdd 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 ypserv 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 proftpd 0:끔 1:끔 2:끔 3:켬 4:켬 5:켬 6:끔 named 0:끔 1:끔 2:끔 3:끔 4:끔 5:끔 6:끔 </code> 이중 켜야할것은 보통 9개정도밖에 안됩니다. 3번레벨을 기준으로, keytable,inet, network,random,kudzu,sendmail,syslog, crond,proftpd 나머지는 off 시켜주는것이 바람직합니다. (자기의 환경에 맞춰서) 참조문서는 http://www.osfs.net/redhat/security-guide-01.doc ==== find 관련 명령 ==== {{{#find /dev -type f // /dev/MAKEDEV만떠야함 (백도어 찾기) #find / -ctime -1 //하루동안 만들어진 화일 (해킹당한듯 싶으면 확인 ) #find / -perm -4000 // setuid 걸린 파일을 찾는 명령어 </code> ==== /etc/inetd.conf 화일 수정 ==== 네트워크의 서비스를 정의하고 있는 화일로서 , 정의되어 있는 서비스가 많이 있다. 보안사고를 피하기 위해서는 최대한 필요하지 않은 서비스는 차단하는게 바람직하다. 기본적으로 , telnet,ftp,pop3외의것은 주석처리 하는것이 좋다. 닫아놨는데, 이외의 것이 열려있다면 해킹의 가능성이 있다. 이때는 다시 주석처리를 하고 <code> #ps -ef | grep inetd //프로세스 확인 #kill -HUP PID //리셋 #vi inetd.conf (/etc 에 위치) telnet ftp pop3 나머지는 주석처리 wq (저장후 종료) tip> #kill -9 PID //프로세스 죽이기 </code> ==== 해킹이 확실한경우 대처법 ==== 해킹이 확실한상태에서 그냥 컴퓨터를 종료시키면, 재부팅이 안될수가 있다. 이것을 막기 위해, #/etc/rc.d/rc.SYSinit 권한을 755를 준다. 최소한 부팅은 된다. 서버 & 보안 관련 문의 http://www.besthan.net 또는 http://www.koreaphp.co.kr 해킹시 연락처 http://www.certcc.or.kr/ 해킹시 신고처 cyber 테러대응센터 02-3939-112 cyber 수사대 02-365-7128 해킹 없는 세상에 살고싶은 오렌지블루였슴돠. ===== PART II ===== PART II는 PART I에서 수정되어야 하는 부분이나 추가 되어야 할 내용을 추가 했습니다. 보안을 위해 이문서를 참조하는 것도 좋습니다. 그러나 서버 운영 특성상 꼭 필요한 경우도 있으나 이 제한을 걸어서 사용할수 없는 경우가 있으니 꼭 확인후 조치를 부탁합니다. (이 문서를 끝까지 읽어 주시면 서버운영에 많은 도움이 될듯합니다.) - 문의 사항은 khsheen@inempire.com으로 해 주십시요 설명순서는 PART I 에서 설명을 보충하고 기타 더 필요한 설명을 추가 하겠습니다. ---- 보안관련및 기본명령 ==== chmod 700변경하기 ==== 첨부 명령어 {{{/usr/bin/top (chmod 700 적용) /usr/bin/find (chmod 700 적용) /usr/bin/lynx (chmod 700 적용) /usr/bin/wget(chmod 700 적용) </code> --> 이두 명령어는 일반적으로 해커들이 해킹툴을 가져올때 자주쓰는 명령어 {{{shell-prompt>lynx --dump 가져올화일이 있는 url 경로 shell-prompt>wget 가져올화일이 있는 url 경로 </code> {{{/usr/bin/gcc(chmod 700 적용) <-- 당연히 막아줘야져. /usr/bin/c++(chmod 700 적용) /usr/bin/make(chmod 700 적용) </code> 이 명령어를 막게 되면 일반사용자들이 C언어로 작성된 프로그램을 컴파일하지 못하여 불평을 호소하는 경우가 있다. 이런 경우는 이 명령어를 사용할수 있는 그룹을 설정해 주면 준다. (일반적으로 wheel이라는 그룹을 많이 사용함, 다른 그룹을 등록해서 사용해도 무관) * example) find 명령어의 사용자를 제한 할 경우 {{{shell-prompt>grep wheel /etc/group wheel:x:10:root /etc/group 화일에 wheel:x:10:root 이분에 wheel이라는 그룹에 user를 추가 한다.(khsheen이라는 user가 있을경우임) wheel:x:10:root,khsheen 이러면 wheel이라는 그룹에 khsheen 이라는 user가 등록된다. shell-prompt>ls -la /usr/bin/find -rwxr-xr-x 1 root root 54544 Feb 3 2000 /usr/bin/find* shell-prompt>chgrp wheel find shell-prompt>chmod 755 find shell-prompt>ls -la /usr/bin/find -rwxr-x--- 1 root wheel 54544 Feb 3 2000 find* </code> 이런식으로 설정하면 find 명령어는 root와 khsheen만 사용할수 있다. 이 명령어를 su 명령어에도 적용하는 것을 권장함, root로 전환할 유저 (su 명령어 사용자)를 제한 할수 있다. ==== anonymous ftp 막기 ==== 특정 user가 ftp 접속후 본인의 Directory 외에 다른 유저의 Directory를 접근 못하게 할 경우 (접근을 해서 read 권한만있어도 그 유저의 설정을 모두볼수있다.) *proftp를 사용하는 경우 {{{shell-prompt> vi /etc/proftpd.conf 이 화일에 이 한줄을 추가한다. DefaultRoot ~ member shell-prompt>/etc/rc.d/init.d/proftpd restart </code> 이러면 본인의 Directory외에 다른 유저의 계정은 접근 불가. ==== telnet 사용막기 ==== telnet을 막는 다는 것은 특히 유저가 많은 경우는 불가능 일인것 같다. (특히 웹호스팅업체) 이런 경우는 ssh(Secure Shell)을 설치해서 사용하는 것을 권장합니다. ==== find 관련 명령어 관련 명령어 사용하기 ==== shell-prompt> find / -nouser (화일에 소유자가 없는 경우의 화일) 일반사용자의 사용 디렉토리에서 ... 화일에 소유자가 없다는것은 의심을 해볼필요가 있다. shell-prompt> find /home/khsheen -user root (일반사용자인데 root로 되어 있는 화일도 의심해볼 필요가 있다) ==== 해킹이 확실한경우 대처법 ==== a.우선 가장 좋은 방법은 port(랜선)를 제거하는 것이 가장 좋다. b.그 다음에 설치 되어 있는 해킹툴을 제거한다. -프로세스 확인 [ 이상한(필요없는) 프로세스 확인해서 설치된 위치 확인후 지우기] shell-prompt> kill -9 이상한 프로세스 id 그러나 100%제거 한다는 것은 힘들것 같다. 서버를 제 세팅하는 것을 권장한다. c.중요 data 백업 ==== 기타 보안에 관련된 내용 ==== * php , mysql db 지원하는 경우 -일반적으로 php로 mysql에 db에 접속하는 경우 php에서 connect하는 스크립트를 사용하는 화일을 일반적으로 Web상에 공개된 소스에는 화일명이 대부분 connect.inc 를 사용하는데 이것을 웹브라우저에 불러오게 되면 바로 읽혀 져서 mysql db접속 아이디와 패스워드를 알수가 있게된다. 이럴경우는 웹서버의 설정화일(httpd.conf)에 AddType application/x-httpd-php .php .html .php3 .php3 .inc ~~~~~!! AddType application/x-httpd-php-source .phps 추가하고 웹서버를 제구동한다. 그러면 .inc로 끝나는 화일도 php로 인식하므로 스크립트 노출을 막을수 있다. 또한가지 telnet ftp에 사용시 group을 같게 해주고 각 계정의 root Directory를 퍼미션을 705로 처리해 주면 다른 유저가 다른 사용자의 계정에 들어 갈수가 없다. 만약 755로 한다면 다른 유저에게도 읽을 권한이 생겨서 connect 스크립트를 읽을 수 있어 db접속 아이디/passwd를 얻을수 있다. * 사용자들의 passwd - 등록된 user의 passwd를 자주 갱신하게 만든다. shell-prompt>vi /etc/login.defs 이중 아래의 스크립트를 일정기간 설정해서 사용자들의 passwd를 바꾸게 만든다. PASS_MAX_DAYS 99999 ~~~~~ 일정기간으로 잡아준다. * shell 없애기 - 메일계정으로만 사용하는 경우(shell이 필요없는 경우)의 유저가 많다. 특히 웹호스팅 사용자 이런 경우 shell을 주지 않으면 된다. shell-prompt>vipw khsheen:x:500:502::/home/gdm:/bin/false ~~~~~~~~~~ khsheen이라는 유저에게 shell을 부여하지 않는다. - 서버에 등록된 사용자가 많은 경우 사용자가 관리에 신경을 많이 써야 한다. last 명령을 사용하여 자주 telnet으로 접속하는 사용자는 history를 자주 살펴보는 것도 좋다. shell-prompt> last | grep pts * 보안패치하기 -서버 보안에서 가장 중요한 것이 패치이다. 서버에 버그가 발표되면 해커도 그것을 접한다고 생각하면 된다. 그래서 서버에 최신 패키지를 설치해야 하며 보안 뉴스를 빨리 접해야 한다. 그중 커널 업테이드등은 중요한다. * 커널 최신 정보 확인하기 {{{ shell-prompt>finger @www.kernel.org [zeus.kernel.org] The latest stable version of the Linux kernel is: 2.2.17 ~~~~~~ The latest beta version of the Linux kernel is: 2.4.0-test11 The latest prepatch (alpha) version *appears* to be: 2.4.0-test12-pre4 - 2. 17 | | | | | -> 몇번의 패치가 있었는지 나타낸다. | -> 안정화 버전인지 개발화 버전이지를 나타낸다. | (홀수:개발, 짝수:안정) -> 획기적인 변화가 있을때 바뀐다 </code> * 그리고 기타 패키지에 대한 버그는 빨리 접하고 패치를 해야 한다. http://www.redhat.com/support/errata/index.html(redhat인 경우) * 해킹관련 소식 접하기 http://certcc.or.kr/ (한국정보 보호센터) http://www.hackersnews.org/ http://www.securenews.co.kr/ http://securitymap.net/sdm/sdm-index.html ===== PART III ===== debian에서 서비스 막기~ fuser과 killall inetd <code> <t> atd <t> portmap <t> lpr <t> rpc피료업자네 <t> 뭐 nfs같은거 쓴다면 </code> 요런패키지 지우기~ ---- [[http://we.madethis.com/mihonmo/moin.cgi/LinuxSecureTips|mihonmowikiwiki]] ==== featured by morris^^v ==== *좀 더 안전한 서비스로 대체 telnet -> telnet-ssl, ssh ftp -> sftp, ftp-ssl pop3 -> pop3s, ssh를 통한 pop3연결 *자주 보안 경고가 나오는 패키지 bind, sendmail, telnetd, mysqld bind나 sendmail등은 대체 패키지가 있음(qmail ...) 그런 대체 패키지들은 보안성을 고려한 설계가 보임 *무작정 핑 막는것은 좋지 않음 나중에 네트웍 테스트등을 못하게되니 /proc/sys/net/icmp_echo_ignore_broadcasts(커널 2.4.x기준, ipv4만 쓸때) 만 1로 체그해줌이 바람직, 이렇게 해두면 브로드캐스트핑은 막아줌, 대게 브로드캐스팅은 무작정 침입자들이 호스트가 있나확인해보는 역할임 그냥 핑은 나중에 쓸모가 있으니 꺼두지 않는 것이 바람직함 *유저 패스워드를 자주 바꾸게 하면 역효과 유저패스워드를 자주바꾸게 하는데 오히려 좋지 않을가능성이 더욱 높음. 왜냐면 쉬운 비번 두개를번갈아 가면서 쓰거나 오히려 옆에적어놓을 수도 있고 자주 바꿔야하니 관리자의 귀찮도가 증가. john같은 패스워드크래커로 확실히 돌려서 확인해보고 비번이 쉬운 사용자만 바꾸도록강제 권고가 바람직. *chkconfig는 RedHat만 해당 SuSe는 yast, Debian에서는 /etc/init.d/내의스크립에 실행퍼미션을 없애거나 S를 K로변경해주면 됨. *잦은 로그 검사 로그를 자주 살펴봐줘야함. *패치 패치는 가장중요함. 보안 업데이트를 늘 확인하고 패치를 꼭 설치 *불필요한 계정남발 요주의 로컬 계정이 있으면 할 수 있는일이많아지므로 요주의 *웹보드나 cgi도 확인필수 부주의하게 짜여진 보드나 cgi는 사용하지 않는것이좋음 인기있는보드인제로보드는 설계에 보안이고려치않아서 보안 권고만 수십번 나오고 그 악랄하게부하잘 잡아먹는걸로 유명 다른 보드 쓰는것이 좋음. 보드 제작자나 cgi제작자는 대개가 보안을잘 모르니 주의해서 해야함. 보드나 cgi를 통해서 로컬 권한 얻는 경우가 다수임. *대다수의 침입자는경험없는 애들 대다수는 exploit이나 알려진 취약점을 타고 들어오니 이에대한 방비를 철저히 할것. 무작위로 공격해내는데 취약점있으면 큰일임. *멍청한 행위로 안심은금물 gcc등 막아놓고 안심하거나 wget 막았다고 못가져오지는않음 gcc막아도 ftp로 올릴수 있음 wget없어도 대게 w3m있음 위에 나오는멍청한짓은 사용자들의 체감 온도를 급격하게떨어트려서 안좋은 영향을끼침 이보다 발빠른 패치와 로그검사가우선, 불필요한 suid제거는 필수 정 막을려면 uudeencode, uuencode, xxd, hexdump등도 추가퍼미션제거 그리고 vi, ed, emacs등도 제거 cat도 제거. 쓸수 있는거 모두 제거해주는게 바람직 능력있다면 echo로도 장난 칠수있음

linuxsecuretips.txt · Last modified: 2018/07/18 14:10 by 127.0.0.1