티스토리 뷰
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일 이하 (패스워드 유출시에 대한 대비 방안) : ISMS 인증시 권고사항은 30일이라고 함 3. 패스워드 최소 사용기간 : 1주 이상 (패스워드 유출시에 대한 대비 방안) |
설정
vim /etc/login.defs
PASS_MIN_LEN 8 : 패스워드 최소 길이 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 에서 최대접근 시도 횟수 설정
: 최대접근 시도값이 너무 작은 경우 정상적인 접속 시도자가 많은 경우 접속 연결 딜레이 발생 가능성이 존재 (ex. 장비의 장애 발생시 동시에 여러명이 로그인 하는 경우)
vim /etc/ssh/sshd_config MaxAuthTries 3 SSH 재시작후 적용 |
좀더 보안에 신경쓰고 싶다면 SSH 접근하는 포트번호도 바꾸어 주자 (bruteforce 툴 같은 경우는 22번 고정일 확률이 높기 때문이다)
vim /etc/ssh/sshd_config #Port 22 Port 5122 |
: 기본 22번이 아닌 다른 포트번호로 바꾸어주면 좋다 (여기서 확인할점은 바꿀포트가 이미 사용중이거나 anoymous port 중에는 피하는게 좋지 않을까 싶다)
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 시 원격 세션 끊기
: 이 설정의 목적은 작업자가 잠시 자리를 비웠을때 다른 타인이 자신의 PC 에서 해당 서버로의 침해를 막기 위함이다. (== 윈도우 화면보호기 와 비슷한 개념)
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/syslog.conf authpriv.* /var/log/secure |
/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 서버 로그 설정
시스템 운영에 대한 로그를 효율적으로 관리하기 위함이며 로그를 확인하기 위해 일일이 각각 서버에 접근할 필요없다.
보안적인 이슈에 대해서는 해커들이 시스템의 칩입하는 경우 추적을 피하기 위해 로그를 우선 삭제한다는 점에서 syslog 는 침해사고에 대한 추적성을 가지게 해준다.
리눅스는 syslog 혹은 rsyslog 둘중 하나 일듯 하다 (ps -ef | grep syslog 확인)
/etc/syslog.conf *.info;mail.none;authpriv.*;cron.none;*.notice;*.alert;*.crit;*.err;*.emerg @"SYSLOG 서버 아이피" |
/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/bin" "/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를 사용하지 않으면 snmp 데몬 을 중지시키거나 snmpd.conf 에 community 값이 디폴트값인 "public, private" 이 아니면 된다.
'Security' 카테고리의 다른 글
nftables 기본 개념 문법 간단 정리 (0) | 2015.06.10 |
---|---|
iptables connlimit and hashlimit (0) | 2015.06.10 |
기업 소프트웨어 라이센스 정리 (0) | 2015.06.09 |
보안점검 툴 (0) | 2015.06.09 |
보안 봉인 파괴 라벨 스티커 (0) | 2015.06.09 |
- Total
- Today
- Yesterday
- virtualbox
- OpenVPN
- SSL
- gitlab
- php
- softether
- centos8
- 인증서
- L2TP
- glusterfs
- IPSEC
- mod_security
- iptables
- NGINX
- MySQL
- pptp
- mariadb
- ssh
- galera
- Apache
- 리눅스
- ntp
- GeoIP
- yum
- 베이어다이나믹
- HAProxy
- WAF
- cURL
- centOS7
- kvm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |