一、账号口令
1、限制使用su命令的用户
#vim /etc/pam.d/su 在开头添加下面两行: auth sufficient/lib/security/pam_rootok.so auth required/lib/security/pam_wheel.sogroup=wheel #或者将pam_rootok.so和pam_wheel.so use_uid(这行不启用则无法配置指定信任用户切换root)的行首去掉了注释符号'#'则符合;另外pam_wheel.so trust use_uid若启用,则指定信任的用户切换root用户时无须输入密码。 #只有wheel组的成员可以使用su命令成为root用户。你可以把用户添加到wheel组,以使它可以使用su命令成为root用户。添加方法为:# usermod -G wheel xxxx
2、设置口令复杂度
vim/etc/pam.d/system-auth #编辑该文件即修改密码策略复杂度:至少大写一个,小写一个,数字一个,特殊字符一个,密码长度8位以上,密码记录历史5个。如下: password requisite pam_cracklib.so try_first_pass retry=5 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8 remember=5 参数解释: retry=5 #定义登录、或修改密码失败后,可以重复的次数 type= #选项,定义用户修改密码时的提示内容,一般不管 dcredit=-1 #至少一个数字 lcredit=-1 #至少一个小写 ucredit=-1 #至少一个大写 ocredit=-1 #至少一个特殊字符 minlen=8 #密码最短长度为8位 remember=5 #不能重复使用前5次使用过的密码
3、设置口令有效期
vim /etc/login.defs #修改如下参数 PASS_MAX_DAYS 90#设置登录密码有效期90天 PASS_MIN_DAYS 1 #登录密码最短修改时间,增加可以防止非法用户短期更改多次 PASS_MIN_LEN 8 #登录密码最小长度8位 PASS_WARN_AGE 7 #登录密码过期提前7天提示修改 FAIL_DELAY 10 #登录错误时等待时间10秒 FAILLOG_ENAB yes #登录错误记录到日志 SYSLOG_SU_ENAB yes #当限定超级用户管理日志时使用 SYSLOG_SG_ENAB yes #当限定超级用户组管理日志时使用 MD5_CRYPT_ENAB yes #当使用md5为密码的加密方法时使用
4、登录失败超过三次后锁定
vim /etc/pam.d/login 或者/etc/pam.d/sshd #在第一行%PAM-1.0后面添加 auth required pam_tally2.so deny=3 unlock_time=1200 even_deny_root root_unlock_time=1200 #登录失败超过三次锁定1200s 包括root
二、授权认证
1、设置用户的默认umask值为077
echo "uamsk o77" >> /etc/profile source /etc/profile
2、超时自动注销
vim /etc/profile #在“HISTSIZE=”后面加入下面这行: TMOUT=300,表示300秒,也就是表示5分钟;改变这项设置后,使用 source /etc/profile使配置生效。 #回退则是注释或者删除所添加行, source /etc/profile
三、SSH登录控制
1、配置sshd服务端
[root@svr7 ~]# vim /etc/ssh/sshd_config .. .. Subsystem sftp /usr/libexec/openssh/sftp-server .. .. #此行不变,无需改成 “Subsystem sftp internal-sftp”,否则无法登录 Match Group sftpusers #如果登录的是受限组的用户 ChrootDirectory /sftp #禁锢在目录/sftp下 ForceCommand internal-sftp #仅使用内置sftp功能 [root@svr7 ~]# systemctl restart sshd
2、ssh版本升级
详情见博客
四、文件权限安全
1、设置文件的归属和权限
设置文件的归属和权限的意义
Linux将所有对象都当作文件来处理,即使一个目录也被看作是包含有多个其他文件的大文件。因此,Linux中最重要的就是文件和目录的安全性,文件和目录的安全性主要通过权限和属主来保证。设置文件的归属和权限时,应尽量遵循“权限最小化”的原则,不必要的权限就不要给。
[root@svr7 ~]# chmod -R root:root 文档.. .. [root@svr7 ~]# chmod -R o-rwx 文档.. .. #生产中重要文件权限设置 [root@svr7 ~]#chmod 644 /etc/passwd;chmod 644 /etc/shadow;chmod 000 /etc/gshadow;chmod 640 /etc/group;chmod 644 /etc/profile;chmod 744 /etc/rc3.d
2、删除无主文件
删除无主文件的意义
系统管理员在删除用户/群组时,存在着忘记删除该用户/该群组所拥有文件的问题。如果后续新创建的用户/群组与被删除的用户/群组同名,则新用户/新群组会拥有部分不属于其权限的文件,故此将此类文件删除。
[root@svr7 ~]# find / -nouser -o -nogroup //列出无有效属主、属组标记的文档 .. .. .#建议先对结果进行检查,确认可删除再操作 [root@svr7 ~]# find / -nouser -o -nogroup -exec rm -rf {} \; ......#对查找结果执行删除操作
3、处理空链接文件
处理空链接文件的意义
无指向的空链接文件,可能会被恶意用户利用,影响系统安全性。建议用户删除无效的空链接文件,提高系统安全性。
#重点关注关键目录 /bin、/boot、/usr、/lib64、/lib、/var [root@svr7 ~]# find 目录 -type l -follow -exec ls -lh --color {} \; .. .. #列出空链接文件 [root@svr7 ~]# find 目录 -type l -follow -exec rm -rf {} \; .. .. #如果上述文件并无实际作用,确认后可以删除
4、设置守护进程的umask值
设置守护进程的umask值的意义
umask值用来设置用户权限的补码,会影响用户新创建的文件和目录的缺省权限。如果没有设定umask值,则生成的文件具有全局可写权限,存在一定的风险。守护进程负责系统上某个服务,让系统可以接受来自用户或者是网络客户的要求。为了提高守护进程所创建文件和目录的安全性,设置其umask值为0027。
echo "umask 0027" >> /etc/sysconfig/init ;tail -1 /etc/sysconfig/init #或者 echo "umask 0027" >> /etc/profile ;tail -1 /etc/profile
5、 为全局可写(o=rwx)目录添加粘滞位属性
为全局可写(o=rwx)目录添加粘滞位属性的意义
任意用户可以删除、修改全局可写目录中的文件和目录,为了确保全局可写目录中的文件和目录不会被任意删除,需要为全局可写目录添加粘滞位属性。
[root@svr7 ~]# find / -type d -perm -0002 ! -perm -1000 -ls | grep -v proc .. .. #根据结果确认,必要时应该为全局可写目录添加粘滞位属性: [root@svr7 ~]# chmod o+t 找到的目录名称
6、删除非授权文件的全局可写属性
删除非授权文件的全局可写属性的意义
全局可写文件可被系统中的任意用户修改,影响系统完整性。
下面操作可以找出系统中所有的全局可写文件
[root@svr7 ~]# find / -type d \( -perm -o+w \) | grep -v proc [root@svr7 ~]# find / -type f \( -perm -o+w \) | grep -v proc #根据结果确认,粘滞位的文件和目录可以排除在外,根据实际情况删除文件或去掉其全局可写权限。 #使用以下命令去掉权限: [root@svr7 ~]# chmod o-w filename
7、限制at命令的使用权限
限制at命令的使用权限的意义
at命令用于创建在指定时间自动执行的任务。为避免任意用户通过at命令安排工作,造成系统易受攻击,需要指定可使用该命令的用户。
[root@svr7 ~]# rm -f /etc/at.deny #删除at黑名单文件 [root@svr7 ~]# chown root:root /etc/at.allow #控制at白名单文件的归属 [root@svr7 ~]# chmod og-rwx /etc/at.allow #限制对at白名单文件的操作
8、限制cron 命令的使用权限
限制cron 命令的使用权限的意义
cron命令用于创建周期性计划任务,为避免任意用户通过cron命令安排工作,造成系统易受攻击,需要指定可使用该命令的用户。
[root@svr7 ~]# rm -f /etc/cron.deny #删除cron黑名单文件 [root@svr7 ~]# chown root:root /etc/cron.allow #控制cron白名单文件归属 [root@svr7 ~]# chmod og-rwx /etc/cron.allow #限制对cron白名单文件的操作
9、限制sudo 命令的使用权限
限制sudo 命令的使用权限的意义
为了增强系统安全性,有必要对sudo命令的使用权进行控制,只允许root或wheel用户使用sudo命令,限制其他用户使用。
通常wheel组的用户默认是允许使用sudo的,若无此需求,建议将此设置取消。
[root@svr7 ~]#visudo #%wheel ALL=(ALL) ALL #禁用则是注释该行
五、内核参数调优
内核调优的意义:
内核提供了一系列用户可配置的系统控制,允许微调或配置,比如通过控制内核中各种可配置的网络响应参数,来提高操作系统的安全特性
内核调优的操作:
vim /etc/sysctl.d/25-net.conf .. .. net.ipv4.icmp_echo_ignore_broadcasts = 1 #禁止接受ICMP广播报文 net.ipv4.conf.all.rp_filter = 1 #验证数据包使用的实际源地址是否与路由表相关,以及使用该特定源IP地址的数据包才可以通过接口获取其响应 net.ipv4.conf.default.rp_filter = 1 net.ipv4.ip_forward = 0 #关闭路由转发功能(除非作为路由使用时) net.ipv4.conf.all.accept_source_route = 0 #禁止数据包的发送者指定数据包的发送路径, net.ipv4.conf.default.accept_source_route = 0 #禁止返回给发送者的数据包所经过的路径 net.ipv4.conf.all.accept_redirects = 0 #不发送ICMP重定向报文 net.ipv4.conf.default.accept_redirects = 0 #不接受重定向 net.ipv6.conf.all.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 #禁止将ICMP重定向报文发送至其他主机(除非作为路由使用时) net.ipv4.conf.default.send_redirects = 0 net.ipv4.icmp_ignore_bogus_error_responses = 1 #忽略伪造的ICMP数据包,不会将其记录到日志,将节省大量的硬盘空间 net.ipv4.tcp_syncookies = 1 #开启TCP-SYN cookie保护(SYN Attack是一种通过占用系统资源迫使系统重启的DoS攻击) kernel.dmesg_restrict = 1 #加固dmesg信息,仅允许管理员查看 kernel.sched_autogroup_enabled = 0 #禁止内核对线程进行自动分组调度,避免各调度组之间、调度组内的现成之间互相竞争时间片 kernel.sysrq = 0 #禁用魔术键,避免由于直接发送命令到内核对系统造成影响,增强内核安全性 net.ipv4.conf.all.secure_redirects = 0 #接收来自任何主机的ICMP重定向消息,而不是从默认网关列表中的网关处接收ICMP重定向消息 net.ipv4.conf.default.secure_redirects = 0 [root@svr7 ~]# sysctl -p /etc/sysctl.d/25-net.conf //更新内核配置