linux系统一些安全基线部署要求
1、限制root用户ssh远程登录
参考配置操作
1、执行备份: #cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
2、新建一个普通用户并设置高强度密码(防止设备上只存在root用户可用时,无法远程访问): #useradd username #passwd username
3、禁止root用户远程登录系统
(1)、编辑文件/etc/ssh/sshd_config(vi /etc/ssh/sshd_config),修改PermitRootLogin值为no并去掉注释。 PermitRootLogin no #则禁止了root从ssh登录。
(2)、重启SSH服务 #/etc/init.d/sshd restart
4、修改SSH协议版本
(1)、编辑文件/etc/ssh/sshd_config(vi /etc/ssh/sshd_config),修改Protocol的值为2并去掉注释。
(2)、重启ssh服务 #/etc/init.d/sshd restart
检测方法
1、执行以下命令查看配置文件/etc/ssh/sshd_config是否配置拒绝root用户通过ssh协议远程登录: #grep -v “1#" /etc/ssh/sshd_config|grep “PermitRootLogin no”
2、执行以下命令查看ssh协议版本是否为2: #grep -v "2#” /etc/ssh/sshd_config|egrep “protocol\s*2|Protocol\s*2” 判定依据 /etc/ssh/sshd_config文件存在PermitRootLogin no(表示禁止root用户通过ssh协议远程登录)且ssh协议为protocol 2(表示ssh协议版本为2)则合规,否则不合规。
2. 普通用户赋予sudo执行权限
编辑sudoers文件 vi /etc/sudoers 找到这行 root ALL=(ALL) ALL,在他下面添加xxx ALL=(ALL) ALL (这里的xxx是你的用户名) ps:这里说下你可以sudoers添加下面四行中任意一条 youuser ALL=(ALL) ALL %youuser ALL=(ALL) ALL youuser ALL=(ALL) NOPASSWD: ALL %youuser ALL=(ALL) NOPASSWD: ALL 第一行:允许用户youuser执行sudo命令(需要输入密码). 第二行:允许用户组youuser里面的用户执行sudo命令(需要输入密码). 第三行:允许用户youuser执行sudo命令,并且在执行的时候不输入密码. 第四行:允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码.
配置命令:
sed -i ‘95a temobi ALL=(ALL) NOPASSWD: ALL’ /etc/sudoers
检查配置:
grep “ALL=(ALL)” /etc/sudoers|grep -v “#”
3. 禁止存在心血漏洞,升级openssl版本到1.0.1t
解压安装
tar zxf openssl-1.0.1g.tar.gz
cd openssl-1.0.1g
./config
make
make install
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
echo “/usr/local/ssl/lib” >> /etc/ld.so.conf
ldconfig -v
查看是否升级成功
[root@zj ~]# openssl version -a
OpenSSL 1.0.1g 7 Apr 2014
tips: 由于服务器没有root权限,可以创建一个http服务器供所有服务器下载openssl源码包
wget http://10.213.30.130/openssl-1.0.1t.tar.gz
4. 口令复杂度设置(此配置只对普通用户生效,root不生效)
redhat系统 编辑文件/etc/pam.d/system-auth,在文件中找到如下内容: password requisite pam_cracklib.so,将其修改为: password requisite pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8
#至少包含一个数字、一个小写字母、一个大写字母、一个特殊字符、且密码长度>=8
命令:
sed -i ‘s/type=/type= dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8/g’/etc/pam.d/system-auth
检查:
grep pam_cracklib.so /etc/pam.d/system-auth
5. 口令生存周期
检测方法 查看文件/etc/login.defs( more /etc/login.defs),检查如下参数值是否满足要求: PASS_MAX_DAYS 90 #新建用户的密码最长使用天数不大于90 PASS_MIN_DAYS 0 #新建用户的密码最短使用天数为10 PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数为7
参考配置操作 1、执行备份: #cp -p /etc/login.defs /etc/login.defs_bak 2、修改策略设置,编辑文件/etc/login.defs(vi /etc/login.defs),在文件中加入如下内容(如果存在则修改,不存在则添加): PASS_MAX_DAYS 90 PASS_MIN_DAYS 0 PASS_WARN_AGE 7
命令:
sed -i ‘/^PASS_MAX_DAYS/cPASS_MAX_DAYS 90’ /etc/login.defs
检查:
grep ^PASS_MAX_DAYS /etc/login.defs
6、使用PAM认证模块禁止wheel组之外的用户su为root
检测方法 执行命令cat /etc/pam.d/su,查看文件中是否存在如下配置: auth sufficient pam_rootok.so auth required pam_wheel.so group=wheel 判定依据 使用pam_rootok.so认证模块认证且配置了只允许wheel组的用户才能su为root则合规,否则不合规。
参考配置操作
1、编辑文件(vi /etc/pam.d/su)
(1)、redhat4.x(32位)在文件开头加入如下两行(有则修改,没有则添加): auth sufficient /lib/security/
I
S
A
/
p
a
m
r
o
o
t
o
k
.
s
o
a
u
t
h
r
e
q
u
i
r
e
d
/
l
i
b
/
s
e
c
u
r
i
t
y
/
ISA/pam_rootok.so auth required /lib/security/
ISA/pamrootok.soauthrequired/lib/security/ISA/pam_wheel.so use_uid #注意auth与sufficient之间由两个tab建隔开,sufficient与动态库路径之间使用一个tab建隔开
(2)、redhat4.x(64位)在文件开头加入如下两行(有则修改,没有则添加): auth sufficient /lib64/security/
I
S
A
/
p
a
m
r
o
o
t
o
k
.
s
o
a
u
t
h
r
e
q
u
i
r
e
d
/
l
i
b
64
/
s
e
c
u
r
i
t
y
/
ISA/pam_rootok.so auth required /lib64/security/
ISA/pamrootok.soauthrequired/lib64/security/ISA/pam_wheel.so use_uid #注意auth与sufficient之间由两个tab建隔开,sufficient与动态库路径之间使用一个tab建隔开
(3)、redhat5.x和redhat6.x在文件开头加入如下两行(有则修改,没有则添加): auth sufficient pam_rootok.so auth required pam_wheel.so use_uid #注意auth与sufficient之间由两个tab建隔开,sufficient与动态库路径之间使用一个tab建隔开 说明:(这表明只有wheel组中的用户可以使用su命令成为root用户。你可以把用户添加到wheel组,以使它可以使用su命令成为root用户。) 添加方法: #usermod -G wheel username #username为需要添加至wheel组的账户名称。
操作命令:
sed -i ‘6s/#//’ /etc/pam.d/su
usermod -G wheel temobi
检查命令:
grep “pam_wheel.so use_uid” /etc/pam.d/su
7、 登陆超时时间设置
echo -e “TMOUT=300 \nexport TMOUT” >> /etc/profile
检查命令:
grep -A 1 TMOUT /etc/profile
8、文件与目录缺省权限控制
检测方法
查看文件/etc/profile的末尾是否设置umask值: #awk ‘{print $1":"$2}’ /etc/profile|grep umask|tail -n1 判定依据 /etc/profile文件末尾存在umask 027,则合规,否则为不合规。
参考配置操作
1、首先对/etc/profile进行备份: #cp /etc/profile /etc/profile.bak
2、编辑文件/etc/profile,在文件末尾加上如下内容: umask 027
3、执行以下命令让配置生效: #source /etc/profile
操作命令:
echo “umask 027” >> /etc/profile
检测命令:
grep umask /etc/profile
9、 oracle限制sysdba权限类用户远程登录
检测步骤:
一、使用以下命令查看REMOTE_LOGIN_PASSWORDFILE的值: #select t.VALUE from v$parameter t where upper(t.NAME) like ‘%REMOTE_LOGIN_PASSWORDFILE%’; 判定依据: REMOTE_LOGIN_PASSWORDFILE的值为NONE则合规,否则不合规.
参考步骤:
(1).oracle用户登录系统。
(2).sqlplus / as sysdba登陆数据库。
(3).执行alter system set REMOTE_LOGIN_PASSWORDFILE=NONE SCOPE=SPFILE;
(4).shutdown immediate.
(5).startup. 补充说明 此配置影响远程以Sql*Net方式对数据库的管理 此配置也可能使某些第三方ORACLE管理工具不正常
10、 oracle检查口令强度设置
检测步骤:
一、创建一个用户,口令长度设置为<8位,应该创建失败 sql>create user test identified by qwe123 判定依据: 设置了验证密码函数来对账号进行校验则合规,否则不合规.
参考步骤
(1).oracle用户登录系统
(2).修改Oracle自带的默认文件$ORACLE_HOME/rdbms/admin/utlpwdmg.sql创建verify_function函数 (注:utlpwdmg.sql中已经对口令长度,是否包含字母、数字、特殊字符验证)。 1)#vi
O
R
A
C
L
E
H
O
M
E
/
r
d
b
m
s
/
a
d
m
i
n
/
u
t
l
p
w
d
m
g
.
s
q
l
将
以
下
内
容
:
I
F
l
e
n
g
t
h
(
p
a
s
s
w
o
r
d
)
<
4
T
H
E
N
r
a
i
s
e
a
p
p
l
i
c
a
t
i
o
n
e
r
r
o
r
(
−
20002
,
′
P
a
s
s
w
o
r
d
l
e
n
g
t
h
l
e
s
s
t
h
a
n
4
′
)
;
E
N
D
I
F
;
修
改
为
I
F
l
e
n
g
t
h
(
p
a
s
s
w
o
r
d
)
<
8
T
H
E
N
r
a
i
s
e
a
p
p
l
i
c
a
t
i
o
n
e
r
r
o
r
(
−
20002
,
′
P
a
s
s
w
o
r
d
l
e
n
g
t
h
l
e
s
s
t
h
a
n
8
′
)
;
E
N
D
I
F
;
2
)
修
改
u
t
l
p
w
d
m
g
.
s
q
l
里
面
最
后
面
的
部
分
配
置
:
A
L
T
E
R
P
R
O
F
I
L
E
D
E
F
A
U
L
T
L
I
M
I
T
P
A
S
S
W
O
R
D
L
I
F
E
T
I
M
E
60
P
A
S
S
W
O
R
D
G
R
A
C
E
T
I
M
E
10
P
A
S
S
W
O
R
D
R
E
U
S
E
T
I
M
E
1800
P
A
S
S
W
O
R
D
R
E
U
S
E
M
A
X
U
N
L
I
M
I
T
E
D
F
A
I
L
E
D
L
O
G
I
N
A
T
T
E
M
P
T
S
3
P
A
S
S
W
O
R
D
L
O
C
K
T
I
M
E
1
/
1440
P
A
S
S
W
O
R
D
V
E
R
I
F
Y
F
U
N
C
T
I
O
N
v
e
r
i
f
y
f
u
n
c
t
i
o
n
;
为
A
L
T
E
R
P
R
O
F
I
L
E
D
E
F
A
U
L
T
L
I
M
I
T
P
A
S
S
W
O
R
D
V
E
R
I
F
Y
F
U
N
C
T
I
O
N
v
e
r
i
f
y
f
u
n
c
t
i
o
n
;
注
:
o
r
a
c
l
e
10
g
口
令
不
区
分
大
小
写
,
o
r
a
c
l
e
11
g
口
令
区
分
大
小
写
。
u
t
l
p
w
d
m
g
.
s
q
l
设
置
完
毕
(
3
)
.
c
o
n
n
/
a
s
s
y
s
d
b
a
登
陆
数
据
库
后
,
执
行
s
q
l
>
@
ORACLE_HOME/rdbms/admin/utlpwdmg.sql 将以下内容: IF length(password) < 4 THEN raise_application_error(-20002, 'Password length less than 4'); END IF; 修改为 IF length(password) < 8 THEN raise_application_error(-20002, 'Password length less than 8'); END IF; 2)修改utlpwdmg.sql里面最后面的部分配置: ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 60 PASSWORD_GRACE_TIME 10 PASSWORD_REUSE_TIME 1800 PASSWORD_REUSE_MAX UNLIMITED FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1/1440 PASSWORD_VERIFY_FUNCTION verify_function; 为 ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION verify_function; 注:oracle10g口令不区分大小写,oracle11g口令区分大小写。 utlpwdmg.sql设置完毕 (3).conn / as sysdba登陆数据库后,执行 sql>@
ORACLEHOME/rdbms/admin/utlpwdmg.sql将以下内容:IFlength(password)<4THENraiseapplicationerror(−20002,′Passwordlengthlessthan4′);ENDIF;修改为IFlength(password)<8THENraiseapplicationerror(−20002,′Passwordlengthlessthan8′);ENDIF;2)修改utlpwdmg.sql里面最后面的部分配置:ALTERPROFILEDEFAULTLIMITPASSWORDLIFETIME60PASSWORDGRACETIME10PASSWORDREUSETIME1800PASSWORDREUSEMAXUNLIMITEDFAILEDLOGINATTEMPTS3PASSWORDLOCKTIME1/1440PASSWORDVERIFYFUNCTIONverifyfunction;为ALTERPROFILEDEFAULTLIMITPASSWORDVERIFYFUNCTIONverifyfunction;注:oracle10g口令不区分大小写,oracle11g口令区分大小写。utlpwdmg.sql设置完毕(3).conn/assysdba登陆数据库后,执行sql>@ORACLE_HOME/rdbms/admin/utlpwdmg.sql
以上为权重为7的问题处理方法
11、 系统core dump状态
检测方法
1、查看/etc/security/limits.conf文件中是否配置如下内容: * soft core 0 * hard core 0
2、查看/etc/profile文件中是否存在如下配置,存在则注释掉: ulimit -S -c 0 > /dev/null 2>&1 判定依据 设置* soft core、* hard core为0,且注释掉ulimit -S -c 0 > /dev/null 2>&1行则合规,否则不合规。
检测方法
查看/etc/profile文件中是否配置超时设置: #cat /etc/profile |grep -i TMOUT 判定依据 输出存在TMOUT,且其值=300秒则合规,否则不合规。
参考配置操作
1、执行备份 #cp -p /etc/profile /etc/profile_bak
2、在/etc/profile文件增加以下两行(如果存在则修改,否则手工添加): #vi /etc/profile TMOUT=300 #TMOUT按秒计算 export TMOUT
操作命令:
参考配置操作
1、编辑文件/etc/security/limits.conf(vi /etc/security/limits.conf),在文件末尾加入如下两行(存在则修改,不存在则新增): * soft core 0 * hard core 0
2、编辑文件/etc/profile(vi /etc/profile)注释掉如下行: #ulimit -S -c 0 > /dev/null 2>&1
操作命令:
echo -e “* soft core 0 \n* hard core 0” >> /etc/security/limits.conf
检查命令:
grep ‘core|ulimit’ /etc/security/limits.conf
12、 禁止存在bash安全漏洞
检测方法 执行如下命令查看设备是否存在bash安全漏洞。 #env -i X=’() { (a)=>’ bash -c ‘/dev/stdout echo vulnerable’ 2>/dev/null 判定依据 如果以上命令的输出为以下内容则不合规: vulnerable
参考操作步骤:
(1).目前官网已经提供了升级包bash-4.1.2-15.el6_5.1.x86_64.rpm,请自行下载升级.
操作命令:
rpm -Uvh bash-4.1.2-40.el6.x86_64.rpm
检查命令:
env -i X=’() { (a)=>’ bash -c ‘/dev/stdout echo vulnerable’ 2>/dev/null
tips: 由于服务器没有root权限,可以创建一个http服务器供所有服务器下载bash rpm包
wget http://10.213.30.130/bash-4.1.2-40.el6.x86_64.rpm
13、配置用户最小文件权限
检测方法
使用以下命令查看如下文件的权限设置: ls -lL /etc/passwd 2>/dev/null ls -lL /etc/group 2>/dev/null ls -lL /etc/services 2>/dev/null ls -lL /etc/shadow 2>/dev/null ls -lL /etc/xinetd.conf 2>/dev/null ls -lLd /etc/security 2>/dev/null 判定依据
1、/etc/passwd文件的权限小于等于644
2、/etc/shadow文件的权限小于等于400
3、/etc/group文件的权限小于等于644
4、/etc/services文件权限小于等于644
5、/etc/xinetd.conf文件权限小于等于600
6、/etc/security目录权限权限小于等于600 以上六者同时满足则合规,否则不合规。
检查权限命令:
ls -lL /etc/passwd |awk ‘{print $1" "$9}’
ls -lL /etc/group |awk ‘{print $1" "$9}’
ls -lL /etc/shadow |awk ‘{print $1" "$9}’
ls -lL /etc/xinetd.conf|awk ‘{print $1" "$9}’
ls -lLd /etc/security |awk ‘{print $1" "$9}’
配置操作
赋予用户相关账号文件最小权限
chmod 644 /etc/passwd
chmod 400 /etc/shadow
chmod 644 /etc/group
chmod 644 /etc/services
chmod 600 /etc/xinetd.conf
chmod 600 /etc/security
14、设置关键文件属性,设置message只能添加不能删除
检测方法
使用命令查看messages文件是否只可追加不可修改: #lsattr /var/log/messages 判定依据 以上两个文件的权限第六位为a则合规,否则不合规。
参考配置操作
1、更改该日子文件属性 chattr +a /var/log/messages
以上权重为5
以下权重为4-1
15、禁止ICMP重定向
检测方法
使用如下命令查看参数net.ipv4.conf.all.accept_redirects的值: #sysctl -n net.ipv4.conf.all.accept_redirects 判定条件 net.ipv4.conf.all.accept_redirects的值为0则合规,否则不合规。
参考配置操作
1、备份文件 #cp -p /etc/sysctl.conf /etc/sysctl.conf_bak
2、编辑文件 /etc/sysctl.conf,将net.ipv4.conf.all.accept_redirects的值改为0
3、使配置生效#sysctl -p
操作命令:
echo “net.ipv4.conf.all.accept_redirects = 0” >> /etc/sysctl.conf
sysctl -p
检查命令:
sysctl -n net.ipv4.conf.all.accept_redirects
16、 history历史记录条数
检测方法
编辑文件/etc/profile查看是否存在如下内容: HISTFILESIZE=5 HISTSIZE=5 判定依据 HISTFILESIZE和HISTSIZE的值小于等于5则合规,否则不合规。
参考配置操作
1、编辑文件/etc/profile,在文件中加入如下两行(存在则修改): HISTFILESIZE=5 HISTSIZE=5
2、执行以下命令让配置生效 #source /etc/profile
操作命令:
sed -i ‘/^HISTSIZE=1000/cHISTFILESIZE=5\nHISTSIZE=5’ /etc/profile
source /etc/profile
检查命令:
grep HIS /etc/profile
tomcat
17、HTTP加密协议-Linux
检测方法
使用HTTPS协议登录tomcat服务器管理页面。 判定依据 使用HTTPS协议可以成功tomcat服务器管理页面则合规,否则不合规。
参考配置操作
1、使用JDK自带的keytool工具生成一个证书: $JAVA_HOME/bin/keytool -genkey –alias tomcat –keyalg RSA -keystore /path/to/my/keystore 其中目录:/path/to/my需要用户自行创建。
2、修改tomcat安装目录下/conf/server.xml配置文件,更改为使用HTTPS方式,增加如下行: 其中keystorePass的值为生成keystore时输入的密码。
3、重新启动tomcat服务
18、tomcat禁用非法HTTP方法-Linux
检测方法
编辑tomcat配置文件/conf/web.xml文件,查看是否禁用PUT、DELETE等危险的HTTP 方法,查找org.apache.catalina.servlets.DefaultServlet的: readonly true 判定依据
1、readonly的值不存在
2、readonly的值等于true则合规,否则不合规。
参考配置操作
编辑web.xml文件,查看org.apache.catalina.servlets.DefaultServlet是否存在如下配置: readonly true 如果存在,则将false修改为true。readonly参数默认是true,即不允许delete和put操作