Linux 服务器安全优化

前言

在Linux中最小权限和最少服务才能构成最大的安全,所以在配置服务器时把不用的服务关闭、系统权限设置到最小化才能最大限度的保证安全。

用户安全

  1. 去掉无用的用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 注意:不建议直接删除,因为当你需要某个用户时,自己重新添加会很麻烦。

# 注释掉这些用户
cp /etc/passwd /etc/passwd.backup
vi /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
# uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
# operator:x:11:0:operator:/root:/sbin/nologin
# games:x:12:100:games:/usr/games:/sbin/nologin
# gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
# ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

# 注释掉这些用户组
cp /etc/group /etc/group.backup
vi /etc/group
# adm:x:4:root,adm,daemon
# lp:x:7:daemon,lp
# uucp:x:14:uucp
# games:x:20:
# dip:x:40:
  1. 添加一个sudo账户

因为 root 用户权限过于变态,操作不当甚至可能清除服务器所有的数据。所以建议平时使用受限制的sudo帐户而不是root账户,需要权限时再使用sudo命令提升权限,以便于管理。

1
2
3
4
5
6
7
8
9
10
11
# CentOS / Fedora
yum install sudo # 安装sudo
useradd UserName # 创建用户
passwd UserName # 输入密码
usermod -aG wheel UserName # 添加用户到有sudo权限的wheel组

# Debian / Ubuntu
apt-get install sudo # 安装sudo
adduser UserName # 创建用户
passwd UserName # 输入密码
adduser UserName sudo # 添加用户到sudo组

权限安全

  1. sudo用户的权限
1
2
3
4
5
6
7
8
9
10
11
12
13
# 用visudo命令编辑/etc/sudoers

# 允许哪个用户执行哪些命令,ALL代表没有限制
UserName ALL =(ALL)ALL # 允许UserName使用sudo执行任何命令

# 允许哪个用户或组无密码使用sudo,NOPASSWD代表该用户组执行sudo命令时不需要输入密码
%UserGroup ALL =(ALL)NOPASSWD: ALL # 允许UserGroup组成员无需密码使用sudo

# 赋予部分管理权限
%users ALL=/sbin/poweroff,/sbin/reboot # 仅允许users组中的成员执行关机重启命令

# 配置sudo需要再次输入密码的时间
Defaults timestamp_timeout=20 # 设置sudo后密码保持的时间为20分钟。默认5分钟
  1. 禁止非root用户执行/etc/rc.d/{init.d}下的系统命令
1
2
3
4
5
chmod -R 700 /etc/init.d/*
chmod -R 700 /etc/rc.d/init.d/*

chmod -R 777 /etc/init.d/* # 恢复默认设置
chmod -R 777 /etc/rc.d/init.d/* # 恢复默认设置
  1. 给下面的文件加上不可更改属性,从而防止非授权用户获得权限

注意:执行以下权限修改之后,就无法添加删除用户了。
如果需要添加删除用户,需要先取消权限锁定设置,等添加删除用户完成之后,再执行下面的操作

1
2
3
4
5
6
7
8
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/gshadow
chattr +i /etc/services # 给系统服务端口列表文件加锁,防止未经许可的删除或添加服务

chattr -i /etc/passwd # 取消权限锁定设置
lsattr /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/services #显示文件的属性

网络安全

  1. SSH安全配置
1
2
3
4
5
6
7
8
9
10
11
cd ~/.ssh
ssh-keygen -t rsa # 生成密钥对,将生成的id_rsa和id_rsa.pub备份到自己的本地电脑
mv id_rsa.pub authorized_keys # 导入公钥后建议删除服务器端的私钥以保证安全
rm id_rsa # 妥善保存id_rsa私钥后再删除,丢了服务器可就没法再登陆了

sudo vi /etc/ssh/sshd_config
Port 2222 # 更改端口为你需要的
PasswordAuthentication no # 禁用密码验证
PubkeyAuthentication yes # 启用密钥验证
PermitRootLogin no # 禁用root登录
PermitEmptyPasswords no # 禁用空密码登陆
  1. 配置防火墙

iptables:Linux内核的包过滤框架,默认情况下iptables包含在大多数 Linux 发行版中。
firewall:CentOS/Fedora系列发行版的iptables控制器。
U F W : Debian/Ubuntu提供的一个iptables前端。

1
2
3
4
5
6
7
8
9
10
11
# 注意:UFW默认配置为拒绝所有传入,如果不添加SSH策略就开启UFW防火墙远程SSH将失败。
sudo apt-get install ufw # 安装UFW

sudo ufw allow http # 允许外部tcp访问http网站
sudo ufw allow https # 允许外部tcp访问https网站
sudo ufw allow ssh # 允许SSH连接传入

sudo ufw deny stmp # 拒绝外部访问stmp服务
sudo ufw deny from 8.8.8.8 # 拒绝来自8.8.8.8所有连接

sudo ufw enable # 开启UFW防火墙并开机自启
  1. 禁止服务器被ping
1
2
vi /etc/rc.d/rc.local			# 添加下面这行命令让禁PING开机后运行
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all # 参数0表示允许,1表示禁止

其他安全

  1. 隐藏服务器系统信息

默认情况下,当你登陆后它会告诉你该linux发行版的名称、版本、内核版本、服务器的名称。
为了不让这些信息泄露出来,执行下面的操作可以让它只显示一个 “login:” 提示符。

1
2
3
4
# 修改/etc/issue和/etc/issue.net这两个文件,或者把这2个文件改名,效果是一样的。

mv /etc/issue /etc/issuebak
mv /etc/issue.net /etc/issue.netbak