安全加固(Linux加固)
为不同的管理员分配不同的账号
-
目的:根据不同用途设置不同账户账号,提高安全层级
-
实施方法:
- 创建多用途账号
useradd usernamepasswd username
- 修改目录权限
chmod 750 directorychown username:groupname directory- 普通账户使用特定授权命令:
sudo ifconfig
- 创建多用途账号
-
修改
sudo的提权应用usernamehost=shell
-
例如
jerry可以在本地使用useradd命令jerry localhost=/usr/sbin/useradd- 多个命令用“,”隔开
检查高权限文件
- 目的:过高的权限或在不应该时间段创建或修的文件
- 修改配置文件
etc/sudoer sudo 命令的配置文件 find / -type f \( -perm -00007 \) -a -ctime -1 | xargs -I {} ls -lh {}ctime:属性变更mtime:内容修改atime:被访问
去除不需要的账号、修改默认账号shell环境
- 目的:删除系统不需要的默认账号、更改危险账号的默认shell变量,降低被利用的可能性。
- 实施方法
- 删除/锁定多余用户与组
userdel -r usernamegroupdel groupnamepasswd -l username
- 修改程序账户的登录shell
usermod -s /sbin/nologin username
将该账户变为程序账户/系统账户/伪账户
/etc/ssh/sshd_config ssh 配置文件
systemctl restart sshd 修改配置后重启ssh服务生效变更
限制超级管理员远程登录
- 目的:限制具备超级权限的用户远程登录
- 修改远程管理程序ssh的配置文件
vi /etc/ssh/sshd_configPermitRootLogin yes- 修改为->
permitRootLogin no
- 修改为->
- 启动服务
systemctl restart sshd
删除root以外UID为0的用户
- 目的:减少被越权使用的可能性
- 实施方法
- 检查哪些账户的UID为0
awk -F: '($3 == 0) { print $1 }' /etc/passwd
对/etc/passwd文件进行逐行查找,以":"为分隔符对于第三列($3)为0的行,显示第一列的值(print 0$1),即查找所有UID等于0的账户

- 删除账户
userdel -r username- 或者编辑
passwd与shadow文件
- 检查哪些账户的UID为0
不应存在位于高权组的账户
- 目的:检查是否有账户获取过高权限
- 实施方法
- 检查哪些账户属于其他组
grep -v ^# /etc/login.defs |grep "^GID_MIN"|awk '{print $2}'awk -F: '$3>500{print $1}' /etc/passwd | xargs -I {} grep {} /etc/groupgrep -v "/sbin/nologin" /etc/passwd | awk -F : '{print $1}' | xargs -I {} grep {} /etc/group- 进行查找,显示不含
"/sbin/nologin"的账户,普通账户及root账户。对login.defs文件进行查找,反向筛选(-v),排除以"#"开头(^#)的行,实现过滤掉注释行的使用管道符号“|”上述结果传递给grep再次筛选查找,显示以"GID_MIN"开头的行(^GID_MIN)使用管道符"|"将上述结果传递给awk,显示第二列的值(print$2),最终实现显示GID_MIN的值。
- 检查哪些账户属于其他组
缩短默认密码生存周期
- 目的:对于采用静态密码认证的设备,
- 账户密码的生存周期不长于90天
- 实施方法
-
修改文件密码策略文件
-
/etc/login.defs密码策略文件 -
/etc/pam.d/system-auth pam认证文件 -
/etc/security/pwquality.conf新版本CentOs密码策略 -
/etc/pam.dsshd ssh登录策略文件 -
/etc/pam.d/loginLinux登录策略文件 -
/etc/pam.dsshd ssh登录策略文件 -
/etc/pam.d/loginLinux登录策略文件 -
vi /etc/login.defs密码策略文件 -
PASS_MAX_DAYS90 最长使用期限 -
PASS_MIN_DAYS0 最短使用期限 -
PASS_MIN_LEN8 密码最小长度 -
PASS_WARN_AGE7 最长期限到期前7天提醒更改密码
-
设置密码强度策略
- 目的:规范使用高强度密码,延长被爆破的时间
- 实施方法
- 修改pam认证文件
- /etc/pam.d/system-auth
- 添加/修改内容
password requisite pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minclass=3 minlen=8
centos 7 后设置密码复杂性
- authconfig --passminlen=8 --update 密码最短8位
- authconfig --enablereqlower --update 包含一个小写
- authconfig --enablerequpper --update 包含一个大写
- authconfig --enablereqdigit --update 包含一个数字
- authconfig --enablereqother --update 包含一个字符
在文件/etc/security/pwquality.conf
设置强制密码历史
- 目的:防止被社工字典破解
- 实施方法
- 修改pam认证文件
/etc/pam.d/system-auth
- 添加/修改内容
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember = 5
设置账户锁定策略
- 目的:防止被连续试探密码,
降低爆破可能性 - 实施方法
- 修改
pam认证文件/etc/pam.d/system-auth/etc/pam.d/sshd/etc/pam.d/login
- 修改
- 添加/修改内容
auth required pam_tally2.so deny=6 unlock_time=300 even_deny_root root_unlock_time=60
设置关键目录权限
- 目的:在设备权限配置能力内,根据用户的企业需要,配置其所需的
最小权限,以减少被非法访问的可能性。 - 实施方法
- 更改账户主文件的
权限设置chmod 644 /etc/passwdchmod 600 /etc/shadowchmod 644 /etc/group
- 去除多余的
写入操作,例如chmod -R go-w /etc- 作用: 将
组成员(g)和其他用户(o)的可写权限移除(-w)
- 作用: 将
- 更改账户主文件的
修改umask值
- 目的:修改创建文件或目录时候的默认权限,防止
属于该组的其他用户级别组的用户修改该用户的文件。 - 实施方法
- 修改启动脚本文件
/etc/profile/etc/csh.login/etc/csh.cshrc/etc/bashrc
- 修改启动脚本文件
- 启动脚本文件

umask 027反码(值为027)- 即生成的文件默认权限为
777~027
在文件末尾加入umask值 umask 027
限制硬件资源
目的:限制用户对系统资源的使用,避免DDOS等攻击
-
实施方法
- 修改限制文件
vi /etc/security/limits.confps -aux查看当前进程ps -aux | grep httpd | wc -l统计当前httpd的进程数
~ /.bashrc当前用户的登录启动脚本alias ls = "ls -alh"将"ls -alh"命令重命名(设置别名)为"ls"/etc/pam.d/su su命令配置文件gpasswd -a username wheel将某用户加入wheel组
- 加入以下内容
.*soft core 0.* hard core 0.* hard rss 5000.* hard nproc 20

- 修改限制文件
-
修改pam的本地登录文件
vi /etc/pam.d/login
-
在文件末尾加入信息
session required /lib64/security/pam_limits.so
-
日常收集进程数使用
ps aux | grep httpd | wc -l
对用户使用 ls rm 设置别名
- 目的:让
ls随时看清文件属性,让rm需要确认后删除目标实施方法 - 实施方法:
- 修改当前用户的登录启动脚本
vi ~/.bashrc
- 追加别名命令
alias ls=“ls -alh”alias rm=“rm -i
- 修改当前用户的登录启动脚本
禁止任何人su为root账户
目的:避免任何人使用su切换到root,减少提权风险
- 实施办法
- 修改su的配置文件
/etc/pam.d/suauth sufficient /lib.security/pam_rootok.so
- 修改su的配置文件
- 如果需要su 切换,将用户加入到
wheel组gpasswd -a username wheel
去掉所有SUID和SGID
目的:防止被利用提权
全盘查找具有SUID和SGID的对象:
(-perm -0400 -o -perm -02000)的对象chmod ugo-s xxx
- 将
xxx的SUID和SGID属性全部 (ugo:user,group,others) 移除(-s)
find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -lg {} \;
chmod ugo-s 对象
对开放目录设置粘滞位
- 目的:允许小规模开放目录,用户作为暂存目录使用
- 实施办法
为/tmp目录添加粘滞位chmod +t /tmp/- 为
/tmp目录添加粘滞位 (+t)
启用日志记录功能,使用日志服务器

- 目的:增加审计功能,分布保存日志
- 实施方法:
- 修改应用服务器日志配置文件
vi /etc/rsyslog.conf
/etc/rsyslog.conf日志统计程序rsyslog的配置文件- 确认关键日志审计是否存在
*.info;mail.none;authpriv.none;cron.none/var/log/messageauthpriv.*/var/log/secure
- 并添加两行转发日志信息
*.info;mail.none;authpriv.none;cron.none@ip地址authpriv.*@ip地址

- 修改应用服务器日志配置文件
- 重启服务
systemctl restart rsyslog
- 设置日志服务器的配置文件
vi /etc/rsyslog.conf
- 开启接收日志功能
$ModLoad imudp$UDPServerRun 514$template Remote, "/var/log/%$YEAR%-%$MONTH%-%$DAV%/%fromhost-ip%.log"` 远程日志路径
:fromhost-ip, !isequal, “127.0.0.1°?Remote本地日志不存储远程服务- 重启服务
重要日志权限不应该高于640
- 防止日志泄露敏感信息
ls -la /var/log/chmod -R 640 /var/logchattr +a /var/log/messages- 为
/var/log/messages增加底层属性a
- 为
chattr +i /var/log/message.**- 为
/var/log/message增加底层属性i
- 为
lsattr查看文件的底层属性
设置关键文件底层属性
- 目的:增强关键文件的底层属性,降低篡改风险
- 语法:
chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...] - 实施方法:
- 修改关键文件和日志的底层属性
chattr +a /var/log.messagschattr +i /var/log.messages.*chattr +i /var/shadowchattr +i /var/passwdchattr +i /var/group- 不只限于上述文件,可用
lsattr查看更改结果- 不可修改,可追加
chattr +i- 锁死
chattr -i解锁
- 模式:
- a:让文件或目录仅供附加用途。
- b:不更新文件或目录的最后存取时间。
- c:将文件或目录压缩后存放。
- d:将文件或目录排除在倾倒操作之外。
- i:不得任意更动文件或目录。
- s:保密性删除文件或目录。
- S:即时更新文件或目录。
- u:预防意外删除。
关闭非机密远程管理telnet
- 目的:降低被抓包后获取系统关键信息
- 实施方法:
- 修改
telnet配置文件- `vi /etc/xinetd.d/telnet
/etc/xinetd.d/telnet telnet配置文件telnet- 作用:是一种明文传输的远程管理工具,应被淘汰
- 确认/修改内容为
disable = yes
- 修改
使用加密的远程管理ssh
- 目的:使用
安全套接字层加密传输信息,避免被`侦听``敏感信息。 - 实施方法
- 安装ssh软件
www.openssh.com下载
- 修改配置文件
vi /etc/ssh/sshd_config
- 禁止root登录,修改默认端口,开启v2版本
PermitRootLogin noPort 20202Protocol 2
- 重启服务
systemctl restart sshd
- 安装ssh软件
设置访问控制列表
- 目的:设置访问控制白名单,减少被入侵的风险
- 实施方法
- 修改拒绝策略
vi /etc/hosts.deny
- 加入信息
ALL:ALL
- 修改允许策略
vi /etc/hosts.allow- 主机访问白名单
vi /etc/hosts.deny- 主机访问黑名单
- 加入信息
sshd:来访者IP地址
固化常用DNS解析
- 目的:降低被
DNS劫持的可能性 - 作用:绕过浏览器拦截
- 实施方法
- 修改
hosts文件vi /etc/hosts/etc/hostsDNS 解析配置文件/etc/sysctl.conf系统控制文件sysctl -n net.ipv4.conf.all.accept_source_route- 查看
sysctl中的该配置的参数(是否开启了路由) echo 0 > /proc/sys/net/ipv4/conf/all/accept_source之后讲该参数修改为0
加入解析信息
61.59.123.22 www.baidu.com
访问IP 服务器域名
打开syncookie(TCP SYN)
- 目的:缓解
syn flood攻击 - 实施方法:
- 修改系统控制文件
vi /etc/sysctl.confnet.ipv4.tcp_syncookies = 1
- 配置生效
sysctl -p
- 修改系统控制文件
不响应ICMP请求
- 目的:不对ICMP请求作出响应,避免泄露信息
- 实施方法:
- 修改网络策略布尔值
echo 1>/proc/sys/net/ipv3/icmp_echo_ignore_all
禁止处理无源路由
- 目的:
防止被无源数据包利用 - 实施方法
- 检查是否开启了路由功能
sysctl -n net.ipv4.conf.all.accept_source_routeecho 0>/proc/sys/net/ipv4/conf/all/accept_source_route
- 检查是否开启了路由功能
防御syn lood攻击优化
- 目的:修改半连接上线,缓解
syn flood攻击 - 实施方法:
- 查询当前半连接上限:
sysctl net.ipv4.tcp_max_syn_backlog

- 修改半连接上限
sysctl -wnet.ipv4.tcp_max_syn_backlog=“2048"
- 查询当前半连接上限:
FTP使用黑白名单限制
-
目的:防止非法账户访问
ftp -
实施方法
- 检查黑名单文件是否包含高危账户
/etc/ftpusersFTP用户配置`文件
root daemon bin sys adm lp uucp nuucp listen nobody noaccess nobody4
- 使用白名单文件
/etc/user_list用户配置``文件
- 配置文件中是否存在
userlist_deny=NOuserlist_enable=YES
- 检查黑名单文件是否包含高危账户
FTP设置上传文件后的默认权限
- 目的:防止被上传执行脚本
- 实施方法
FTP 配置文件- 检查主配置文件
/etc/vsftpd.conf是否存在如下内容write_enable=YESlocal_umask=022anon_umask=022
FTP设置banner信息
-
目的:防止泄露服务信息
-
实施方法
-
检查主配置文件
/etc/vsftpd.conf是否存在如下内容 -
ftpd_banner=” Authorized users only. All activity may be monitored and reported.”
-
配置可信任的NTP服务器,并确保服务开启
- 目的:保持时间同步,防止某些服务错误
- 实施方法
/etc/ntp.confNTP配置`文件- 检查主配置文件/etc/ntp.conf是否存在如下内容
server X.X.X.X
- 确保服务被启用
systemctl enable ntpdsystemctl status ntpd
检查账户目录中是否存在高危文件
.netrc、.rhosts~/.netrc远程登录配置文件- 目的:防止被使用远程登录漏洞
ps -aux | grep -E "lockd|nfsd|statd|mountd"
- 实施方法
- 检查账户家目录中是否存在远程主机文件
for DIR in cut -d":" -f6 /etc/passwd do if[ -e $DIR/.netrc ]; thenecho "$DIR/.netrc" fi done无返回值则表示正常
打补丁,装补丁
- 可以使系统版本为最新并解决安全问题
- 实施方法
- 使用yum更新
- yum update
- 使用rpm安装
- 访问
http://www.redhat.com/corp/support/errata下载补丁 rpm -Fvh rpm包
- 所有补丁需要在测试环境测试不影响业务服务后才可更新,下载补丁时,一定对文件进行签名核实
关闭NFS服务
-
目的:防止被外挂文件系统,导致入侵
-
实施方法
- 检查是否存在敏感进程
ps aux | grep -E "lockd|nfsd|statd|mountd"
- 检查是否存在敏感进程
-
检查
关闭NFS相关服务systemctl list-unit-files | grep nfssystemctl disable nfs-client.target
关闭无用服务
- 目的:关闭无用服务,提高系统性能,减低漏洞风险
- 实施方法
- 检查有哪些自启动服务,并记录列表
systemctl list-unit-files | grep enabled
- 禁用无用服务
systemctl stop 服务名systemctl disabled 服务名
查看当前进程,是否有名为lockd或nfsd或statd或mountd的进程正在运行。
- 检查有哪些自启动服务,并记录列表
systemctl list -unit-files | grep nfs- 查看所有服务,筛选出名为
nfs的服务 systemctl disable nfs-client.target- 关闭
nfs服务
systemctl list-unit-files | grep enabled 查看所有服务,并筛选出所有自启动服务
systemctl stop xxx停用xxx服务(立即终止该服务,但不影响下次系统使用)
systemctl disable xxx禁用xxx服务(下次系统启动不再自动启动该服务)
建议关闭的服务
- 建议:如无需要,建议关闭或者卸载功能
- 服务列表
rpm -qa | grep -E "^amanda|^chargen|^chargen-udp|^cups|^cups-lpd|^daytime|^daytime-udp|^echo|^echo-udp|^eklogin|^ekrb5-telnet|^finger|^gssftp|^imap|^imaps|^ipop2|^ipop3|^klogin|^krb5- telnet|^kshell|^ktalk|^ntalk|^rexec|^rlogin|^rsh|^rsync|^talk|^tc pmux-server|^telnet|^tftp|^time-dgram|^time-stream|^uucp
隐藏系统提示信息
-
目的:避免通过系统提示信息获取系统状态
-
实施方法
- 查看登录banner信息
- cat /etc/issue
- 清空banner文件
- echo > /etc/issue

- echo > /etc/issue
- 查看登录banner信息
设置登录超时注销
- 目的:防止疏忽导致命令行被他人使用
- 实施方法
- 修改/etc/profile
- vi /etc/profile
- 在HISTFILESIZE下面加入
- TMOUT=180
- 生效
- source /etc/profile
减少history历史数量
-
目的:降低之前操作被窃取的风险
-
实施方法
- 修改
/etc/profile vi /etc/profile- 修改信息
HISTFILESIZE=50
生效
- source /etc/profile
- 修改
跳过grup菜单
- 目的:防止在
grup菜单对引导过程进行修改 - 实施方法
- 修改
grup配置文件- vi /boot/grup2/grup.cfg
- 修改等时
- set timeout=0
- 修改
关闭ctrl+alt+del重启功能
-
目的:防止误操作重启服务器
-
实施方法
-
修改配置文件
vi /usr/lib/systemd/system/ctrl-alt-del.target
-
注释所有内容
-
挖矿病毒需要排查/etc/profile todo

其他终端设备
-
天擎(奇安信/360)- 企业终端安全防护软件 ≈ 360杀毒企业版
-
EDR = Endpoint Detect &Respones 终端检测响应 -
rpm -qa显示当前所有通过rpm安装的软件包 -
cat /etc/issue 查看登录banner信息 -
echo > /etc/issue清空banner文件 -
/boot/grub2/grub.cfg系统启动引导配置文件 -
/usr/lib/systemd/system/ctrl-alt-del.target -
ctrl + alt +del快捷键的配置文件





