账号安全控制
用户账号是计算机使用者的身份凭证或标识,每个要访问系统资源的人,必须凭借其用
户账号才能进入计算机。在
Linux
系统中,提供了多种机制来确保用户账号的正当、安全使
用。
基本安全措施
1
.系统账号清理
在
Linux
系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而
生成的其他大量账号。除了超级用户
root
之外,其他大量账号只是用来维护系统运作、启
动或保持服务进程,一般是不允许登录的,因此也称为非登录用户账号。
常见的非登录用户账号包括
bin
、
daemon
、
adm
、
lp
、
mail
等。为了确保系统安全,这
些用户账号的登录
Shell
通常是
/sbin/nologin
,表示禁止终端登录,应确保不被人为改动,
如下所示。
[root@localhost ~]#
grep "/sbin/nologin$" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
…… //
省略部分内容
各种非登录用户账号中,还有相当一部分是很少用到的,如
games
。这些用户账号可
以视为冗余账号,直接删除即可。除此之外,还有一些随应用程序安装的用户账号,若卸载
程序以后未能自动删除,则需要管理员手动进行清理。
对于
Linux
服务器中长期不用的用户账号,若无法确定是否应该删除,可以暂时将其锁
定。例如,若要锁定、解锁名为
zhangsan
的用户账号,可以执行以下操作(
passwd
、
usermod
命令都可用来锁定、解锁账号)。
第
2
页 共
21
页
第
3
页 共
21
页
[root@localhost ~]#
usermod -L zhangsan
//
锁定账号
[root@localhost ~]#
passwd -S zhangsan
//
查看账号状态
zhangsan LK 2017-08-24 0 99999 7 -1 (
密码已被锁定。
)
[root@localhost ~]#
usermod -U zhangsan
//
解锁账号
[root@localhost ~]#
passwd -S zhangsan
zhangsan PS 2017-08-24 0 99999 7 -1 (
密码已设置
,
使用
SHA512
算法。
)
如果服务器中的用户账号已经固定,不再进行更改,还可以采取锁定账号配置文件的方
法。使用
chattr
命令,分别结合
“
+
i”“-i”
选项来锁定、解锁文件,使用
lsattr
命令可以查看文
件锁定情况。
[root@localhost ~]#
chattr +i /etc/passwd /etc/shadow
//
锁定文件
[root@localhost ~]#
lsattr /etc/passwd /etc/shadow
//
查看为锁定的状态
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost ~]#
chattr -i /etc/passwd /etc/shadow
//
解锁文件
[root@localhost ~]#
lsattr /etc/passwd /etc/shadow
//
查看为解锁的状态
---------------- /etc/passwd
---------------- /etc/shadow
在账号文件被锁定的情况下,其内容将不允许变更,因此无法添加、删除账号,也不能
更改用户的密码、登录
Shell
、宿主目录等属性信息。
[root@localhost ~]#
chattr +i /etc/passwd /etc/shadow
[root@localhost ~]#
useradd billgate
useradd
:无法打开
/etc/passwd
2
.密码安全控制
在不安全的网络环境中,为了降低密码被猜出或被暴力破解的风险,用户应养成定期更
改密码的习惯,避免长期使用同一个密码。管理员可以在服务器端限制用户密码的最大有效
天数,对于密码已过期的用户,登录时将被要求重新设置密码,否则将拒绝登录。
执行以下操作可将密码的有效期设为
30
天(
chage
命令用于设置密码时限)。
3
.命令历史、自动注销
Shell
环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在
的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在
命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。
Bash
终端环境中,历史命令的记录条数由变量
HISTSIZE
控制,默认为
1000
条。
用户切换与提权
1
.
su
命令
——
切换用户
(
1
)
su
命令用法
使用
su
命令切换用户的操作将会记录到安全日志
/var/log/secure
文件中,可以根据需要
进行查看。
(
2
)
PAM
安全认证
PAM(Pluggable Authentication Modules)
,是
Linux
系统可插拔认证模块,是一种高效
而且灵活便利的用户级别的认证方式,它也是当前
Linux
服务器普遍使用的认证方式 。
PAM
提 供 了 对 所 有 服 务 进 行 认 证 的 中 央 机 制 , 适 用 于
login
, 远 程 登 录
(
telnet,rlogin,fsh,ftp
),
su
等应用程序中。系统管理员通过
PAM
配置文件来制定不同应用
程序的不同认证策略。
PAM
认证原理如下所示:
PAM
认证一般遵循的顺序:
Service
(服务)
→PAM
(配置文件)
→pam_*.so
;
PAM
认证首先要确定哪一项服务,然后加载相应的
PAM
的配置文件
(
位于
/etc/pam.d
下
)
,最后调用认证文件
(
位于
/lib/security
下
)
进行安全认证;
用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到
PAM
模块进行
认证。不同的应用程序所对应的
PAM
模块也是不
每一行都是一个独立的认证过程;
每一行可以区分为三个字段:
认证类型
控制类型
PAM
模块及其参数
PAM
认证类型包括四种:
认证管理(
authentication management
):接受用户名和密码,进而对该用户的密码进
行认证;
帐户管理(
account management
):检查帐户是否被允许登录系统,帐号是否已经过
期,帐号的登录是否有时间段的限制等;
密码管理(
password management
):主要是用来修改用户的密码;
会话管理(session management
):主要是提供对会话的管理和记账。
控制类型也可以称做
Control Flags
,用于
PAM
验证类型的返回结果。
required
验证失败时仍然继续,但返回
Fail
requisite
验证失败则立即结束整个验证过程,返回
Fail
sufficient
验证成功则立即返回,不再继续,否则忽略结果并继续
optional
不用于验证,只是显示信息(通常用于
session
类型)
2
.
sudo
命令
——
提升执行权限
在配置文件/etc/sudoers
中添加授权
授权配置主要包括用户、主机、命令三个部分,即授权哪些人在哪些主机上执行哪些命
令。各部分的具体含义如下。
用户(
user
):直接授权指定的用户名,或采用
“%
组名
”
的形式(授权一个组的所有
用户)。
主机(
MACHINE
):使用此配置文件的主机名称。此部分主要是方便在多个主机
间共用同一份
sudoers
文件,一般设为
localhost
或者实际的主机名即可。
第
10
页 共
21
页
命令(
COMMANDS
):允许授权的用户通过
sudo
方式执行的特权命令,需填写
系统引导和登录控制
在互联网环境中,大部分服务器是通过远程登录的方式来进行管理的,而本地引导和终
端登录过程往往容易被忽视,从而留下安全隐患。特别是当服务器所在的机房环境缺乏严格、
安全的管控制度时,如何防止其他用户的非授权介入就成为必须重视的问题。
开关机安全控制
对于服务器主机,其物理环境的安全防护是非常重要的,不仅要保持机箱完好、机柜锁
闭,还要严格控制机房的人员进出、硬件设备的现场接触等过程。在开关机安全控制方面,
除了要做好物理安全防护以外,还要做好系统本身的一些安全措施。
1
.调整
BIOS
引导设置
(
1
)将第一优先引导设备(
First Boot Device
)设为当前系统所在磁盘。
(
2
)禁止从其他设备(如光盘、
U
盘、网络等)引导系统,对应的项设为
“Disabled”
。
(
3
)将
BIOS
的安全级别改为
“setup”
,并设置好管理密码,以防止未授权的修改。
2
.限制更改
GRUB
引导参数
在之前的课程中介绍过通过修改
GRUB
引导参数,对一些系统问题进行修复。从系统
安全的角度来看,如果任何人都能够修改
GRUB
引导参数,对服务器本身显然是一个极大
的威胁。为了加强对引导过程的安全控制,可以为
GRUB
菜单设置一个密码,只有提供正
确的密码才被允许修改引导参数。
为
GRUB
菜单设置的密码建议采用
“grub2-mkpasswd-pbkdf2”
命令生成,表现为经过
PBKDF2
算法加密的字符串,安全性更好。生成密码后在
/etc/grub.d/00_header
配置文件
中,添加对应的用户、密码等配置,具体添加内容如下所示。
终端及登录控制
在
Linux
服务器中,默认开启了六个
tty
终端,允许任何用户进行本地登录。关于本地
登录的安全控制,可以从以下几个方面着手。
1
.禁止
root
用户登录
在
Linux
系统中,
login
程序会读取
/etc/securetty
文件,以决定允许
root
用户从哪些终
端(安全终端)登录系统。若要禁止
root
用户从指定的终端登录,只需从该文件中删除或
者注释掉对应的行即可。例如,若要禁止
root
用户从
tty5
、
tty6
登录,可以修改
/etc/securetty
文件,将
tty5
、
tty6
行注释掉。
…… //
省略部分内容
2
.禁止普通用户登录
当服务器正在进行备份或调试等维护工作时,可能不希望再有新的用户登录系统。这时
候,只需要简单地建立
/etc/nologin
文件即可。
login
程序会检查
/etc/nologin
文件是否存在,
如果存在,则拒绝普通用户登录系统(
root
用户不受限制)。
此方法实际上是利用了
shutdown
延迟关机的限制机制,只建议在服务器维护期间临时
使用。当手动删除
/etc/nologin
文件或者重新启动主机以后,即可恢复正常。
弱口令检测、端口扫描
本节将学习使用两个安全工具
——John the Ripper
和
NMAP
。前者用来检测系统账号
的密码强度,后者用来执行端口扫描任务。
弱口令检测
——John the Ripper
在
Internet
环境中,过于简单的口令是服务器面临的最大风险。尽管大家都知道设置一
个更长、更复杂的口令会更加安全,但总是会有一些用户因贪图方便而采用简单、易记的口
令字串。对于任何一个承担着安全责任的管理员,及时找出这些弱口令账号是非常必要的,
这样便于采取进一步的安全措施(如提醒用户重设更安全的口令)。
John the Ripper
是一款开源的密码破解工具,能够在已知密文的情况下快速分析出明
文的密码字串,支持
DES
、
MD5
等多种加密算法,而且允许使用密码字典(包含各种密码
组合的列表文件)来进行暴力破解。通过使用
John the Ripper
,可以检测
Linux/UNIX
系统
用户账号的密码强度。
1
.下载并安装
John the Ripper
John the Ripper
的官方网站是
http://www.openwall.com/john/
,通过该网站可以获取稳
定版源码包,如
john-1.8.0.tar.gz
。
以源码包
john-1.8.0.tar.gz
为例,解压后可看到三个子目录
——doc
、
run
、
src
,分别
表示手册文档、运行程序、源码文件,除此之外还有一个链接的说明文件
README
。其中,
第
15
页 共
21
页
第
16
页 共
21
页
doc
目录下包括
README
、INSTALL、
EXAMPLES
等多个文档,提供了较全面的使用指导。
切换到
src
子目录并执行
“make clean linux-x86-64”
命令,即可执行编译过程。若单独
执行
make
命令,将列出可用的编译操作、支持的系统类型。编译完成以后,
run
子目录下
会生成一个名为
john
的可执行程序。
John the Ripper
不需要特别的安装操作,编译完成后的
run
子目录中包括可执行程序
john
及相关的配置文件、字典文件等,可以复制到任何位置使用。
2
.检测弱口令账号
在安装有
John the Ripper
的服务器中,可以直接对
/etc/shadow
文件进行检测。对于
其他
Linux
服务器,可以对
shadow
文件进行复制,并传递给
john
程序进行检测。只需执
行
run
目录下的
john
程序,将待检测的
shadow
文件作为命令行参数,就可以开始弱口令
分析了。
在执行过程中,分析出来的弱口令账号将即时输出,第一列为密码字串,第二列的括号
内为相应的用户名(如用户
kadmin
的密码为
“123456”
)。默认情况下,
john
将针对常见的
弱口令设置特点,尝试破解已识别的所有密文字串,如果检测的时间太长,可以按
Ctrl
+
C
组合键强行终止。破解出的密码信息自动保存到
john.pot
文件中,可以结合
“--show”
选项进
行查看。
3
.使用密码字典文件
对于密码的暴力破解,字典文件的选择很关键。只要字典文件足够完整,密码破解只是
时间上的问题。因此,
“
什么样的密码才足够强壮
”
取决于用户的承受能力,有人认为超过
72
小时仍无法破解的密码才算安全,也可能有人认为至少暴力分析一个月仍无法破解的密码才
足够安全。
从上述结果可以看出,由于字典文件中的密码组合较少,因此仅破解出其中四个账号的
口令。也不难看出,像
“123456”“iloveyou”
之类的密码有多脆弱了。
网络扫描
——NMAP
1
.安装
NMAP
软件包
在
CentOS 7
系统中,既可以使用光盘自带的
nmap-6.40-7.el7.x86_64.rpm
安装包,
也可以使用从
NMAP
官方网站下载的最新版源码包,这里以
YUM
方式安装的
nmap
软件
包为例。
2
.扫描语法及类型
NMAP
的扫描程序位于
/usr/bin/nmap
目录下,使用时基本命令格式如下所示。
第
19
页 共
21
页
nmap
[
扫描类型
] [
选项
] <
扫描目标
...>
其中,扫描目标可以是主机名、
IP
地址或网络地址等,多个目标以空格分隔;常用的
选项有
“-p”“-n”
,分别用来指定扫描的端口、禁用反向
DNS
解析(以加快扫描速度);扫描
类型决定着检测的方式,也直接影响扫描的结果。
比较常用的几种扫描类型如下。
-sS
,
TCP SYN
扫描(半开扫描):只向目标发出
SYN
数据包,如果收到
SYN/ACK
响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。
-sT
,
TCP
连接扫描:这是完整的
TCP
扫描方式,用来建立一个
TCP
连接,如果
成功则认为目标端口正在监听服务,否则认为目标端口并未开放。
-sF
,
TCP FIN
扫描:开放的端口会忽略这种数据包,关闭的端口会回应
RST
数
据包。许多防火墙只对
SYN
数据包进行简单过滤,而忽略了其他形式的
TCP
攻
击包。这种类型的扫描可间接检测防火墙的健壮性。
-sU
,
UDP
扫描:探测目标主机提供哪些
UDP
服务,
UDP
扫描的速度会比较慢。
-sP
,
ICMP
扫描:类似于
ping
检测,快速判断目标主机是否存活,不做其他扫描。
P0
,跳过
ping
检测:这种方式认为所有的目标主机是存活的,当对方不响应
ICMP
请求时,使用这种方式可以避免因无法
ping
通而放弃扫描。
3
.扫描操作示例
针对本机进行扫描,检查开放了哪些常用的
TCP
端口、
UDP
端口。
在扫描结果中,
STATE
列若为
open
则表示端口为开放状态,为
filtered
表示可能被防
火墙过滤,为
closed
表示端口为关闭状态。
检查 192.168.4.0/24 网段中有哪些主机提供 FTP 服务。
快速检测 192.168.4.0/24 网段中有哪些存活主机(能 ping 通)。第 21 页 共 21 页
检测 IP 地址位于 192.168.4.100~200 的主机是否开启文件共享服务。
[
实际上,
NMAP
提供的扫描类型、选项还有很多,适用于不同的扫描需求,本章仅介
绍了其中一小部分常用的操作,更多用法还需要大家进一步通过实践去掌握。