一、 账号安全控制的基本措施
1.1如何对系统账号进行清理
系统账号的清理
- 将非登录用户的shell设为/sbin/nologin
usermod -s /sbin/nologin 用户名(设置为不可登录)
-
锁定长期不适用的账号
- usermod -L 用户名
- passwd -l 用户名
- passwd -S 用户名
-
删除无用的账号
userdel [-r] 用户名(-r选项删除用户家目录)
-
锁定账号文件passwd(用户配置文件)、shadow(用户密码文件)
-
chattr +i /etc/passwd /etc/shadow【即锁定用户账户信息/用户密码信息,无法增删改查用户信息】
-
chattr -i /etc/passwd /etc/shadow【即解锁用户配置文件】
-
lsattr /etc/passwd /etc/shadow【查看锁定文件并查看状态;用于查看文件是否被锁定】
- PS:chattr可用于锁定大部分的文件
-
1.2、密码的安全控制
设置密码有效期(chage命令)
①.chage -M [用户名]
命令格式:chage -M [用户名](该命令只能应用于已存在的用户,新创建用户不受影响)
②.chage -d 0 [用户名]
该命令强制用户下次登陆时修改密码
我们仍使用zhangsan用户做例子:
设置完成后在图形界面登录zhangsan用户:
PS:chage -d命令后面跟的数字为0属于特殊含义,代表强制用户下次登陆时修改密码;如果为普通数字该命令含义为该用户最后一次修改密码的时间,该命令后面也可以跟具体时间如“2008-8-8”代表最后一次修改密码的时间为1970-1-1到2008-8-8期间的总天数
1.3 命令历史限制
1.如何查看命令条目
①.history命令
该命令可以显示之前操作的所有命令(默认1000条命令显示)
②.ctrl+R组合键
该组合键可以搜索之前操作命令的关键词
2.如何减少记录的命令条数?
①.修改环境变量配置文件
我们首先要知道历史命令的配置文件在 /etc/profile中,我们可以修改这个环境变量配置文件限制命令显示的条目数
②.history -c 命令
该命令只用于临时清空所有命令记录,重启后之前操作仍然可见
3.登陆时自动清空命令历史
①.编辑~/.bash_profile文件
该文件编辑效果为当前用户开机后首次登陆系统时会执行一次编辑的命令
配置完成后,我们对系统进行重启:
②.编辑~/.bashrc文件
该文件编辑效果为当前用户每次登录或者切换shell环境时,都会执行一次编辑的命令
我们将上方文件配置的内容进行删除,重新配置~/.bashrc文件,查看一下有什么区别:
PS:两种编辑文件清空命令的方法,按实际工作情况需要进行配置
1.4 终端自动注销
设置闲置600秒后自动注销
编辑/etc/profile文件,并添加export TMOUT=600这条配置内容:
二、切换用户和对用户进行授权
2.1 su命令
1. 用途及用法
su命令的用途:Substitute User,切换用户
格式:su - [目标用户名].
如果su直接后面跟切换的用户名,会在之前用户所在的目录直接进行切换,如果是su - [目标用户名],切换用户后,目标用户将在自己的家目录下:
2.2 如何限制用户使用su命令
在工作环境中,所有用户都可以切换到root的话,有安全风险,所以我们要学会如何限制其他用户使用su命令。
1.将允许使用su命令的用户加到wheel组中
首先,我们先看一下我们文件 /etc/pam.d/su 中的配置内容:
如上图所示,我们当前没有删除第六行注释符号的情况下,该配置文件代表意思是允许所有用户进行su命令的切换到root用户,root用户拥有最高权限,所有用户都可以切换具有安全风险。
开启wheel组验证模块后,我们需要把自己所需要的用户加入wheel组中,命令gpasswd -a [需要添加的用户名] wheel
添加组后,我们来验证一下各个用户是否有权限切换到root用户
2.2 Linux中的PAM安全认证
PAM(Pluggable Authentication Modules)是一种插入式认证模块,是一种高效而且灵活便利的用户级别的认证方式,也是当前Linux服务器普遍使用的认证方式。使用PAM认证模块可以加强su命令的使用控制,只允许个别用户使用su命令进行切换。
1.PAM认证的构成
查看某个程序是否支持PAM认证,我们可以使用ls命令查看
举例:比如我们想查看su命令是否支持PAM认证模块,我们可以查看PAM的配置文件进行过滤:
我们查看一下su的PAM配置文件内容
-
如上图所示,每一行都是一个独立的认证过程
-
每一行可以区分为三个字段
- 认证类型
-
|类型|含义| |---|---| |auth|对用户身份进行识别,如果提示输入密码,判断是否为root| |account|对账号各项属性进行检查,如是否允许登录系统,账号是否已过期,是否达到最大用户数| |password|使用用户信息来更新数据,如修改用户密码| |session|定义登陆前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统|
- 控制类型
-
|类型|含义| |---|---| |required|表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,二十继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。 |requisito|与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。| |sufficient|如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值| |optional|不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型)| |include|表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登陆系统的认证工作)来实现认证而不需要重新逐一去写配置项。|
- PAM模块及参数
默认是在/lib64/security目录下,如果不在此默认路径下,需要填写绝对路径。同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
PAM实例
| 认证类型 | 控制类型 | 用户1 | 用户2 | 用户3 | |
|---|---|---|---|---|---|
| auth | required | 模块1 | pass | fail | pass |
| auth | sufficient | 模块2 | pass | pass | fail |
| auth | required | 模块3 | N/A | N/A | pass |
| --- | --- | 结果 | pass | fail | pass |
从上面表格实例可以看到
- sufficient的验证失败结果不会影响最终的认证结果
- required验证成功后如果sufficient也验证成功,最终结果将直接成功
- 如果required一开始就验证失败,最终结果直接失败
2.PAM的安全认证原理
- PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
- PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证。
- 用户访问服务器的时候,服务器的某一个服务程序把用户的谁请求发送到PAM模块进行认证。对于不同的服务器应用程序所对应的PAM模块也是不同的。
三、使用sudu机制给其他用户进行提权
3.1 sudo令的用途以及方法
sudo命令用途:以其他用户身份(如root)执行收授权的命令
格式:sudo [命令]
从上图可以看到,在我们没有授予普通用户相关权限时,我们普通用户无法拥有root超级管理员的权限去进行一些操作,所以我们要给普通用户提权才能进行操作。
3.2 如何配置sudo授权
sudo的授权有2种方式(两种操作方式均能进入用户权限的配置文件,且都需要在root超级管理员用户下进行操作)
- visudo
- vi /etc/sudoers(此文件默认权限为440,保存时需要使用wq!强制保存)
在之前我们使用sudo命令时,非root用户会跳出一个输入密码的提示,如果我们需要关闭这个密码认证的过程,我们可以在visudo命令中进行配置内容的添加:
举例1:如何使wheel组中用户不输入密码直接执行权限
举例2:如何设置普通用户的权限特定内容:
我们设置lisi用户,除了重启操作以外的其他所以权限:
PS:如上图,我们在设置单个用户权限时,要使用逗号“,”将各个权限内容隔开,如果需要除去某些权限即限定用户不能使用特定权限,使用感叹号“!”放在需要限制的权限所在路径前。
举例3:通过别名将多个普通用户授予多个权限的方式:
sudo别名的分类:
-
User_Alias(用户)
-
Host_Alias(登录主机)
-
Cmnd_Alias(命令)
User_Alias USERS=lisi,wangwu #代表设置用户含有lisi,wangwu两个用户 Host_Alias HOSTS=localhost #代表设置的登陆主机名为localhost Cmnd_Alias CMNDS=/usr/sbin/useradd,/usr/sbin/userdel #代表别名下的用户可以使用的命令的路径即添加用户,删除用户的命令
3.3 启用sudo的操作日志
- visudo或者vi /etc/sudoers
- 在配置文件中写入Defaults logfile ="/var/log/sudo"(代表将sudo的操作日志存入该路径的文件中)
四、开关机的安全控制
4.1 调整BIOS引导设置
- 第一引导设备设为当前系统所在硬盘
- 禁止从其他设备(光盘、U盘、网络)引导系统
- 将安全级别设为setup,并设置管理员密码
4.2 GRUB限制
1. 使用grub2-mkpasswd-pbkdf2生成密钥
首先我们重启我们的虚拟机查看一下开机界面:
从上方两张图片我们可以看到在我们开启系统时可以在引导菜单中按“e”进行我们相关启动项的更改。如果修改不当,容易导致我们的系统无法启动。所以在工作环境中,我们要避免所有人都可以进行这方面内容的修改,进行加密来限制其他用户。
2. 修改/etc/grub.d/00_header文件,添加密码记录
接下来我们需要修改我们的默认参数文件(vim /etc/grub.d/00_header):
上图中EOF开头+结尾中间的内容都是我们额外导入的内容
3. 生成新的grub.cfg配置文件
我们设置完默认参数文件后,要重新生成一个新的grub.cfg配置文件,来使之前的配置生效,文件位置:/boot/grub2
全部配置完毕后,我们进行系统的一个重启,并进入修改grub的界面
限制进入我们发现我们修改grub需要额外输入用户名和对应密码才能修改配置信息
五、 终端登录安全控制
5.1 限制root只在安全终端登录
安全终端配置:/etc/securetty
我们直接编辑终端配置文件:
我们将tty1,tty2,tty3全部禁用(即禁止root用户从tty1,tty2,tty3的终端进行登录),使用"#"在字符前进行注释,之后我们使用ctrl+alt+F1-F5的组合键进行终端的切换,查看是否可以进行切换:
5.2 禁止普通用户进行登录
命令:touch /etc/nologin
我们使用该命令后,使用普通用户进行登录:
如果我们需要取消普通用户登录限制:
命令:rm -rf /etc/nologin 即将限制登录文件删除:
六、 端口扫描
6.1 NMAP工具
NMAP是一款强大的网络扫描、安全检测工具,支持ping扫描、多端口检测等多种技术。
6.2 NMAP命令常用的选项和扫描类型
| 选项 | 扫描类型 |
|---|---|
| -p | 指定扫描的端口 |
| -n | 禁用反向DNS解析(以加快扫描速度) |
| -sS | TCP的SYN扫描(半开扫描),只向目标发出SYN数据包,如果收到SUN/ACK响应包就任务目标端口正在监听,并立即断开连接,否则认为目标端口并未开放 |
| -sT | TCP的连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则人为目标端口正在监听服务,否则人为目标端口未开放 |
| -sF | TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过来,而忽略了其他形式的TCP攻击包,这种类型的扫描可间接检测防火墙的健壮性 |
| -sU | UDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢 |
| -sP | ICMP扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描 |
| -P0 | 跳过ping检测,这种方式认为所有的目标主机都是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描 |
分别查看本机开放的TCP端口、UDP端口
nmap -sT 127.0.0.1
nmap -sU 127.0.0.1
6.3 netstat命令(用于查看本机开启的端口)
netstat命令的选项及含义
| 选项 | 含义 |
|---|---|
| -n | 以数字形式查看 |
| -l | 查看监听状态下的端口号 |
| -t | 查看tcp协议的端口号 |
| -p | 查看端口号的pid号 |
| -a | 所有状态 |
| -u | 查看udp协议的端口号 |
netstat -nltp
查看当前所有处于监听状态的TCP端口号:
netstat -natp
查看当前所有状态的TCP端口号:
PS:还有一个ss命令也可以查看端口号的信息,选项与含义用法与netstat基本一致,运行效率比netstat命令高。