디렉토리 보안
- 시스템 디렉토리 접근 불가
sudo -s
chmod 700 /boot /mnt /media /root
chmod 711 / /bin /sbin /usr /usr/bin /usr/sbin
chmod 711 /etc /home /lib /dev /opt /home
chmod 711 /var /var/log /var/log/nginx /var/log/postgresql
- 시스템 정보 노출 안 함
sudo -s
echo tty1 > /etc/securetty
cat /dev/null > /etc/issue
cat /dev/null > /etc/issue.net
chown root:root /etc/issue /etc/issue.net /etc/motd
chmod 0600 /etc/issue /etc/issue.net /etc/motd
파일시스템 보안
임시 파일 생성 디렉토리 /tmp와 공유 메모리 디렉토리 /run/shm 디렉토리에서 파일 실행, 장치 파일 생성 금지 등을 설정한다.
/etc/fstab
파일 수정
# 임시 디렉토리
UUID=임의문자열 /tmp ext4 defaults,noexec,nosuid,nodev 0 2
# 웹 디렉토리
UUID=임의문자열 /www ext4 defaults,nodev,nosuid,noexec 0 2
# 공유 메모리
tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0
공유 메모리 설정을 추가한다.
웹 어플리케이션이 있는 웹 루트 디렉토리를 별도로 두어 위와 같이 설정하면 첨부파일에 의한 해킹을 방지하는데 도움이 된다.
파일시스템 마운트 옵션
- defaults: rw, suid, dev, exec, auto, nouser, async
- noexec: 해당 파티션에서 파일 실행 불가
- nosuid: 해당 파티션에서 SUID, SGID 설정 불가
- nodev: 해당 파티션에서 문자, 블록 디바이스 파일 생성 금지
일반사용자 실행 금지 파일
일반 사용자는 패키지 관리 명령어, 콘솔에서 웹 또는 외부 접근 파일 관련 명령어, 스크립트 실행 명령어, 컴파일/빌드 명령어 등을 금지한다.
#!/bin/bash
FILES="
/usr/bin/apt-get
/usr/bin/apt-cache
/usr/bin/dpkg
/usr/bin/aptitude
/usr/bin/wget
/usr/bin/w3m
/usr/bin/curl
/usr/bin/ssh
/usr/bin/telnet.netkit
/usr/bin/netkit-ftp
/usr/bin/scp
/usr/bin/sftp
/usr/bin/nmap
/usr/bin/python2.7
/usr/bin/python3.5
/usr/bin/perl
/usr/bin/php5
/usr/bin/top
/usr/bin/pstree
/usr/bin/free
/usr/bin/w
/bin/ps
/usr/bin/who
/usr/bin/whoami
/usr/bin/find
/usr/bin/which
/usr/bin/whereis
/usr/bin/write
/usr/bin/wall
/bin/df
/bin/ping
/bin/netstat
/sbin/ifconfig
/bin/kill
/usr/bin/lsof
/usr/bin/make
/usr/bin/gcc
/usr/bin/g++
/usr/bin/c++
"
for f in $FILES
do
# /var/lib/dpkg/statoverride 파일 업데이트
dpkg-statoverride --remove $f
dpkg-statoverride --update --add root admin 0750 $f
done
시스템에 따라 다음 파일은 존재하지 않을 수도 있다.
- /usr/bin/aptitude
- /usr/bin/w3m
- /usr/bin/nmap
- /usr/bin/php5
egg
같은 일반 계정으로 psycopg2-binary
같은 파이썬 패키지 빌드가 필요하다면 아래와 같이 일부 명령어를 임시적으로 허용할 수 있다.
FILES="
/usr/bin/python2.7
/usr/bin/python3.5
/usr/bin/gcc
"
for f in $FILES
do
# /var/lib/dpkg/statoverride 파일 업데이트
dpkg-statoverride --remove $f
dpkg-statoverride --update --add root pincoin 0750 $f
done
이와 같이 허용할지라도 파이썬 패키지 빌드가 끝나면 다시 일반 사용자의 파일 실행을 금지한다.
파일 권한 보안
- SUID 파일 찾기
sudo find / -perm +4000
- GUID 파일 찾기
sudo find / -perm +2000
- SUID/GUID 파일 동시 찾기
sudo find / -path /proc -prune -o -type f -perm +6000 -ls
- 누구든지 쓸 수 있는 파일 찾기
sudo find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
- 소유자가 없는 파일 찾기
sudo find /dir -xdev \( -nouser -o -nogroup \) -print