安全加固(Linux加固)
为不同的管理员分配不同的账号
-
目的:根据不同用途设置不同账户账号,提高安全层级
-
实施方法:
- 创建多用途账号
useradd username
passwd username
- 修改目录权限
chmod 750 directory
chown username:groupname directory
- 普通账户使用特定授权命令:
sudo ifconfig
- 创建多用途账号
-
修改
sudo
的提权应用username
host=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 username
groupdel groupname
passwd -l username
- 修改程序账户的登录shell
usermod -s /sbin/nologin username
将该账户变为程序账户/系统账户/伪账户
/etc/ssh/sshd_config ssh 配置文件
systemctl restart sshd
修改配置后重启ssh服务
生效变更
限制超级管理员远程登录
- 目的:限制具备超级权限的用户远程登录
- 修改远程管理程序ssh的配置文件
vi /etc/ssh/sshd_config
PermitRootLogin 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/group
grep -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/login
Linux登录策略文件 -
/etc/pam.dsshd ssh
登录策略文件 -
/etc/pam.d/login
Linux登录策略文件 -
vi /etc/login.defs
密码策略文件 -
PASS_MAX_DAYS
90 最长使用期限 -
PASS_MIN_DAYS
0 最短使用期限 -
PASS_MIN_LEN
8 密码最小长度 -
PASS_WARN_AGE
7 最长期限到期前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/passwd
chmod 600 /etc/shadow
chmod 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.conf
ps -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/su
auth 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/message
authpriv.*
/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/log
chattr +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.messags
chattr +i /var/log.messages.*
chattr +i /var/shadow
chattr +i /var/passwd
chattr +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 no
Port 20202
Protocol 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/hosts
DNS 解析配置文件/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.conf
net.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_route
echo 0>/proc/sys/net/ipv4/conf/all/accept_source_route
- 检查是否开启了路由功能
防御syn lood
攻击优化
- 目的:修改半连接上线,缓解
syn flood
攻击 - 实施方法:
- 查询当前半连接上限:
sysctl net.ipv4.tcp_max_syn_backlog
- 修改半连接上限
sysctl -w
net.ipv4.tcp_max_syn_backlog=“2048"
- 查询当前半连接上限:
FTP使用黑白名单限制
-
目的:防止非法账户访问
ftp
-
实施方法
- 检查黑名单文件是否包含高危账户
/etc/ftpusers
FTP
用户配置`文件
root daemon bin sys adm lp uucp nuucp listen nobody noaccess nobody4
- 使用白名单文件
/etc/user_list
用户配置``文件
- 配置文件中是否存在
userlist_deny=NO
userlist_enable=YES
- 检查黑名单文件是否包含高危账户
FTP设置上传文件后的默认权限
- 目的:防止被上传执行脚本
- 实施方法
FTP 配置
文件- 检查主配置文件
/etc/vsftpd.conf
是否存在如下内容write_enable=YES
local_umask=022
anon_umask=022
FTP设置banner信息
-
目的:防止泄露服务信息
-
实施方法
-
检查主配置文件
/etc/vsftpd.conf
是否存在如下内容 -
ftpd_banner=” Authorized users only. All activity may be monitored and reported.”
-
配置可信任的NTP服务器,并确保服务开启
- 目的:保持时间同步,防止某些服务错误
- 实施方法
/etc/ntp.conf
NTP配置`文件- 检查主配置文件/etc/ntp.conf是否存在如下内容
server X.X.X.X
- 确保服务被启用
systemctl enable ntpd
systemctl 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 nfs
systemctl 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
快捷键的配置文件