좋은 답을 하기 위해 좋은 질문이 필요하다.
Q. 처음 서버를 샀습니다. 어떤 보안적 조치를 먼저 하시겠습니까?
리눅스를 새로 설치하면 대부분 기본값으로 설정되어 있기 때문에 보안 설정이 되어있지 않다. 기본값은 누구나 알 수 있기 때문에 서버가 상당히 취약해진다. 만약 AWS의 EC2 서버를 열었다면 어떤 보안 조취를 해야하는 지 정리해보려고 한다.
1. SSH 로 Root 계정 직접 로그인 차단.
SSH(Secure Shell Protocol)는 FTP나 Talnet에 비해 public-private 키로 암호화 되어 있어 보다 보안적으로 안전하게 데이터 통신, 원격 제어가 가능하다. 그러나 아래 그림에서와 같이 username과 password를 알면 누구나 들어갈 수 있다는 것이 문제이다. 접속한 서버의 default root 계정과 비밀번호는 root로 정해져있다. 따라서 이 기본 값을 바꾸면 SSH로 접근하더라도 관리자 계정에 접속하지 못하게 되므로 보다 보안 수준이 높아진다.
# useradd {바꾸고 싶은 아이디}
# passwd {바꾸고 싶은 비밀번호}
# vi /etc/ssh/sshd_config -> 에서 PermitRootLogin 설정 no로 변경
PermitRootLogin no
# service sshd restart -> ssh 서비스를 재시작
그리고 특정 계정만 su 명령을 사용할 수 있게 바꾼다. /bin/su 명령파일의 소유권을 바꾼다.
# vi /etc/group
wheel:x:10:root,{내계정이름} -> wheel 그룹에 내 계정 추가
# chown root.wheel /bin/su -> /bin/su 소유권 변경
# chmod 4750 /bin/su
# chattr +i /bin/su -> su 파일을 변경할 수 없도록 속성 변경
2. 일반적으로 FTP(File Transfer Protocol 파일전송 프로토콜)는 보안에 취약하므로 사용하지 않는다. 대신 SFTP를 사용한다. SSH 서비스가 활성화되어있다면 SFTP를 사용할 수 있다. 나는 파일질라라는 프로그램으로 이전에 구매했던 웬서버에 접속한 경험이 있는데 보안적으로 별 문제 없는 파일들을 보냈었는데 보안적으로 위험한 행동이었던 것 같다. SSH를 적극적으로 이용해야겠다.
3. 노출을 원하지 않는 디렉토리는 공개 퍼미션을 변경하기
# chmod 700 /home/system -> 홈 디렉토리의 퍼미션 755에서 700으로 변경
(퍼미션 정리 글 링크)
4. tmp 디렉토리는 아무나 쓰고 읽고 실행할 수 있도록 기본 값이 설정되어있다. 따라서 tmp 디렉토리에 악성 파일을 넣는 것이 가능하다. 따라서 OS를 설치할 때 tmp 파티션을 따로 나누는 것이 좋다.
5. ping 테스트 응답 차단
6. SetUID, SetGID 점검. SetUID(퍼미션 4000) 이나 SetGID(퍼미션 2000)은 파일의 속성 권한이 아니라 실행하는 소유자 권한으로 실행이 된다. 따라서 파일 소유자가 root이면 파일을 실행할 동안 root 권한을 가질 수 있다. 대표적으로 계정 비밀번호를 바꿀 때 잠시 root 권한을 가져가게 된다. 생각해보면 어떤 프로그램을 실행할 때에는 Root에 접근권한을 허용해도 되는지 묻는 팝업창이 나오는데, 관련된 내용인 것 같다. 이러한 보안 문제를 해결하기 위해서는 root 소유 파일 중 4000, 2000번 퍼미션을 가지는 SetUID와 SetGID 중 일반 사용자에게 공개하지 않아도 되는 파일은 이 속성을 제거하면 된다.
* 퍼미션 4000(SetUID)이 부여된 root 소유파일 찾기
# find / -user root -perm -4000 -print
* 퍼미션 2000(SetGID)이 부여된 root 소유파일 찾기
# find / -user root -perm -2000 -print
* 필요없는 파일 퍼미션 변경 (조치)
# chmod 100 /bin/ping
+ 불필요한 서비스를 내린다.
### 중요화일 퍼미션 변경및 불필요한 서비스를 내린다.
-->먼저 ps -aux 데몬들을 확인하고 삭제 할 데몬들을 죽인다.(kill -9 )
rpm -e --nodeps portmap-4.0-38(rpm은 자신의 환경에 맞게 제거한다)
rpm -e --nodeps pidentd-3.0.14-1
rpm -e --nodeps gpm-1.19.3-20
rpm -e --nodeps gpm-devel-1.19.3-20
rpm -e --nodeps nfs-utils-0.3.1-13
rpm -e apmd-3.0final-34
## setup -> system services
crond
keytable
network
opensshd-inetd
random
syslog
vsftpd
xinetd
-->/etc/passwd 와 /etc/group
ftp,xfs,adm,lp,news,gopher,sync,uucp,operator,games,dip(등 필요없는 계정은 주석을 달거나 삭제한다)
+ 추가적으로 퍼미션을 변경할 디렉토리 목록이다.
-->퍼미션 변경
chmod 700 /etc/exports
chmod 700 /etc/fstab
chmod 700 /usr/bin/chage
chmod 700 /usr/bin/wall
chmod 755 /usr/bin/man
chmod 700 /usr/bin/chfn
chmod 700 /usr/bin/write
chmod 700 /usr/sbin/usernetctl
chmod 700 /bin/mount
chmod 700 /bin/umount
chmod 700 /sbin/netreport
chmod 750 /bin/ps
chmod 750 /bin/netstat
chmod 750 /bin/dmesg
chmod 750 /bin/df
chmod 750 /usr/bin/who
chmod 750 /usr/bin/finger
chmod 750 /usr/bin/last
chmod 750 /usr/bin/top
chmod 750 /usr/bin/w
chgrp wheel /bin/ps
chgrp wheel /bin/netstat
chgrp wheel /bin/dmesg
chgrp wheel /bin/df
chgrp wheel /usr/bin/w
chgrp wheel /usr/bin/who
chgrp wheel /usr/bin/finger
chgrp wheel /usr/bin/last
chgrp wheel /usr/bin/top
chmod 751 /home
chmod 751 /var/named
chmod 600 /usr/local/apache/conf/httpd.conf
chmod 110 /usr/bin/top
chmod 550 /bin/ps
chmod 110 /usr/bin/uptime
chmod 110 /usr/sbin/useradd
chmod 110 /usr/sbin/userdel
#chmod 110 /usr/bin/last
#chmod 110 /usr/bin/find
변경해서는 안되는 중요한 파일에는 chattr을 사용하여 락을 걸어준다.
chattr +i 파일명 --> 루트도 지우거나 수정 할수 없다.
풀어줄때는 반대로
chattr -i 파일명 하면된다.
그 외 설정.
-->계정 디렉토리의 퍼미션은 701로 준다.(chmod 701 계정명)
### 전자우편만 사용할수 있는 계정추가하기
(-d 위치 지정, -s 쉘지정, ftp도 사용할수 없다)
useradd 계정명 -d /home/mailbox/dbckdghk -s /bin/false
passwd 계정명
### FTP계정만 주고 Shell계정은 주지 않기
/etc/passwd을 연다.
test:x:500:500::/home/test:/bin/bash <-- /bin/bash 부분입니다.
cat /etc/shells (쉘이 등록된 것이 보임)
/bin/bash2
/bin/bash
/bin/sh
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh
이곳에 임의로 하나를 등록 합니다.
예를 들어 /bin/nosh 이라고 아래부분에 추가한후
cd /bin
touch nosh
그리고 /etc/passwd 쪽에서 쉘부분의 세팅만 바꿔 주면 됩니다.
test:x:500:500::/home/test:/bin/nosh <-- 요깁니다.
이외에도 백도어 점검, ProtSentry로 실시간 해킹방어 구현 등을 설정할 수 있다.
총 정리를 해보자면 핵심은 세 가지 이다.
첫 번째, 퍼미션 권한을 제어해서 루트에 접속하지 못하게 할 것.
두 번째, FTP 사용하지 말 것. 탈취될 가능성이 높다.
세 번째, 공격의 위험이 있는 서비스(ping 등)을 끄거나 삭제할 것.
위 글의 답은 아래 글을 읽고 정리한 내용입니다. 원문이 궁금하시다면 확인하세요!
질문출처:
데이터 사이언티스트 - 지원서 겸 체크리스트 (넘버웍스 하용호 대표)
* 출처 : https://docs.google.com/document/d/1zFE15QNo7XyG1zNqLkvNLvf6MiqyOpTpGTc6do8...
blog.naver.com
리눅스의 기본 보안설정
리눅스를 새로설치하게되면 대부분 기본값으로 보안설정이 되어있지않습니다. 즉, 기본값으로 운영하게 되면 서버보안이 상당히 취약해 집니다. 아마도 보안은 생각하지않고, 편의를 위한 기
conory.com
https://requireme.tistory.com/m/36?category=350200
리눅스서버 설치후 보안세팅
/*************************** *** Linux Server Setting *** ****************************/ cd /etc/skel/(계정 추가시 마다 public_html이 자동으로 생성된다) mkdir public_html chmod 701 public_html/ ###..
requireme.tistory.com
Linux 서버 보안 점검 체크리스트
리눅스 보안 점검 체크 리스트 0. 현재 실행중인 프로세스 확인 #ps -ef - 프로세스 강제종료 #kill -9 PID 1. SUID 점검하기.(root 소유의 SetUID및 SetGID 파일들 점검 #find / -user root -perm -4000..
prolinux.kr
'✅ Good Question100' 카테고리의 다른 글
자료구조/알고리즘 인터뷰 준비 (0) | 2021.11.11 |
---|---|
(#001.비공개) 쿼리튜닝: MySQL이 요새 느리다는 신고가 들어왔습니다. 첫번째로 무엇을 확인하시고 조정하시겠나요? (0) | 2021.10.12 |
#002. DB 이중화: 빡세게 동작하고 있는 MySQL을 백업뜨기 위해서는 어떤 방법이 필요할까요? (0) | 2021.10.12 |