用户帐号安全优化
1. 删除或禁用系统中不必要的用户和组。
passwd -l username (禁用用户)
2. 确认程序或服务器用户的登录Shell不可用
[root@master script]# vim /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
3. 限制用户密码的有效期
针对已存在的用户:
chage -M 30 zhangsan //30天有效天数;
针对新建的用户:
vim /etc/login.defs
PASS_MAX_DAYS 30
4. 指定用户下次登录必须修改密码
chage -d 0 zhangsan
5. 限制密码的最小长度
通过修改PAM(Pluggable Authentication Module 可拔插认证模块)机制修改密码最小长度限制,强制提高用户自设密码的安全强度(太短或太简单将设置不成功)。
[root@master script]# vim /etc/pam.d/system-auth
password requisite pam_cracklib.so try_first_pass retry=3 minlen=12 type=
6. 限制记录命令历史的条数
修改所有用户的命令历史记录条数
vim /etc/profile
HISTSIZE=100 //条数自己定义。
7. 设置空闲超时时间自动注销终端
将全局的闲置超时时间设为600秒,用户重新登录后生效。
vim /etc/profile
export TMOUT=600 //需要手动添加。
8. 使用su切换用户身份
语法:su [-] 用户名
其中的“-”相当于“--login”,表示使用目标用户的SHELL环境。
pam_wheel模块默认提供了一个用户组wheel用于使用su功能,只要将授权许可的用户加入wheel组,并设置当使用su命令时必须通过pam_wheel模块认证,可以实现控制使用su的用户。
[root@master ~]# gpasswd -a zhangsan wheel
Adding user zhangsan to group wheel
[root@master ~]# vim /etc/pam.d/su
auth required pam_wheel.so use_uid //去掉这行的注释。
这样就实现了普通用户除了zhangsan外,其它用户不能使用su命令切换身份!
9. 使用sudo提升执行权限
sudo命令提供了一种机制,只需要预先在/etc/sudoers配置文件中进行授权,既可以允许特定的用户以超级用户(或其它普通用户)的身份执行命令,而该用户不需要知道超级用户(或其它普通用户)的密码。
/etc/sudoers配置文件,默认权限440,通常使用visudo进行编辑。如果使用vi,则保存文件的时候需要使用“w!”。其配置行语法:user MACHINE=COMMANDS
user:授权指定用户和组(“%组名”)
MACHINE:授权用户可以在哪些主机上使用。一般情况,使用默认localhost即可。
COMMANDS:通过sudo调用的命令,填写对应命令的完整路径,多个以“,”分隔。
PS:执行命令列表可以使用通配符“*”,取反符号“!”。
/etc/sudoers文件配置中用户、主机、命令均可以自定义别名进行代替,格式:
User_Alias OPERATORS=zhangsan,lisi,wangwu
Host_Alias MACHINES=host1,host2
Cmnd_Alias COMMANS=/bin/rpm, /sbin/*, !/sbin/ifconfig eth0
粗体字为关键字,红色为自定义的别名(必须大写),后面为具体的内容。
若需要授权用户不需要密码验证即可使用sudo执行命令,可以结合NOPASSWD:
Cmnd_Alias NETWORK=/sbin/route, /sbin/ifconfig, /bin/ping
zhangsan ALL=NETWORK
ceshi ALL=(NETWORK) NOPASSWD:NETWORK
启用sudo日志功能:
① visudo
Defaults logfile = "/var/log/sudo" //添加此内容到Defaults处;
②vim /etc/rsyslog.conf
local2.debug /var/log/sudo //最下面添加一行;
③重启日志服务
[root@master ~]# /etc/init.d/rsyslog restart //Cetnos 6.X后syslog被rsyslog替代;
普通用户执行命令查看日志:
[root@master ~]# tail /var/log/sudo
Jul 5 14:56:30 : ceshi : command not allowed ; TTY=pts/2 ; PWD=/home/ceshi ;
USER=root ; COMMAND=/sbin/ifconfig
文件和文件系统安全优化
文件系统层次的安全优化
1. 合理规划分区
2. 通过挂载选项禁止执行set位程序、二进制程序
noexec选项可用于禁止直接执行分区中的程序文件;nosquid选项可用于从文件系统层面禁止文件的suid或sgid位权限。
3. 锁定不希望更改的系统文件
使用chattr +i 属性,文件将不能修改;
应用程序和服务
1. 关闭不需要的系统服务;
2. 禁止普通用户执行init.d目录中的脚本(chmod -R 750 /etc/init.d/)
3. 禁止普通用户执行控制台程序
consolehelper(控制台助手),管理着一批系统程序,并允许普通用户执行调用,这个过程对用户来说是透明的。普通用户执行halt、reboot、poweroff、等控制台程序时,通常不需要提供root密码,如果不需要普通用户调用这些程序,可以移除。
[root@master ~]# cd /etc/security/console.apps/
[root@master console.apps]# tar jcpvf conhlp.pw.tar.bz2 poweroff halt reboot --remove
4. 去除程序文件中非必要的set-uid或set-gid附加权限
系统引导和登录安全
1. 调整BIOS当前系统磁盘为第一启动项
2. 防止用户通过“Ctrl+Alt+Del”热键重启系统
以前的系统修改: vim /etc/inittab注释文件中ctrlaltdel行
现在需要:vim /etc/init/control-alt-delete.conf 注释掉里面的内容即可。
3. GRUB引导菜单加密
明文的只需加password 12341即可,这里我说下密文的方法。
[root@master ~]# grub-md5-crypt //生成密文密码串
Password:
Retype password:
$1$oi.en1$wWH/NntT0GPYVxqk24Koh.
[root@master ~]# vim /boot/grub/grub.conf
……………
hiddenmenu
password --md5 $1$oi.en1$wWH/NntT0GPYVxqk24Koh.
title CentOS (2.6.32-358.el6.x86_64)
…………省略部分
终端及登录控制
即时禁止普通用户登录
当服务器正在备份或调试维护工作时,可能不希望再有新的用户登录,这时候,只要简单的建立/etc/nologin文件即可。login程序会检测该文件是否存在,存在则拒绝普通用户登录系统(root用户不受限制),删除该文件或重启恢复。
2. 控制服务器开放的tty终端
[root@master ~]# vim /etc/init/start-ttys.conf
env ACTIVE_CONSOLES=/dev/tty[1-6] //此行的1-6 是你要开启终端的范围;
注:早些的系统是/etc/inittab文件中设置。
3. 控制允许root用户登录的tty终端
编辑/etc/securetty文件,注释或删除对应的行即可。
4. 更改系统的登录提示,隐藏内核版本信息
修改本地登录(/etc/issue)、网络登录(/etc/issue.net)文件实现。
5. 使用pam_access认证控制用户登录地点
pam_access认证读取/etc/security/access.conf文件,格式:权限:用户:来源
权限:“+”表示允许,“-”表示拒绝;
用户名:多个用户名用空格隔开,组则用“@组名”的形式表示。“ALL表示所有用户。
来源:多个源用空格隔开, 可以使用tty1、127.0.0.1、192.168.1.0/24等形式表示。
禁止用户从网络中登录,需要在pam配置文件sshd中添加认证支持:
account required pam_access.so
如果大家还有其它常规优化的补充,希望给予评论,谢谢啦。