系统安全及应用
目录
一、账号安全控制
1.1 基本安全措施
1.2系统账号清理
- 将非登录用户的Shell设为/sbin/nologiin
- 在Linux系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而产生的其他大量账号,除了root之外,其他大量账号只是用来维护系统运作,启动或保持服务进程,一般是不允许登录的,也称为非登录用户.
- 常见的非登录用户包括bin,daemon,adm,lp,mail,nobody,apache,mysql,dbus,ftp,gdm,haldaemon等。
- 为了确保系统安全,这些用户的登录shell通常是/sbin/nologin,表示禁止终端登录,应确保不被人为改动.
[root@localhost ~]# grep "bash$" /etc/passwd '查看当前可以登录的用户'
-
删除无用的账号
在非登录用户中,还有一部分是很少用到的,如news,uucp,games,gopher等,这些用户可视为冗余账号,可以直接删除 -
此外,还有一些随着应用程序安装的用户账号,若程序卸载以后未能自动删除,需要人为手动删除
-
对于长期不用的用户账号,若无法确定是否删除,可以暂时将其锁定,(passwd,usermod命令都可以用来锁定和解锁账号)
[root@localhost ~]# usermod -L tom1 ##锁定tom1
[root@localhost ~]# passwd -S tom1 ## 查看tom1情况
tom1 LK 2020-06-22 0 30 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U tom1 ## 解锁tom1
[root@localhost ~]# passwd -S tom1
tom1 PS 2020-06-22 0 30 7 -1 (密码已设置,使用 SHA512 算法。)
- 如果服务器中的用户账号已经固定,不在进行更改,还可以采取锁定账号配置文件的方法。
使用chattr命令,分别结合“+i”“-i”选项来锁定,解锁文件,使用lsattr命令可以查看文件锁定情况
chattr命令基本格式
chattr +i [目标文件] '锁定目标文件'
chattr -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 tom3
useradd:无法打开 /etc/passwd
1.3 密码安全控制
- 在不安全的网络环境中,为了降低密码被猜出或者被暴力破解的风险,用户应养成定期修改密码的习惯,避免长期使用同一个密码。
- 管理员可以在服务器端限制用户密码的最大有效天数,对于已经过期的密码,需要登录时重新设置密码,否则将拒绝登录。
执行以下操作:将密码的有效期设置为30天。
[root@localhost ~]# vi /etc/login.defs ## 进入文档编辑 如下图所示 (适用于新建的用户)
[root@localhost ~]# chage -M 30 lisi '对于已创建的用户,用这条命令'
- 在某些特定情况下要求用户初次登录的时候必须更改密码
例如,强制要求用户tom1下次登录时重设密码 '(重设的密码有密码复杂性要求,例如不可是连续的数字,连续的字母等)
例如:执行以下操作可以强制要求用户tom1 下次登录时重设密码
[root@localhost ~]# chage -d 0 tom1 ##强制要求下次tom1登陆时重设密码
tom1 登陆时:
You are required to change your password immediately (root enforced)
Last login: Mon Jun 22 17:25:17 2020 from 192.168.145.1
WARNING: Your password has expired.
You must change your password now and login again!
更改用户 tom1 的密码 。
为 tom1 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
1.4 命令历史,自动注销。
- Shell环境的历史命令机制为用户提供了极大的便利,同时也给用户带来了潜在的风险。只要获得历史命令文件,用户的命令操作过程将会一览无余,如果在历史命令中输入过明文密码,则无意之中安全壁垒又多了一个缺口。
- Bash环境中,历史命令的记录条数由HISTSIZE 控制,默认为1000条。可通过修改/etc/profile 文件中的HISTSIZE变量值,可以影响系统中所有用户。
[root@localhost ~]# vi /etc/profile ## 进入文档编辑 HISTSIZE 如下图
[root@localhost ~]# export HISTSIZE=200 '该命令适用于当前用户,及时成效'
- 注销时自动清空命令历史:修改用户宿主目录中的~/.bash_logout文件,添加清空历史命令的操作语句。即:当用户注销(退出已登录的bash环境)时,所记录的历史命令将自动清空。
[root@localhost ~]# vi .bash_logout
# ~/.bash_logout
history -c
clear
- 在Bash终端环境中,可以设置一个闲置超时时间,到超过规定的时间没有输入命令自动注销,这样可以防止管理员不在时,其他任务对服务器的误操作风险。
- 闲置超时由TMOUT来控制
[root@localhost ~]# vi /etc/profile ## 进入文档末尾最后添加,如文档所示
[root@localhost ~]# export TMOUT=600 ## 适用于当前用户
二、 用户提权与切换
-
大多数Linux服务器并不建议用户直接以root用户进行登录。一方面可以大大减少因误操作而导致的破坏,另一方面也降低了特权密码在不安全的网络中被泄露的风险
-
su ,sudo 两种命令,su命令主要用来切换用户,sudo命令用来提升执行权限。
su 命令 -切换用户
2.1 su 命令 -切换用户
- 使用su命令,可以切换为指定的另一个用户,从而具有该用户的所有权限,切换时需要对目标用户的密码进行验证(从root用户切换为其他用户不需要)。
例如:从tom1切换到root
[tom1@localhost ~]$ su - root ## 从其他用户切到root上需要输入密码
密码:
上一次登录:一 6月 22 22:09:01 CST 2020从 192.168.145.1pts/2 上
[root@localhost ~]# su - tom1 ## 从root切换到其他用户不需要输入密码
上一次登录:一 6月 22 22:09:06 CST 2020从 192.168.145.1pts/3
- 上述操作中选项“- ”等同于“-login” 或“-l”,表示切换用户后进入目标用户的Shell环境,若缺少此选项,则仅切换身份、不切换用户环境。对于切换为root用户的情况,“root可以省略”。
-默认情况下,任何用户都能使用su命令,从而由机会反复尝试其他用户(如root)的登录密码,带来安全风险。为了加强su命令的使用 限制,可以借助于pam_wheel认证模块,只允许极个别的用户使用su命令。 - 实现过程:将授权使用su命令的用户添加到wheel组,修改/etc/pam.d/su 认证配置以启用pam_wheel认证。
[root@localhost ~]# gpasswd -a tom1 wheel ## 添加授权用户tom1
正在将用户“tom1”加入到“wheel”组中
[root@localhost ~]# grep wheel /etc/group ## 确认wheel 组成员
wheel:x:10:tom1
[root@localhost ~]# vi /etc/pam.d/su ## 进入配置文件,如下图修改 启用pam_WHEEL授权
验证:
[tom@localhost ~]$ su - root ## tom尝试使用su授权
密码:
su: 拒绝权限
[tom1@localhost ~]$ su - root ## tom1成功使用su切换命令
密码:
上一次登录:一 6月 22 22:38:18 CST 2020pts/3 上
2.2 Linux中的PAM安全认证:
- PAM(Pluggable Authentication Modules)可插拔式认证模块,它是一种高效而且灵活便利的用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式
- PAM认证一般遵循的顺序:Service(服务)→PAM(配置文件)→pam_*.so(.so 后缀代表模块文件)
- PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
- 用户访问服务器的时候,服务器的某一个服务程序把用户的不同请求发送到PAM模块进行认证
不同的应用程序所对应的PAM模块也是不同的。
PAM安全认证流程
2.3 使用sudo机制提升权限
- su命令的缺点
用过su命令可以非常方便的切换为另一个用户,但前提条件是必须知道目标用户的登录密码
对于生产环境中的Linux服务器,每多一个人知道特权密码,其安全风险也就增加一分。 - 使用sudo命令可提升权限,可以让普通用户,拥有一部份管理权限,又不知道密码。
2.4 配置sudo授权
- visudo 或者 vi /etc/sudoers :sudo机制的配置文件为/etc/sudoers,文件的默认权限是440,需要使用专门的visudo工具进行编辑。若使用vi编辑,保存时必须执行“:w!”命令强制操作,否则系统将提示为只读文件而拒绝保存。
- 配置文件/etc/sudoers中,授权的基本格式如下:
user MACHNE =COMMANDS
用户的授权配置基本如下:
- 用户(user):授权的用户名,或采用“%”组名的形式(授权一个组的所有用户)
- 主机(MACHINE):使用此配置文件的主机名称,此部分主要是方便在多个主机间共用一份sudoers文件,一般设为localhost或者实际应用的主机名即可
- 命令(COMMANDS):允许授权的用户通过sudo的方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。
2.5 sudo实验
[root@localhost ~]# id tom1
uid=1002(tom1) gid=1002(tom1) 组=1002(tom1),10(wheel)
[root@localhost ~]# id tom2
uid=1003(tom2) gid=1003(tom2) 组=1003(tom2)
[root@localhost ~]# su - tom3
su: user tom3 does not exist
[root@localhost ~]# su - tom2
[tom2@localhost ~]$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.145.128 netmask 255.255.255.0 broadcast 192.168.145.255
省略。。。。。
[tom2@localhost ~]$ sudo ifconfig ens33 192.168.145.129
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
tom2 不在 sudoers 文件中。此事将被报告。## 修改失败
[root@localhost ~]# su - tom1
[tom1@localhost ~]$ sudo ifconfig ens33 192.168.145.129
[tom1@localhost ~]$ ifconfig '发现修改成功'
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.145.129 netmask 255.255.255.0 broadcast 192.168.145.255
2.6 sudo总结
uid=1002(tom1) gid=1002(tom1) 组=1002(tom1),10(wheel)
[tom1@localhost ~]$ id tom2
uid=1003(tom2) gid=1003(tom2) 组=1003(tom2)
'我们发现tom1用户在wheel组中,而tom2用户不在'
[root@localhost ~]# visudo '或者使用vi /etc/sudoers 命令进入sudo配置文件'
...此处省略部分信息
root ALL=(ALL) ALL '发现root用户拥有所有权限'
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL '发现wheel组中的用户也拥有所有权限'
- 因此,在wheel组中的tom1用户拥有修改IP地址的权限,不在wheel组中的tom2用户没有权限修改IP地址’