内容预知
1.用户的账号安全管理
1.1 系统账号的清理
在使用Linux系统的过程中,不仅仅是root用户和普通用户的创建,还有很多是系统运转过程中产生的系统用户。出于系统安全考虑,一般不给予系统用户登录的权限,将它们归类为非登录用户
设置非登录用户的手段 :
usermod -s /sbin/nologin 用户名 //通过usermod 修改登录shell
1.2 对用户账号进行操作
1.2.1 对用户账号进行锁定
# 锁定方式
usermod -L 用户名 //锁定用户
passwd -l 用户名 //锁定用户
锁定操作:
1.2.2 对用户账号进行解锁
解锁方式
passwd -u 用户名 //解锁用户
usermod -U 用户名 //解锁用户
1.2.3对用户账号进行删除
userdel 用户名 //删除用户,但不删除用户的家目录
userdel -r 用户名 //删除用户的同时,删除他的家目录
1.3 对用户信息和用户密码文件进行保护
/etc/passwd: 用户详细信息文件
/etc/shadow: 用户密码配置文件
重要文件保护命令:
chattr +i 文件 #锁定
chattr -i 文件 #解锁
lsattr #查看文件锁定状态
1.4 对用户密码进行控制操作
1.4.1 对已经存在的用户账号进行控制
chage [选项] 用户名
-M:密码保持有效的最大天数。
-d:设置”最后一次修改密码的日期“。设置为 0 有特殊意思,表示用户应该在下次登录系统时更改密码。
1.4.2 对新建的用户密码默认设置
vim /etc/login.defs //用户登录密码的默认配置
2.历史命令和终端自动注销的安全管理
2.1 历史命令的限制
2.1.1 清除当前用户的历史命令
history -c 命令只可以临时清除记录(其实所有的文件都还保存在.bash_history ),重启后记录还在。
history //查看当前用户的历史命令
history -c //清空当前用户的历史命令
2.1.2 对历史命令的默认配置进行修改
Linux中环境配置文件:
/etc/profile | 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从 /etc/profile.d 目录的配置文件中收集 shell 的设置。如果你有对 /etc/profile 有修改的话必须得 source (.)一下你的修改才会生效,此修改对每个用户都生效 |
/etc/bashrc | 为每一个运行 bash shell 的用户执行此文件。当 bash shell 被打开时,该文件被读取。如果你想对所有的使用 bash 的用户修改某个配置并在以后打开的 bash 都生效的话可以修改这个文件,修改这个文件不用重启,重新打开一个 bash 即可生效。 |
~/.bash_profile | 每个用户都可使用该文件输入专用于自己使用的 shell 信息,当用户登录时,该文件仅仅执行一次!默认情况下,它设置一些环境变量,执行用户的~/ .bashrc 文件。 此文件类似于 /etc/profile,也是需要需要 source 才会生效,/etc/profile 对所有用户生效,~/.bash_profile 只对当前用户生效。~/.profile(由Bourne Shell和Korn Shell使用)和.login(由C Shell使用)两个文件是.bash_profile的同义词,目的是为了兼容其它Shell。 |
~/.bashrc | 该文件包含专用于你的 bash shell 的 bash 信息,当登录时以及每次打开新的 shell 时,该文件被读取。(每个用户都有一个 ~/.bashrc 文件,在用户目录下) 此文件类似于 /etc/bashrc,不需要重启就可以生效,重新打开一个 bash 即可生效,/etc/bashrc 对所有用户新打开的 bash 都生效,但 ~/.bashrc 只对当前用户新打开的 bash 生效。 ~/.bashrc文件会在bash shell调用另一个bash shell时读取,也就是在shell中再键入bash命令启动一个新shell时就会去读该文件。这样可有效分离登录和子shell所需的环境。但一般 来说都会在/.bash_profile里调用/.bashrc脚本以便统一配置用户环境。 |
[root@localhost ~]#vim /etc/profile //打开配置环境
export HISTSIZE=20 // 在/etc/profile 配置中插入, 表示限制历史命名为二十条
[root@localhost ~]#source /etc/profile //刷新加载该配置文件
自动清空的方式 :
1. 注销时自动清空历史命令
[root@localhost ~]# vim ~/.bash_logout
echo "" > ~/.bash_history
2. 登录时自动清空历史命令
[root@localhost ~]# vim ~/.bashrc
echo "" > ~/.bash_history
2.2 设置终端自动注销
[root@localhost ~]# vi /etc/profile
export TMOUT=n #设置登录后无操作退出登录超时时间(n秒后自动注销)
2.3 限制终端的切换
vim /etc/securetty
2.4 禁止普通用户的登录
[root@localhost ~]# touch /etc/nologin //禁止普通用户登录
[root@localhost ~]# rm -rf /etc/nologin //取消普通用户登录限制
禁止普通用户登录:
解除普通用户登录的限制:
3. 用户切换管理
3.1 su命令的使用
su 命令:可以在终端中切换已知密码的用户,root用户默认普通用户不需要密码。普通用户之间的切换需要密码的切换
su 用户名
whoami 查看当前使用的用户
pwd 查看当前路径
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换。
su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换。
3.2 限制用户之间的切换
限制用户切换的原因:
su 命令虽然方便了普通用户之间的来回切换,但是也存在着一定的安全隐患,如果某一个普通用户的密码泄露,就会成为其他用户的隐患,所以有时候要对一些用户进行切换的限制,防止造成信息泄露的损失
3.2.1 wheel组的引入
在Linux系统安装完成后,系统中存在一些PAM 认证模块,起着辅助使用系统的作用,而wheel认证模块,就是存在于模块配置中
wheel组:wheel组相当于超级管理员用户组,此组内的成员拥有最高的系统权限,root用户相当于超级管理员账号,属于wheel组。
vim /etc/pam.d/su 进入存放wheel组和默认root切换权限的配置
限制普通用户互相切换的操作:
结果演示:
允许选中的用户可以切换的设置:
3.2.2 PAM 安全认证
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证。
pam 认证的过程:Service(服务)--> PAM(配置文件)--> pam_*.so
认证类型(module-type):
- 认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证;
- 帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等;
- 密码管理(password management):用户修改密码时密码复杂度检查机制等功能;
- 会话管理(session management):主要是提供对会话的管理和记账。
- -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用。
4. 授权用户管理
4.1 sudo 命令运用前的配置
授权是通过修改Linux系统中/etc/sudoers 的配置,在配置中可以指定用户拥有什么样的权力,而普通用户被授权后,普通用户通过sudo 命令以 root 身份去执行授权的命令
vim /etc/sudoers //打开授权配置文件,写入配置需要强制保存(wq!)
visudo // l快捷打开 /etc/sudoers
插入配置的格式:
实例演示:
用户名 主机host=(root) 绝对路径命令
wangwu ALL=(root)/usr/bin/mount
4.2 普通用户使用授权命令
mkdir ~/guazhai //通过wangwu用户在家目录下创建一个 guazhai的空文件
sudo mount /dev/sr0 ~/guazhai //sudo 加配置的命令表中的命令,以root的身份去运行该授权命令
注意:第一次执行需要验证密码,默认超时时长为5分钟,在此期间不再重复验证密码
4.3 使用别名进行批量设置普通用户授权
visudo 文件中由四种别名设置:
- User_Alias(用户)
- Host_Alias(登录主机)
- Cmnd_Alias(命令)
- Runas_Alias(代表用户)
在生产场景中,一般不需要设置主机别名,在定义授权规则时可以通过ALL来匹配所有的主机。
请注意上面定义的规范,有些规范虽然不是必需的,但最好能够按照系统的标准来进行配置,这样可以避免意外问题的发生。
其实,主机名就是一个逻辑上的主机组,当多台服务器共享一个/etc/sudoers的时候就会用到这个主机别名。不过,在实际企业运维中,这个需求几乎是不存在的
User_Alias USERS=wangwu,liuliu //批量设置 用户获权
#Host_Alias HOST=localhost
Cmnd_Alias CMNDS=/usr/sbin/*,!/usr/sbin/reboot,!/usr/sbin/poweroff,!/usr/sbin/init,!/usr/bin/rm
//利用别名,批量设置命令
USERS ALL=CMNDS
//启用格式
5.端口扫描工具
5.1 namp工具
- 一款强大的网络端口扫描、安全、检测工具
- 官方网站:Nmap: the Network Mapper - Free Security Scanner
- CentOS 7.3光盘中安装包 nmap-6.40-7.el7.x86_64.rpm
检查并安装 namp工具:
[root@localhost ~]# rpm -qa|grep nmap //查看nmap
[root@localhost ~]# yum install -y nmap //安装nmap
使用格式:
nmap [扫描类型] [选项] <扫描目标>
-p | 指定扫描的端口。 |
-n | 禁用反向DNS解析(以加快扫描速度) |
-sT | TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放。 |
-sU | UDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。 |
-sP | ICMP 扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描。 |
5.2 ss与netstat
n | 以数值形式显示IP |
l | 只查看监听状态的网络信息(LISTEN) |
t | 查看TCP协议相关的信息。 |
p | 显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限) |
a | 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)。 |
u | 显示UDP协议相关的信息。 |
r | 显示路由表信息 |
除此之外 ,还可以与grep组合使用,具体到某一个端口的查询:
ss -ntlp|grep :80 //查看80端口的网络信息
总结
1. 用户账号的锁定和解锁。通过创建/etc/nologin 文件使普通用户无法登录
2.通过修改/etc/profile 文件来限制命令条数,以及用户退出时间
3.su命令的切换与sudo 对用户进行提权
4.pam.d /su 建立wheel组,使普通用户无法任意切花
5.ss 和nestat 产看本机具体信息,namp 查看网络端口具体信息