type
status
date
slug
summary
tags
category
icon
password
comment
本策略仅是最基本的安全防护策略,以下基本防护都要求实施(如服务器已纳入堡垒机管理,则部分策略可不用实施),已实施的策略需定期维护。(本手册提到的策略设置,均以 root 用户实施)
1.准备工作
如果系统采取的是最小化或最简化安装,在做防护策略前,需安装一些基础软件包。
检查是否安装了 ssh
如果没有安装先行安装:
apt install openssh-server
如果报【openssl-server is not available】的错误先行升级后再次安装
apt-get update
此外,Ubuntu 在装系统的过程,会默认的设置一个初始化用户(如:ubunt),这个初始化用户的权限非常大,在用这个初始化用户设置好 root 的密码、让 root 可以 ssh 登陆后,将这个初始化用户过大的权限去掉。
用初始化用户设置 root 密码
sudo su -
passwd
New password:
Retype new password:
让 root 可以 ssh 登陆
vim /etc/ssh/sshd_config
找到【#PermitRootLogin prohibit-password】这一行
notion image
在这行下面追加[PermitRootLogin yes]
notion image
重启 ssh 服务:
service ssh restart(注意:完成此步后,现在的 ssh 终端窗口不要关,新开一个 ssh 终端窗口,验证 root 已经可以正常登陆,防止出现root不能登录的情况。)
去掉初始化用户过大的权限
查看用户权限(此处用户名是 user01):
id user01
notion image
user01 显示内容类似下面这样:
uid=1000(user01) gid=1000(user01) groups=1000(user01),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),120(lpadmin),131(lxd),132(sambashare)
把 groups 里除了跟用户名一样的组保留以外,其它组都去掉(此例保留了【user01】,其它都去掉)
gpasswd -d user01 adm
gpasswd -d user01 cdrom
gpasswd -d user01 sudo
gpasswd -d user01 dip
gpasswd -d user01 plugdev
gpasswd -d user01 lpadmin
gpasswd -d user01 lxd
gpasswd -d user01 sambashare
再次查看,是否权限过大的组都已经去掉
id user01
2.密码策略
密码策略是基本中的基本,需要第一个做。Ubuntu 系统可以参照下面链接,把密码策略的原理先掌握一遍:
https://www.iplayio.cn/post/1671897
另,Ubuntu 很多地方跟 CentOS 通用,密码策略里各项的意思可以查询下面的链接
http://www.manongjc.com/article/51182.html
本文档也直接给出一个例子:
① 设置密码复杂性
检查是否安装了 libpam-pwquality:
dpkg -s libpam-pwquality
如果没有安装,先行安装 libpam-pwquality 软件包:
apt install libpam-pwquality
notion image
编辑 common-password 文件: vim /etc/pam.d/common-password(注:如果没有 vim,先行 apt install vim 安装)
在该文件中找到【password requisite pam_pwquality.so retry=3】这一行
notion image
在【password requisite pampwquality.so retry=3】后追加【minlen=12 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 maxrepeat=2 maxsequence=3 difok=5 maxclassrepeat=4 remember=2 enforcefor_root】
notion image
各项意含义如下。
  • minlen=12:密码的最小长度为 12 个字符。这是为了确保密码有足够的长度,从而增加密码的复杂性和安全性。
  • dcredit=-1:密码中至少需要包含一个数字(digit)。-1 表示数字是强制要求的。
  • ucredit=-1:密码中至少需要包含一个大写字母(uppercase)。-1 表示大写字母是强制要求的。
  • lcredit=-1:密码中至少需要包含一个小写字母(lowercase)。-1 表示小写字母是强制要求的。
  • ocredit=-1:密码中至少需要包含一个特殊字符(other characters,如 !@#$%^&*() 等)。-1 表示特殊字符是强制要求的。
  • maxrepeat=2:密码中不能有超过两个连续相同的字符。例如,aaa 是不允许的,但 aa 是允许的。
  • maxsequence=3:密码中不能包含超过三个连续的字符序列,无论是数字序列(如 1234)还是字母序列(如 abcd)。例如,12345 是不允许的,但 123 是允许的。
  • difok=5:在修改密码时,新密码至少需要有 5 个字符与旧密码不同。这可以防止用户简单地修改少量字符来生成新密码。
  • maxclassrepeat=4:密码中不能有超过四个连续的相同类别字符(如全部是数字、全部是字母等)。例如,1111aaaa 是不允许的,但 111aaa 是允许的。
  • remember=2:系统会记住用户最近两次使用过的密码。用户在修改密码时,不能重复使用最近两次使用过的密码。这可以防止用户循环使用相同的密码。
  • enforce_for_root:强制对 root 用户应用相同的密码策略。通常,root 用户的密码策略可能会被放宽,但这个选项确保 root 用户的密码也必须符合上述所有规则。
② 再编辑 login.defs 文件
vim /etc/login.defs
将【PASSMAXDAYS 99999】改为【PASSMAXDAYS 180】,即半年强制换一次密码
notion image
  1. ssh 登录策略(如服务器已纳入堡垒机管理,本条策略不实施)
一般来说用户都是通过终端软件远程 ssh,为了加强防护,有必要设置一系列 ssh 登录策略。
① 修改ssh默认端口(默认 22 端口容易黑客被扫描,可以换一个不常见的端口)
编辑sshd_config文件
vim /etc/ssh/sshd_config
找到【#Port 22】这行
notion image
去掉【#Port 22】前面的【#】,将 22 改成一个不常见的端口(本例是 9062,可以设置任意自己想设置的端口号)
重启 sshd 服务
service ssh restart注意:完成此步后,现在的 ssh 终端窗口不要关,新开一个 ssh 终端窗口,验证用新端口已经可以正常登陆
notion image
再注意:如果服务器开启了自带的防火墙, 需要给 ssh 用到的端口放行,具体参见【5. 防
火墙策略】
② 限制ssh登录失败次数
编辑 sshd 文件
vim /etc/pam.d/sshd
在非注释的第一行添加如下内容:【auth required pam_tally2.so deny=3 unlock_time=28800 even_deny_root root_unlock_time=3600
notion image
如果某个账号被锁,用 root 可以查看被锁的账号(本例用户名为 user01):
notion image
pam_tally2 -u user01
并且可以手动清除锁定(本例用户名为 user01):
pamtally2 -r -u user01
3. 禁止 sudo 赋予非 root 用户完全权限
sudo 提权提供了很大的便利,但是最不好的设置习惯就是 【xxxxx ALL=(ALL) NOPASSWD:ALL】,其次是【xxxxx ALL=(ALL) ALL】,这两种方式等同于把 root 账号给了出去。比较好的设置方式是用什么命令提权什么命令,如下图:
notion image
该例非 root 用户是 ydmh,ydmh 需要提权的命令统一纳入一个叫 YDMHAPP 的别名里进行管理(后续如果有追加、删除,在这个别名里增删即可),需要提权的命令都可以无密码执行。
另,检查 sudo 是否已经安装
dpkg -s sudo
若还没有安装需自行安装 sudo
apt install sudo
编辑 sudoers 文件
export EDITOR=vim(visudo 默认的编辑器是 nano,对 nano 不熟悉的可以改为 vim)
visudo(注意:不要用 vim /etc/sudoers 直接编辑,用 visudo 编辑可以自动进行语法检查)
4.history 策略(建议实施)
默认 history 只显示被执行过的命令,不会显示命令执行的时间,且最大保存 1000 条。为了出问题时更好的追踪操作日志,需要实现如下效果:
(1)显示执行命令时间
(2)显示执行命令的用户源 IP
(3)显示执行命令的用户名
notion image
(4)所有用户的执行命令记录统一到一个路径下进行管理
(5)执行命令最多保留 10000 条操作记录
编辑 profile 文件 vim /etc/profile
在该文件最末尾增加如下脚本:
USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`
if [ "$USER_IP" == "" ]; then
USER_IP=`hostname`
fi
export HISTTIMEFORMAT="%F %T $USER_IP:`whoami` "
export HISTSIZE=10000
export HISTFILE="/home/history/${LOGNAME}"
新建存放执行命令记录的路径
mkdir /home/history
chmod 1757 /home/history
重读配置文件使其生效
source /etc/profile
5.防火墙策略
防火墙是非常重要的一项防护手段,很多入侵就是通过闲置端口入侵的。所以把不用的端口都封起来,按需放行,是非常有效的防护手段。个人或者项目组,一般都不会去买硬件防火墙,所幸较新版本的 Linux 都自带防火墙组件,启用即可。这里给出 Ubuntu 的 ufw 的简单设置流程(注意,如果防火墙零基础,在看这个流程前,需把防火墙的基本知识学习一遍,掌握后,用什么端口放行什么端口)。
查看是否安装了 ufw
dpkg -s ufw
如果没有安装则先安装 ufw
apt install ufw
notion image
ufw 设成开机自启
ufw enable
封闭所有端口
ufw default deny
放行 ssh 需要用到的端口
ufw allow 9062/tcp (注意:完成此步后,现在的 ssh 终端窗口不要关,新开一个 ssh 终端窗口,验证放行的端口已经可以正常 ssh 登陆)
查看防火墙状态
ufw status
其他常用命令(比这更复杂的设置请自行搜索资料学习)
删除 9062 端口
ufw delete allow 9062/tcp
允许某个特定的 IP
ufw allow from xxx.xxx.xxx.xxx
删除某个特定的 IP
ufw delete allow from xxx.xxx.xxx.xxx
关闭 ufw
ufw disable
6.服务器监控
服务器监控是非常重要的预警手段,通过监控 CPU、网卡、磁盘读写等的异常,能及时发现服务器是否已经出现问题,及时应对。目前市面上的开源监控工具很多,选择自己喜欢的做部署即可。
如果监控规模不大的话,nagios 能满足基本的性能监控需求,部署也比较简单,可以看官网,也可以参考下面的链接: https://www.linux265.com/news/3506.html
需要注意的是,开源监控软件只是搭好一个监控的框架,具体到监控插件、历史记录保留等功能,每款产品会有所不同,有些需要二次开发。
Who moved my cheese?Ubuntu系统如何实现内核级安全重启?
Loading...