用户账号,是计算机使用者的身份凭证或标识,每一个要访问系统资源的额人,必须凭借其用户账号才能进入计算机。在Linux系统中,提供了多种机制来确保用户账号的正当、安全使用。
系统账号清理
将非登录用户的Shell设为/sbin/nologiin
在Linux系统中除了用户手动创建的各种账号之外,还包括随系统或程序安装过程中而生成的其他大量账号。除了超级用户root之外,其他大量账号只是用来维护系统运作、启动或保持任务进程,一般是不允许的登陆的,因此也称为非登录用户。
常见的非登录用户包括bin、daemon、adm、lp、mail、nobody、apache、mysql、dbus、ftp、gdm、haldaemon等。为了确保系统安全,这些用户的登录shell通常是/sbin/nologin,表示禁止终端登录,应确保不被人为改动。
锁定长期不使用的账号
对于长期不用的用户账号,若无法确定是否删除,可以暂时将其锁定(passwd、usermod命令都可以用来锁定和解锁账号)
删除无用的账号
在非登录用户中,还有一部分是很少用到的,如news、uucp、games、gopher等,这些用户可视为冗余账号,可以直接删除。除此之外,还有一些随着应用程序安装的用户账号,若程序卸载以后未能自动删除,需要人为手动删除。
锁定账号文件passwd、shadow
如果服务器中的用户账号已经固定,不在进行更改,还可以采取锁定账号配置文件的方法。使用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,宿主目录等属性信息
设置密码有效期
在不安全的网络环境中,为了降低密码被猜出或者被暴力破解的风险,用户应养成定期修改密码的习惯,避免长期使用同一个密码。管理员可以在服务器端限制用户密码的最大有效天数,对于密码已经过期的用户,登录时将被要求重新设置密码,否则拒绝登录
chage 命令用于设置密码的时限
设置密码有效期
要求用户下次登录时修改密码
[root@localhost ~]# vi /etc/login.defs //适用于新建用户
…
PASS_MAX_DAYS 30
[root@localhost ~]# chage -M 30 tom1 //适用于已有用户
[root@localhost ~]# chage -d 0 tom1 //强制在下次登录时更改密码
再登录tom1时会显示
WARNING: Your password has expired.
You must change your password now and login again!
更改用户 tom1 的密码 。
为 tom1 更改 STRESS 密码。
(当前)UNIX 密码:
命令历史限制
shell环境的历史命令机制为用户提供了极大的便利,但另一方面也给用户带来了潜在的风险。只要获得用户的历史命令文件,该用户的命令操作过程将会一览无余,如果曾经在命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。
bash终端环境中,历史命令的记录条数由变量HISTSIZE控制,默认为1000条。通过修改/etc/profile文件中的HISTSIZE变量值,可以影响系统中的所有用户。
例如:设置最多只记录200条历史命令
[root@localhost ~]# vi /etc/profile //适用于新登录用户
…省略部分内容
将其中的HISTSIZE=1000,修改为HISTSIZE=200
[root@localhost ~]# export HISTSIZE=200 //适用于当前用户
注销时自动清空命令历史:修改用户宿主目录中的~/.bash_logout文件,添加清空历史命令的操作语句。即:当用户注销(退出已登录的bash环境)时,所记录的历史命令将自动清空
[root@localhost ~]# vi .bash_logout
~/.bash_logout
history -c
clear
[root@localhost ~]# history
source .bash_logout
或者
使用vi /etc/profile,将其中的history值改为0
bash终端环境中,可以设置一个闲置超时时间,当超过指定时间没有任何输入时即自动注销终端,这样可以有效避免当管理员不在时其他人员对服务器的误操作风险。闲置时间有变量TMOUT来控制,默认单位为秒
闲置60s后自动注销
[root@localhost ~]# vi /etc/profile //适用于新登录用户
… //省略部分内容
export TMOUT=60
[root@localhost ~]# source /etc/profile
[root@localhost ~]# export TMOUT=60 //适用于当前用户
大多数Linux服务器并不建议用户直接以root用户进行登录。一方面可以大大减少因误操作而导致的破坏,另一方面也降低了特权密码在不安全的网络中被泄露的风险
Linux为我们提供了su ,sudo 两种命令
su命令主要用来切换用户
sudo命令用来提升执行权限
用途及用法
用途:Substitute User,切换用户
密码验证
root→任意用户,不验证密码
普通用户→其他用户,验证目标用户的密码
[lisi@localhost~]$su -root //带-选项表示将使用目标用户的登录shell环境
密码:
上一次登录:四 6月 14 16:41:35 CST 2020pts/0 上
[root@localhost ~]# whoami
root
限制使用su命令的用户
限制使用su命令的用户
将允许使用su命令的用保护加入wheel组
启用pam_wheel认证模块
查看su操作记录
安全日志文件:/var/log/secure
su命令的安全隐患
默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登陆密码,带来安全风险
为了加强su命令的使用控制,可借助于PAM认证模块,之允许极个别用户使用su命令进行切换
是一种高效而且灵活便利的用户级别的认证方式。
也是当前Linux服务器普遍使用的认证方式。
每一行都是一个独立的认证过程
每一行可以区分为三个字段:
认证类型
控制类型
PAM模块及其参数
PAM认证类型包括四种:
认证管理:接受用户名和密码,进而对该用户的密码进行认证。
账户管理:检查账户是否被允许登录系统,账号是否已经过期,账号的登录是否有时间段的限制等
密码管理:主要用来修改用户的密码
回话管理:主要是提供对用户的管理和记账
一般遵循的顺序
Service(服务)→PAM(配置文件)→pam_*so
首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证
不同的应用程序对应的PAM模块是不同的
如果想查看某个程序是否支持PAM认证可以用ls命令进行查看
控制类型也成称为Control Flags,用于PAM验证类型的返回结果
1.required验证失败时仍然继续,但返回Fail
2.requisite验证失败则立即结束整个验证过程,返回Fail
3.optional不用于验证,只显示信息(通常用于session类型)
su命令的缺点
用过su命令可以非常方便的切换为另一个用户,但前提条件是必须知道目标用户的登录密码
对于生产环境中的Linux服务器,每多一个人知道特权密码,其安全风险也就增加一分
sudo命令的用途及用法
用途:以其他用户身份(如root)执行授权的命令
用法:
sudo 授权命令
配置sudo授权
(1)在配置文件/etc/sudoers中添加授权
sudo机制的配置文件为 /etc/sudoers,文件的默认权限为440,需要使用专门的visudo工具进行编辑。虽然也可以用vi进行编辑,DNA保存时必须执行“:w!”命令来强制操作,否则系统将提示为只读文件而拒绝保存。
配置文件/etc/sudoers中,授权记录的基本配置格式如下所示。
授权配置主要包括用户、主机、命令三个部分,即授权哪些主机上执行哪些命令。各部分的具体含义如下。
用户user:直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。
主机MACHINE:使用此配置文件的主机名称,此部分主要是方便在多个主机间共用同一份sudoers文件,一般设为localhost或者实际的主机名。
命令COMMANDS:允许授权的用户通过sudo放回寺执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。
典型的sudo配置记录中,每行对应一个用户或组的sudo授权配置。
sudo配置记录的命令部分允许使用通配符“*”取反符号“!”,当需要授权某个目录下的所有命令或取消其中的个别命令时特别有用。
默认情况下,通过sudo方式执行的操作并不记录
(2)通过sudo执行特权命令
对于已获得授权的用户,通过sudo方式执行特权命令时,只需要将正常的命令行作为sudo命令的参数即可。由于特权命令程序通常位于/sbin、/user/sbin等目录下,普通用户执行应使用绝对路径
调整BIOS引导设置
将第一引导设备(first boot device)设为当前系统所在硬盘
禁止从其他设备(光盘、U盘、网络)引导系统
将安全级别设为setup,并设置管理员密码
GRUB限制
使用grub2-mkpasswd-pbkdf2生成密钥
修改/etc、grub.d/00_header文件中,添加密码记录
生成新的grub.cfg文件
在Linux系统中,默认开启了六个tty终端,允许任何用户进行本地登录。关于本地登录的安全控制,可以从以下几个方面着手。
1.禁止root用户登录
在Linux系统中,login程序会读取/etc/securetty文件,以决定允许root用户从哪些终端(安全终端)登录系统。若要禁止root用户从指定的终端登录,只需从该文件中删除或者注释掉对应的行即可。
2.禁止普通用户登录
当服务器正在进行备份或调试等维护工作时,可能不希望再有新的用户登录系统。这时候,只需要简单地建立/etc/nologin文件即可。login程序会检查/etc/nologin文件是否存在,如果存在,则拒绝普通用户登录系统(root用户不受限制)。
[root@localhost~]#touch /etc/nologin
Joth the Ripper,简称为JR
一款密码分析工具,支持字典式的暴力破解
通过对shadow文件的口令分析,可以检测密码强度
官方网站:http://www.openwall.com/john/
安装JR工具
安装方法
make clean 系统类型
主程序文件为john
检测弱口令账号
获得Linux/Unix服务器的shadow文件
执行john程序,将shadow文件作为参数
密码文件的暴力破解
准备好密码字典文件,默认为passwd。lst
执行john程序,结合–wordlist=字典文件
一款强大的网络扫描,安全检测工具
可以探测局域网中那些主机在线,或者某台主机中开了那些端口
官方站点是http://namp.org/
nmap被设计为检测众多主机数量的巨大网络,支持ping扫描、多端口检测、OS识别等多种技术。