Linux服务器安全加固系列(持续完善...)
一、检查是否存在除root之外UID为0 的用户
1 检查步骤: 2 执行以下命令查看系统中uid为0的账号。 3 方法一:#cat /etc/passwd |awk -F: '($3 == 0) { print $1 }' 4 方法二:#awk -F : '($3 == 0) {print $1}' /etc/passwd 5 6 合规标准: 7 除root外无其他uid为0的账号则合规,否则不合规。 8 9 加固方案: 10 #执行备份 11 cp -p /etc/passwd /etc/passwd.bat 12 cp -p /etc/shadow /etc/shadow.bat 13 cp -p /etc/group /etc/group.bat 14 #删除除root以外uid为0的账户(删除前应确保账号未被其他业务使用) 15 userdel usename
二、检查是否按用户分配账号
1 检查步骤: 2 1.使用如下命令查看文件/etc/login.defs,确认文件中变量UID_MIN和UID_MAX的值。 3 #grep -v ^# /etc/login.defs |grep "^UID_MIN"|awk '($1="UID_MIN"){print $2}' 4 #grep -v ^# /etc/login.defs |grep "^UID_MAX"|awk '($1="UID_MAX"){print $2}' 5 2.使用以下命令查看系统中是否存在用户id>=UID_MIN且<=UID_MAX的用户。 6 #up_uidmin=`(grep -v ^# /etc/login.defs |grep "^UID_MIN"|awk '($1="UID_MIN"){print $2}')` 7 #up_uidmax=`(grep -v ^# /etc/login.defs |grep "^UID_MAX"|awk '($1="UID_MAX"){print $2}')` 8 #echo "users="`cat /etc/passwd|awk -F: '{if( $3>='$up_uidmin' && $3<='$up_uidmax' ) {print $1":"$3}}'` 9 10 合规标准: 11 存在用户id>=UID_MIN且<=UID_MAX的用户则合规,否则不合规。 12 13 加固方案: 14 #创建用户 15 #useradd username #创建账号 16 #passwd username #设置密码修改权限
三、检查系统中是否存在空密码账户
1 检查步骤: 2 执行以下命令查看系统中是否存在空密码账户 3 awk -F : '($2 == "") {print $1}' /etc/shadow 4 5 合规标准: 6 执行上面命令后显示为空则合规。否则不合规,即在/etc/shadow文件中第二项不能为空。 7 8 加固方案: 9 1.执行备份 10 cp -p /etc/shadow /etc/shadow.bat 11 cp -p /etc/passwd /etc/passwd.bat 12 cp -p /etc/group /etc/group.bat13 13 2.设置密码 14 passwd username 15 16 测试: 17 1.创建用户: 18 useradd aaa (此时aaa没有设置密码,但还不能使用空密码登录) 19 2.使用root账户清除aaa密码 20 passwd -d aaa 21 3.再次使用如下命令检查 22 awk -F : '($2 == "") {print $1}' /etc/shadow (此时发现显示不为空了)
四、检查用户口令设置
1 检查步骤: 2 执行以下命令检查以下参数 3 PASS_MAX_DAYS #密码最长过期天数参考值90 4 PASS_MIN_DAYS #密码最小过期天数参考值0 5 PASS_MIN_LEN #密码最小长度参考值8 6 PASS_W ARN_AGE #密码过期警告天数参考值7 7 8 合规标准: 9 密码设置符合策略则合规。否则不合规。 10 11 加固方案: 12 1.执行备份 13 cp -p /etc/login.defs /etc/login.defs.bat 14 2.修改如下参数 15 PASS_MAX_DAYS #密码最长过期天数参考值90 16 PASS_MIN_DAYS #密码最小过期天数参考值0 17 PASS_MIN_LEN #密码最小长度参考值8 18 PASS_W ARN_AGE #密码过期警告天数参考值7
五、设置用户密码的强度
1 检查步骤: 2 执行以下命令修改参数 3 vi /etc/pam.d/sysetm-auth 4 difok= :此选项用来定义新密码中必须要有几个字符和旧密码不同 5 minlen=:此选项用来设置新密码的最小长度 6 ucredit= :此选项用来设定新密码中可以包含的大写字母的最大数目。-1 至少一个 7 lcredit=:此选项用来设定新密码中可以包含的小写字母的最大数目 8 dcredit=:此选项用来设定新密码中可以包含的数字的最大数目 9 ocredit=:此选项用来设定新密码中可以包含的标点符号的最大数目 10 11 合规标准: 12 新密码不能和旧密码相同,新密码至少8位,同时包含大小写字母、数字和符号则合规。否则不合规 13 14 加固方案: 15 1.执行备份 16 cp -p /etc/pam.d/sysetm-auth /etc/pam.d/sysetm-auth.bat 17 2.修改参数,在文件中找到开头为如下字样的内容: 18 password requisite pam_cracklib.so 19 将其修改为: 20 password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 21 注:这个密码强度的设定只对普通用户有限制作用,root用户无论修改自己的密码还是修改普通用户的时候,不符合强度设置依然可以设置成
六、对用户的登录次数进行限制
1 检查步骤: 2 执行以下命令修改文件中的参数 3 vi /etc/pam.d/sshd 4 5 合规标准: 6 对用户登录次数进行限制,当普通用户输入密码错误达到3次锁定150秒,root用户输入密码错误达到3次锁定300秒则合规。否则不合规。 7 注:锁定的意思即使密码输入正确也无法登录成功。 8 9 加固方案: 10 1.执行备份 11 cp -p /etc/pam.d/sshd /etc/pam.d/sshd.bat 12 2.设置如下 13 auth required pam_tally2.so deny=3 unlock_time=150 14 even_deny_root root_unlock_time300
七、检查是否删除与设备运行、维护等工作无关的账号
1 检查步骤: 2 #cat /etc/shadow |sed '/^\s*#/d' |awk -F: '($2!~/^*/) && ($2!~/^!!/) {print $1}' 3 4 加固方案: 5 #删除用户 6 #userdel username 7 #锁定用户 8 #passwd -l username #锁定用户,只有具备超级用户权限的使用者方可使用。 9 #passwd –d username #解锁用户,解锁后原有密码失效,登录设置新密码才能登录。 10 #passwd -u username #解锁用户后,原密码仍然有效。 11 #修改用户shell域为/bin/false 12 #usermod -s /bin/false username #命令来更改相应用户的shell为/bin/false,其中[name]为要修改的具体用户名。
八、禁止root用户远程登录
1 检查步骤: 2 执行以下命令修改文件中的参数 3 vi /etc/ssh/sshd_config 4 修改参数为 PermitRootLogin no 5 6 合规标准: 7 root用户无法远程登录(如CRT登录)则合规。否则不合规 8 9 加固方案: 10 1.执行备份 11 cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bat 12 2.修改如下 13 进入/etc/ssh/sshd_config文件 14 修改参数:PermitRootLogin no
九、设置历史命令保存条数和账户超时时间
1 检查步骤: 2 执行以下命令修改文件中的参数 3 vi /etc/profile 4 修改参数为 5 HISTSIZE=100 6 TMOUT=600 7 8 合规标准: 9 设置历史命令保存条数和账户超时时间,这个历史条数和超时时间不要太大,越小越好 10 11 加固方案: 12 1.执行备份 13 cp -p /etc/profile /etc/profile.bat 14 2.修改如下 15 进入/etc/profile文件 16 修改参数: 17 HISTSIZE=100 18 TMOUT=600
十、设置只有指定用户组才能使用su命令切换到root用户
1 检查步骤: 2 将普通用户加入wheel组: 3 usermod -G wheel linux 4 执行以下命令编辑文件 5 vi /etc/pam.d/su 6 将下面这行注释去掉 7 auth required pam_wheel.so use_uid 8 执行以下命令编辑文件 9 vi /etc/login.defs 10 末尾加入SU_WHEEL_ONLY yes 即可。 11 12 合规标准: 13 只有指定用户才能使用su命令切换到root用户。 14 15 加固方案: 16 1.执行备份 17 cp -p /etc/pam.d/su /etc/pam.d/su.bat 18 2.修改如下 19 将普通用户加入wheel组:usermod -G wheel linux 20 执行以下命令编辑文件:vi /etc/pam.d/su 21 将下面这行注释去掉:auth required pam_wheel.so use_uid 22 执行以下命令编辑文件:vi /etc/login.defs 23 末尾加入SU_WHEEL_ONLY yes 即可。
十一、对Linux账户进行管理
1 检查步骤: 2 1.查看具有登录权限的用户: 3 # awk -F: '($7=="/bin/bash"){print $1}' /etc/passwd 4 2.查看UID为0的账号,UID为0的用户会自动切换到root用户,所以危害很大 5 # awk -F: '($3==0)' /etc/passwd 6 3.查看空口令账号,如果存在空口令用户的话必须设置密码 7 #awk -F: '($2=="")' /etc/shadow 8 9 加固方案: 10 1.删除不必要的账户 11 使用命令 userdel -r usename 12 2.锁定不必要的账户 13 使用命令 passwd -l username 14 注意:username是删除或锁定的账户名称
十二、停止或禁用与系统无关的服务
1 检查方法: 2 查看当前init级别: 3 who -r 4 runlevel 5 查看所有服务的状态: 6 chkconfig --list 7 8 加固方法: 9 1.备份方法:在改之前记录需要关闭服务的名称 10 2. 设置服务在个init级别下开机是否启动 11 chkconfig --level <服务名> on|off|reset
十三、对重要文件进行锁定,即使是root'用户也无法删除
1 设置要求: 2 根据公司的业务需求,觉得哪些文件比较重要,就设置 3 4 加固方案: 5 chattr 改变文件或目录的扩展属性 6 lsattr 查看文件目录的扩展属性 7 操作命令: 8 chattr +i /etc/passwd /etc/shadow //增加属性 9 chattr -i /etc/passwd /etc/shadow //移除属性 10 sattr /etc/passwd /etc/shadow //查看修改后属性
十四、检查密码重复使用次数限制
1 检查步骤: 2 查看文件/etc/pam.d/system-auth,是否有配置口令重复使用次数限 3 4 合规标准: 5 口令重复使用次数限制不小于5次则合规,否则不合规。 6 对于采用静态口令认证技术的设备,应配置设备,使用户不能重复使用最近5次(含5次)内已使用的口令。 7 8 加固方案: 9 1、配置文件备份 10 cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth.bak 11 2、创建文件/etc/security/opasswd用于存储旧密码,并设置权限。 12 touch /etc/security/opasswd 13 chown root:root /etc/security/opasswd 14 chmod 600 /etc/security/opasswd 15 3、编辑文件/etc/pam.d/system-auth,找到类似行password sufficient pam_unix.so,在行末尾增加remember=5,中间以空格隔开.如果没有则新增。 16 password sufficient pam_unix.so remember=5
十五、检查是否设置SSH登录前警告Banner
1 检查步骤: 2 查看文件/etc/ssh/sshd_config,检查是否存在如下配置:banner <file_path>,且<file_path>内容不为空。 3 4 合规标准: 5 ssh服务器未启用或者服务启用但设置了ssh banner警示信息则合规,否则不合规。 6 注:横幅被用来警告用户连接特定站点的策略。为你的网站提供适当的警告横幅。 7 SSH登录时显示警告信息,在登录成功前不泄漏服务器信息。 8 9 加固方案: 10 1、编辑文件/etc/ssh/sshd_config文件,修改Banner参数的值如下(如不存在则新增): 11 Banner /etc/ssh_banner 12 2、执行如下命令创建ssh banner警示信息文件: 13 touch /etc/ssh_banner 14 chmod 644 /etc/ssh_banner 15 echo "Authorized only. All activity will be monitored and reported" > /etc/ssh_banner 16 可根据实际需要修改该文件的内容。 17 3、重启sshd服务: 18 systemctl restart sshd
*加固方案二:
配置ssh服务的打开显示提示信息选项,默认为打开。 编辑提示语文件/etc/motd,默认该文件为空。 删除原来的提示,加入需要的内容即可。
十六、检查重要目录或文件权限设置
1 检查步骤: 2 使用以下命令查看如下文件的权限设置: 3 #ls -lL /etc/passwd 2>/dev/null 4 #ls -lL /etc/shadow 2>/dev/null 5 #ls -lL /etc/group 2>/dev/null 6 7 合规标准: 8 1、/etc/passwd文件的权限小于等于644 9 2、/etc/shadow文件的权限小于等于400 10 3、/etc/group文件的权限小于等于644 11 以上条件同时满足则合规,否则不合规。 12 配置要求: 13 在设备权限配置能力内,根据用户的业务需要,配置其所需的最小权限。 14 15 加固方案: 16 #赋予用户相关账号文件最小权限 17 #chmod 644 /etc/passwd 18 #chmod 400 /etc/shadow 19 #chmod 644 /etc/group
、、、
持续完善中....
分类:
Linux
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探