스마일서브도 개나소나 다 받는 ISMS 인증을 준비하고 있다.
리눅스 서버에 대한 보안 설정을 해보자~
1. 디폴트 계정 및 불필요한 계정 삭제
cat /etc/passwd 로 확인
계정은 시스템에 필요한 시스템 계정
프로그램 설치시 생성되는 계정
그중 OS가 설치될때 디폴트로 생성되는 계정은 패스워드 또한 디폴트 설정이 되어 있는 경우가 많으며 무작위 및 추측성 공격에 악용 가능성 존재
불필요한 디폴트 계정 삭제 (뭔지는 모르겠으나 삭제하였음)
[root@localhost ~]# userdel lp [root@localhost ~]# userdel uucp [root@localhost ~]# userdel nuucp userdel: ‘nuucp’ 사용자가 없습니다 |
로그인 쉘에서 계정을 삭제하지 않고 /etc/passwd 에서 /bin/false 로 수정하는 경우 보안상 문제 발생 가능성 → 삭제해준다
2. 관리자 권한 계정 확인 (root 권한은 UID = 0, GID = 0)
root 와 UID 가 중복되는 계정 확인 root 이외에 계정이 /etc/passwd 에서 0:0의 값을 가지지는 확인 |
계정간에 UID 중복시 발생 가능한 문제점
1. 사용자간 감사 추적의 어려움 2. 사용자 권한의 중복성 |
UID 의 값이 root 를 제외한 값이 0일경우 해당 계정 삭제 혹은 100 이상의 UID 지정
GID가 0인 계정이 나오면 적절한 권한의 GID 할당 (시스템 계정은 제외 : daemon, bin, adm, uucp, nuucp, lp, hpdb, sync, shutdown, halt, operator)
UID가 0인 경우는 root 를 제외하고 출력되지 않음 [root@localhost home]# cat /etc/passwd | grep :0: root:x:0:0:root:/root:/bin/bash
GID가 0인 경우는 sync, shutdown, halt, operator 4계가 있는 시스템 계정인듯 함 sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt operator:x:11:0:operator:/root:/sbin/nologin |
usermod 명령어 (유저의 권한등을 변경할수 있는 명령어 인 듯)
[root@localhost ~]# usermod Usage: usermod [options] LOGIN
Options: -c, –comment COMMENT new value of the GECOS field -d, –home HOME_DIR new home directory for the user account -e, –expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE -f, –inactive INACTIVE set password inactive after expiration to INACTIVE -g, –gid GROUP force use GROUP as new primary group -G, –groups GROUPS new list of supplementary GROUPS -a, –append append the user to the supplemental GROUPS mentioned by the -G option without removing him/her from other groups -h, –help display this help message and exit -l, –login NEW_LOGIN new value of the login name -L, –lock lock the user account -m, –move-home move contents of the home directory to the new location (use only with -d) -o, –non-unique allow using duplicate (non-unique) UID -p, –password PASSWORD use encrypted password for the new password -s, –shell SHELL new login shell for the user account -u, –uid UID new UID for the user account -U, –unlock unlock the user account -Z, –selinux-user new SELinux user mapping for the user account
usermod -u [UID번호] [계정명] usermod -g [GID번호] [계정명] |
3. passwd 파일 권한 설정
chmod 644 /etc/passwd chown root /etc/passwd
[root@localhost ~]# ll /etc/passwd -rw-r–r– 1 root root 1530 2014-01-10 13:29 /etc/passwd |
4. group 파일 권한 설정
[root@localhost ~]# chmod 644 /etc/group [root@localhost ~]# chown root /etc/group [root@localhost ~]# ll /etc/group -rw-r–r– 1 root root 773 2014-01-10 13:06 /etc/group |
5. 패스워드 사용규칙
1. 패스워드 최소 길이 : 9자 이상 (패스워드 추측성 공격 예방) 2. 패스워드 최대 사용기간 : 90일 이하 (패스워드 유출시에 대한 대비 방안) 3. 패스워드 최소 사용기간 : 1주 이상 (패스워드 유출시에 대한 대비 방안) |
설정
vim /etc/login.defs
PASS_MIN_LEN 9 : 패스워드 최소 길이 8자 PASS_MAX_DAYS 90 : 패스워드 최대 사용기간 90일 PASS_MIN_DAYS 7 : 패스워드를 변경할 최소 주기 PASS_WARN_AGE 10 : 패스워드 완료일 몇일전에 경고를 띠울지에 대한 설정 |
6. shell (쉘) 제한
로그인이 불필요한 계정에 대해서는 “/bin/sh”등과 같은 shell 제한 – “nologin” “/bin/false” 를 부여하여 로그인 금지해야 함 |
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash (관리자 계정) ta-cap:x:500:500::/home/takakocap:/bin/bash (일반계정) xe:x:501:501::/home/xe:/bin/bash (제로보드 XE 설치할때 만들었던 일반계정) → xe:x:501:501::/home/xe:/sbin/nologin 요렇게 바꿔보았음 xe 계정을 삭제하거나 /bin/false 혹은 nologin 으로 설정
※. UID 100이하 60000 아래에 계정들은 시스템 계정으로 로그인이 필요없음 daemon, bin, sys, adm, listen, nobody, nobody4, noaccess, diag, listen, operator, games, gopher |
쉘 로그인이 필요없는 계정 생성
useradd kek18 -c 테스트용 -d /home/kek18 -m -s /bin/false
7. su 제한
일반 사용자가 su – 명령어를 통해 root 권한을 획득할수 있는 명령어 제한 |
vim /etc/pam.d/su (디폴트 상태는 어떤 일반 계정이라도 su – 명령어를 통해 root 로 로그인)
auth sufficient pam_wheel.so trust use_uid – wheel 그룹에 있는 ID는 su – 명령어를 통해 패스워드 입력없이 root 로 로그인
auth required pam_wheel.so use_uid (권장) – wheel 그룹에 있는 ID 는 su – 명령어를 통해 root 패스워드를 정상적으로 입력했을때 root 로 로그인 |
특정 일반 계정을 wheel 그룹에 넣기
wheel 그룹 생성 (요즘은 기본으로 다 생성되어 있는듯함) groupadd wheel
su 명령어를 wheel 그룹에서만 실행할수 있도록 소유자 변경 chgrp wheel /bin/su
su 명령어 접근 권한 변경 chmod 4750 /bin/su
일반 계정에 wheel 그룹 추가 usermod -G wheel “일반계정ID”
or
vim /etc/group (아래 라인 수정) takakocap 은 일반 계정 이름 wheel:x:10:takakocap |
ssh 에서 root 로 바로 로그인 금지 (일반계정 → su – 명령후 root 접근)
vim /etc/ssh/sshd_config PermitRootLogin no SSH 재시작후 적용 |
ssh 에서 최대접근 시도 횟수 설정
vim /etc/ssh/sshd_config MaxAuthTries 3 SSH 재시작후 적용 |
8. shadow 파일 권한 설정
패스워드가 암호화 되어 저장되어 있는 파일 root 계정만 읽기 가능하도록 설정 퍼미션 (400) or (000)
[root@localhost ~]# ll /etc/shadow ———- 1 root root 1096 2014-01-10 16:40 /etc/shadow
cat /etc/shadow (2번째 필드가 x로 되어 있다는것은 패스워드가 shadow 파일에 암호화로 저장되었다는것을 의미) root:x:0:0:root:/root:/bin/bash
감사에서는 2번째 필드가 x 로 표기되어 있는지 확인 |
원격 세션 접속시 idle 시 원격 세션 끊기
export TMOUT=300 echo TMOUT=300 >> /root/.bash_profile
각 계정마다 설정을 해야한다. |
umask 설정
새로 생성하는 파일의 접근 권한은 umask에 따라 달라짐
현재 유저로 로그인하여 umask 명령어를 통해 umask 값을 알 수 있음
보안상으로 “022” 를 권장하여 파일권한은 “rw-r–r–” 으로 생성 |
일시적으로 umask 값 변경 (로그아웃이나 리부팅하면 디폴트 값으로 돌아옴)
[takakocap@localhost ~]$ umask 0022
[takakocap@localhost ~]$ umask 111
[takakocap@localhost ~]$ umask 0111 |
아래 두개파일을 열어서 vim /etc/profile vim /etc/bashrc
umask 022 로 모두 수정
리부팅후 적용되지만 아래 명령어 날려서 바로 적용 source /etc/profile source /etc/bashrc
어느 계정에서든지 umask 명령어로 확인시 0022 로 출력되면 권고되는 보안설정임 |
su 로그 설정
일반 사용자 → 슈퍼유저로 사용되는 로그를 남김
일반적으로 가용성 및 무결성을 침해하기 위해서는 Super User 권한이 필요함
/etc/syslog.conf authpriv.info /var/log/sulog |
/etc/init.d/syslog restart 하면 아래와 같이 sulog 가 남게 됨
Jan 16 15:14:29 localhost su: pam_unix(su-l:session): session closed for user root Jan 16 15:14:31 localhost su: pam_unix(su-l:session): session opened for user root by takakocap(uid=500) |
syslog 설정
시스템 운영중 발생하는 정보나 경고에 대한 로그를 남기기 위한 보안 설정
/etc/syslog.conf
*.notice/var/log/messages *.alert/dev/consile *.emerg* |
/etc/init.d/syslog restart
history 파일 권한 설정
모든 사용자의 history 파일 권한 600 으로 소유자는 자기자신으로 변경 chmod 600 /root/.bash_history
ll .bash_history -rw——- 1 root root 33038 2014-07-04 16:33 .bash_history |
홈디렉토리 접근 권한
기본적으로 계정이 생성되면 소유자 및 권한은 문제 없는듯 하다 ls -ald /home/smileserv/ drwx—— 3 smileserv smileserv 4096 2014-04-28 16:54 /home/smileserv/
User별 홈디렉토리 타사용자 쓰기 권한 제거 chmod o-w /home/smileserv/ |
PATH 환경 변수 설정
PATH 경로 확인
export $PATH -bash: export: `/usr/loca/openssh/bin:/usr/local/openssh/sbin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin‘: not a valid identifier |
root 계정의 환경변수에 “.” 리눅스에서 “.”은 자기자신을 의미함
“.” 이 “/usr/bon” “/bin” “/sbin” 등의 명령어들이 위치한 디렉토리 보다 우선할 경우
해커가 의도적으로 심어놓은 파일을 실행시킬수 있음
“.” 를 삭제하거나 제일 뒤로 이동시킨다
PATH 경로 변경 (OS별로 경로는 약간 틀릴수 있음)
vi /etc/profile vi /홈디렉토리/.bash_profile |
FTP UMASK 설정
ftp.conf 파일 (FTP 프로그램 마다 설정파일 다 틀림)
umask=077 |
SNMP 서비스 설정
vi /etc/snmp/snmpd.conf com2sec mynetwork 192.168.0.0/24 takakocap |
SNMP를 사용하지 않거나 snmpd.conf 에 community 값이 디폴트값인 “public, private” 이 아니면 된다.
END
[polldaddy rating=”7739789″]