杜老师出差回来了,刚好得空拜访了小伙伴们的网站,发现近期有些小伙伴的网站被攻击了。其实除了常见的 DDoS,还有一些技术流的攻击形式,主要是通过系统和服务漏洞进行攻击。今天杜老师分享 Linux 服务器安全加固项,供需要的小伙伴们参考。
高危加固项如下表:
项目编号 | 风险描述 | 配置建议 |
---|---|---|
1 | CVE-2021-4034 polkit pkexec 本地提权漏洞检测 | 更新polkit 组件 |
2 | CVE-2023-0386 Linux Kernel OverlayFS 权限提升漏洞漏洞检测 | 根据提示检查内核版本是否低于指定版本【uname -r】 若是CentOS 8 Stream,则执行【yum install kernel】命令升级内核版本,并重启服务器 若是Ubuntu 22.04,则执行【apt install linux-image】查看可安装版本号,选择高于5.15.0-70的版本号,再次执行【apt install linux-image-版本号】,并重启服务器 |
3 | 检测MySQL root用户是否具备数据库备份权限 | 临时以无授权方式进入数据库,建议恢复root用户所有权限。 |
4 | Docker API 未授权访问 | 应开启认证来鉴权或关闭Dokcer Api |
5 | Mysql 弱口令检测 | 如果检测出为弱口令请及时修改密码 |
6 | 检测MySQL root用户是否具备数据库备份权限 | 临时以无授权方式进入数据库,建议恢复root用户所有权限。 |
7 | PHP未禁用危险函数 | 在【php.ini】文件中设置【disable_functions】未配置system,exec,passthru,shell_exec,popen,proc_open等危险函数 提示:【php.ini】未配置system,exec,passthru,shell_exec,popen,proc_open等危险函数 |
8 | PHP存在版本泄露 | 在【php.ini】文件中设置【expose_php】将配置为Off 提示:【expose_php】将配置为Off |
9 | 检测当前Redis密码是否安全 | 1.Redis 密码太过于简单 2.请及时修改密码 |
10 | 检测当前Redis是否安全 | 若非必要,请勿将Redis的bind配置为0.0.0.0 若bind为0.0.0.0的情况下,请务必为Redis设置访问密码 请勿使用过于简单的密码作为Redis访问密码 推荐使用高安全强度的密码:分别包含数字、大小写、特殊字符混合,且长度不少于7位。 Redis一但出现安全问题,这将大概率导致服务器被入侵,请务必认真处理 |
11 | 禁止SSH空密码登录 | 在【/etc/ssh/sshd_config】文件中设置【PermitEmptyPasswords】将配置为no 提示:【PermitEmptyPasswords】将配置为no |
12 | 检测进程中是否有通过strace命令获取其他用户账号信息 | ps aux命令查看是否存在通过strace读取sshd登录凭证 ps aux |
13 | 系统后门用户检测 | 在命令行中删除后门用户 注意:如果存在后门用户说明你服务器已经被入侵 |
14 | tomcat后台访问弱口令检测 | 在【/usr/local/bttomcat/tomcat/conf/tomcat-users.xml】中修改password弱口令 |
中危加固项如下表:
项目编号 | 风险描述 | 配置建议 |
---|---|---|
1 | /etc/bashrc用户缺省权限检查 | 【/etc/bashrc】 文件中所所设置的umask为002,不符合要求,建议设置为027 操作如下:修改 umask 为027 |
2 | 是否启用Docker日志审计检查 | 在【/etc/audit/rules.d/audit.rules】文件中添加-w /usr/bin/docker -k docker 重启auditd进程systemctl restart auditd |
3 | 检查审核日志满了后是否自动删除 | 在【/etc/audit/auditd.conf】中max_log_file_action将ROTATE改为KEEP_LOGS 重启auditd服务systemctl restart auditd |
4 | bootloader配置权限检查 | 对【/boot/grub2/grub.cfg】文件,配置对应权限 chmod 600 /boot/grub2/grub.cfg、chown root /boot/grub2/grub.cfg |
5 | 检查重要文件是否存在suid和sgid权限 | 使用chmod u-s/g-s 【文件名】命令修改文件的权限 |
6 | 检查临时目录是否设置粘滞位权限 | 使用chmod +t 【文件名】命令修改文件的权限 |
7 | /etc/csh.cshrc用户缺省权限检查 | 【/etc/csh.cshrc】 文件中所所设置的umask为002,不符合要求,建议设置为027 操作如下:修改 umask 为027 |
8 | Apache 版本泄露检查 | 在【httpd.conf】文件中添加ServerSignature Off以及ServerTokens Prod |
9 | 开启地址空间布局随机化 | 【/proc/sys/kernel/randomize_va_space】 值为2: 操作如下:sysctl -w kernel.randomize_va_space=2 |
10 | 检测是否限制密码重复使用次数 | 配置文件备份cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth.bak 在【/etc/pam.d/system-auth】文件【password sufficient】后面添加或修改remember=5 |
11 | 检查是否存在危险远程访问文件hosts.equiv、.rhosts、.netrc | 删除在家目录下的.rhosts和.netrc文件以及删除根目录下的hosts.equiv文件 按照提示找到风险文件并删除 |
12 | 检测所有已部署安全证书的网站是否过期 | 请为您的站点续签或更换新的SSL证书,以免影响网站正常访问 SSL证书过期后,用户访问网站将被浏览器提示为不安全,且大部分浏览器会阻止访问,严重影响线上业务 |
13 | SSH 空闲超时时间检测 | 在【/etc/ssh/sshd_config】文件中设置【ClientAliveInterval】设置为600到900之间 提示:SSH空闲超时时间建议为:600-900 |
14 | SSH 最大连接数检测 | 在【/etc/ssh/sshd_config】文件中设置【MaxAuthTries】为3-5 提示:SSH最大连接数为:3-6,请设置为3-5 |
15 | SSH密码复杂度检查 | 【/etc/security/pwquality.conf】 把minclass(至少包含小写字母、大写字母、数字、特殊字符等4类字符中等3类或4类)设置为3或4。如: minclass=3 |
16 | 检查SSH密码失效时间 | 【/etc/login.defs】 使用非密码登陆方式密钥对。请忽略此项, 在/etc/login.defs 中将PASS_MAX_DAYS 参数设置为90-180之间 PASS_MAX_DAYS 90 需同时执行命令设置root密码到期时间 命令如下: chage --maxdays 90 root |
17 | 检查SSH密码修改最小间隔 | 【/etc/login.defs】 PASS_MIN_DAYS 应设置为大于等于7 PASS_MIN_DAYS 7 需同时执行命令设置root 密码失效时间 命令如下: chage --mindays 7 root |
18 | SSH过期提前警告天数 | 在【/etc/login.defs】 PASS_WARN_AGE 大于等于7 提示:PASS_WARN_AGE 30 同时执行命令使root用户设置生效 chage --warndays 7 root |
19 | SSH密码长度度检查 | 【/etc/security/pwquality.conf】 文件中把minlen(密码最小长度)设置为9-32位 minlen=9 |
20 | 检测是否使用安全的套接字层加密传输信息,避免被侦听敏感信息 | 在【/etc/ssh/sshd_config】文件中添加或修改Protocol 2 随后执行命令systemctl restart sshd重启进程 |
21 | 关闭非加密远程管理telnet检查 | 尽可能使用加密远程管理sshd服务,关闭不安全的telnet服务 systemctl stop telnet.socket停止telnet服务 |
22 | 检查是否设置无操作超时退出 | 在文件【/etc/profile】中添加tmout=300,等保要求不大于600秒 执行命令source /etc/profile使配置生效 |
低危加固项如下表:
项目编号 | 风险描述 | 配置建议 |
---|---|---|
1 | 检查ls和rm命令是否设置别名 | 在文件【~/.bashrc】中添加或修改alias ls='ls -alh’以及alias rm=‘rm -i’ 执行【source ~/.bashrc】使配置生效 |
2 | 检测CVE-2019-5736容器逃逸漏洞 | docker version查看docker版本是否小于18.09.2,runc版本小于1.0-rc6 |
3 | CVE-2022-2068 OpenSSL任意命令执行漏洞检测 | 升级OpenSSL至最新版本或是安全版本 1.0.2zf、1.1.1p、3.0.4及以上版本 |
4 | CVE-2022-25845 Fastjson 任意代码执行漏洞检测 | 打开网站目录下的pom.xml文件,查看是否有fastjson依赖库 若fastjson版本小于1.2.83,则需升级到1.2.83或更高的安全版本 |
5 | 检查关键文件的底层属性是否配置 | 给系统日志文件【/var/log/messages】添加只可追加属性chattr +a 给关键文件【/etc/passwd /etc/shadow /etc/group /etc/gshadow】添加锁属性chattr +i |
6 | 检测是否限制账户认证失败的次数 | 在【/etc/pam.d/sshd】文件第二行添加或修改 auth required pam_tally2.so onerr=fail deny=5 unlock_time=300 even_deny_root root_unlock_time=300 |
7 | 检测系统用户列表中是否存在风险用户 | 如果这些用户不是服务器管理员添加的,则可能系统已被入侵,应尽快处理 |
8 | 检测所有网站是否部署安全证书 | 请考虑为您的网站部署SSL证书,以提升网站的安全性 |
9 | 限制SSH登录后使用图形化界面检查 | 在【/etc/ssh/sshd_config】中修改X11Forwarding为no |
10 | 设置ssh登录白名单 | 在【/etc/hosts.deny】添加ALL:ALL 在【/etc/hosts.allow】添加sshd:【来访者IP地址】 |
11 | 检查SSH root是否可以登录 | 【/etc/ssh/sshd_config】 添加PermitRootLogin no参数 PermitRootLogin no |
12 | 检查是否使用PAM认证模块禁止wheel组之外的用户su为root | 在文件【/etc/pam.d/su】中添加auth sufficient pam_rootok.so以及auth required pam_wheel.so group=wheel 如需配置用户可以切换为root,则将用户加入wheel组,使用命令gpasswd -a username wheel |
13 | 检查是否开启TCP-SYNcookie保护缓解syn flood攻击 | 在【/etc/sysctl.conf】文件中添加net.ipv4.tcp_syncookies=1 然后执行命令sysctl -p生效配置 |
14 | /etc/profile用户缺省权限检查 | 【/etc/profile】 文件中所设置的umask为002,不符合要求,建议设置为027 操作如下:修改 umask 为027 |
杜老师并未对以上服务进行分类,需要的小伙伴可以按需查找;
以上加固项按杜老师服务器配置分享,部分服务如未安装则不需要加固;
有参考范围的,则按需要配置,如不知该如何配置,可以取中;
如果需要更多的安全加固项,可在评论区中留言。