Linux操作系统安全配置

1. 更新系统

更新系统和软件,可以修补部分已知的bug和漏洞

# CentOS
sudo yum makecache
sudo yum update -y
# 如果机器对内核有特俗要求不需要升级
yum update --exclude=kernel* -y
# Ubuntu
sudo apt update
sudo apt upgrade -y

2. 账户相关

• 注释不使用的用户和组

# 需要注释的用户
adm、lp、sync、shutdown、halt、operator、games、ftp
# 编辑文件/etc/passwd
# adm:x:3:4:adm:/var/adm:/sbin/nologin
# lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
# sync:x:5:0:sync:/sbin:/bin/sync
# shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
# halt:x:7:0:halt:/sbin:/sbin/halt

# 需要注释的用户组
adm、lp、games
# 编辑文件/etc/group

# adm:x:4:
# lp:x:7:
# games:x:20:

• 应用账户禁止登陆

# 编辑文件/etc/passwd

postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
etcd:x:996:992:etcd user:/var/lib/etcd:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

# 创建用户时指定/sbin/nologin
useradd user -s /sbin/nologin -M
## -M 不创建用户home

• 设置账户密码策略

# 编辑文件/etc/login.defs

# 设置密码过期天数
PASS_MAX_DAYS       60
# 设置可用密码的最短天数(多长时间不能修改密码)
PASS_MIN_DAYS       0
# 设置密码到期前警告的天数
PASS_WARN_AGE       7
# 设置密码最小长度
PASS_MIN_LEN        9

# 上面的步骤仅仅对新创建的用户生效,现有用户需要命令配置
## PASS_MAX_DAYS
chage -M days user
## PASS_MIN_DAYS
chage -m days user
## PASS_WARN_AGE
chage -W days user
# 强制用户下次登陆修改密码
chage -d 0 user

• 限制su使用

3. 禁用服务

NetworkManager是桌面管理网卡的服务,服务器端不需启动,postfix是邮件服务,通常不需要启动。

# 关闭桌面网卡管理服务
systemctl disable NetworkManager
# 关闭邮件服务
systemctl disable postfix

4. SSH配置

# /etc/ssh/sshd_config
# 禁止root用户ssh登录
PermitRootLogin no
# 绑定监听的网络
ListenAddress 192.168.1.10
# 修改ssh默认端口
Port 22333
# 不显示登录欢迎信息
PrintMotd no
# 配置远程连接超时
ClientAliveInterval 600
ClientAliveCountMax 3
# 最大尝试登录次数
MaxAuthTries 3
# 最大联机数
MaxStartups 3
# 禁止空密码登录
PermitEmptyPasswords no
# 仅允许使用SSH2
Protocol 2
# 禁止密码登录,仅仅允许私钥
# PasswordAuthentication no
# 配置允许ssh的用户(一般只开放一个sudo用户)
AllowUsers user
附:sudo用户创建
# 创建用户
useradd $user
echo $passwd | passwd --stdin $user
# 用户添加sudo
echo "$user ALL=(ALL) ALL" >>/etc/sudoers

5. history优化

histroy表示用户执行命令的历史记录,默认保留2000条

# 仅保留50条命令历史
# 编辑文件/etc/profile
HISTSIZE=50
# 退出终端后自动清理历史记录
# 编辑文件~/.bash_logout
# ~/.bash_logout
history -c
clear

6. 防火墙配置

Linux防火墙在安全方面起到了至关重要的作用,我们尽量去了解下对应的功能和用法。目前Centos7使用的防火墙工具是firewalld,Ubuntu18.04使用的防火墙工具是ufw,为什么说是防火墙工具而不是防火墙呢?

firewalld和ufw自身并不具备防火墙的功能,而是需要通过内核的netfilter来实现,也就是说他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和ufw的结构以及使用方法不一样罢了。

下面简单介绍下二者主要功能和用法:

(下面使用sudo用户操作)

# CentOS7
# 允许firewalld服务(默认开放了ssh端口22)
sudo systemctl enalbe firewalld
sudo systemctl start firewalld
# 查看所有打开的端口(默认的域为public)
sudo firewall-cmd --zone=public --list-ports
# 开放端口
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
# 限制端口
sudo firewall-cmd --zone=public --remove-port=80/tcp --permanent
# 允许特定ip/ip段访问特定端口
sudo firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="80" accept"
# 删除规则
sudo firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="80" accept"
# 重载配置,动态添加规则,服务不中断
sudo firewall-cmd --reload
# 重载配置,停止服务,重新加载配置
sudo firewall-cmd --complete-reload
# Ubuntu
# 允许ufw服务
sudo ufw enable
# 关闭所有外部连结并开启22端口
sudo ufw default deny && sudo ufw allow 22
# 开放端口
sudo ufw allow 80
# 限制端口
sudo ufw delete allow 80
# 允许特定来源ip
sudo ufw allow from 192.168.1.1
# 允许特点来源ip段
sudo ufw allow from 192.168.1.1/24
# 允许特定来源ip/ip段以tcp协议访问特点端口(这个可以随机变通调整)
sudo ufw allow proto tcp from 192.168.0.0/24 to any port 22

7. tcp_wrappers

TCP_Wrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接的特定服务进行安全检测并实现访问控制,凡是包含有libwrap.so库文件的的程序就可以受TCP_Wrappers的安全控制。它的主要功能就是控制谁可以访问,常见的程序有rpcbind、vsftpd、sshd,telnet。

TCP_Wrappers有一个TCP的守护进程叫作tcpd。以ssh为例,每当有ssh的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给真正的ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。

# 设定规则格式
service: hosts
# ALL 所有服务或者所有ip
# ALL EXCEPT 从所有服务或所有ip中除去制定的
# 允许 /etc/hosts.allow
# 允许特定ip使用ssh
sshd: 192.168.1.10
# 除特定ip外都允许ssh
sshd: ALL EXCEPT 192.168.1.20
# 禁止 /etc/hosts.deny
# 禁止特定ip使用ssh
sshd: 192.168.1.20
# 禁止ip段访问所有服务
ALL: 192.168.20.0/24

8. 锁定关键文件

# 锁定关键目录为防止rootkit
# 锁定系统关键目录不可修改
chattr -R +i /bin /sbin /lib /boot
# 锁定用户关键目录为只能添加
chattr -R +a /usr/bin /usr/include /usr/lib /usr/sbin
# 系统关键配置文件锁定不可修改
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/hosts
chattr +i /etc/resolv.conf
chattr +i /etc/fstab
chattr +i /etc/sudoers
chattr -R +i /etc/sudoers.d
# 系统日志系统锁定为只能添加
chattr +a /var/log/messages
chattr +a /var/log/wtmp

9. 终端自动注销

# 修改文件/etc/profile
# 终端600s无操作自动注销
export TMOUT=600

# 使配置生效
source /etc/profile