账号安全和登录控制

一、账号安全控制
1.1 账号安全的基本措施
1.1.1 将非登录用户的Shell设为nologin
[root@hostname ~]# usermod -s nologin 用户名 #格式
[root@cheng0307 ~]# usermod -s nologin zhangsan #实际操作

1.1.2 锁定长期不使用的账号
[root@cheng0307 ~]# usermod -L lisi #锁定账户方式一
[root@cheng0307 ~]# usermod -U lisi #解锁账户方式一
[root@cheng0307 ~]# passwd -l lisi #锁定账户方式二
[root@cheng0307 ~]# passwd -u lisi #解锁账户方式二

1.1.3 删除无用的账号
[root@hostname ~]# userdel 用户名 #格式
[root@cheng0307 ~]# userdel lisi #实际操作

1.1.4 锁定账号文件
[root@cheng0307 ~]# lsattr /etc/passwd /etc/shadow #查看文件的状态
[root@cheng0307 ~]# chattr +i /etc/passwd /etc/shadow #锁定文件
[root@cheng0307 ~]# chattr -i /etc/passwd /etc/shadow #解锁文件

1.1.5 密码安全控制
- 设置密码有效期
- 要求用户下次登录时修改密码
1.格式:
1.适用于新建用户
[root@cheng0307 ~]# vim /etc/login.defs #修改配置文件
-----此处省略部分注释及配置-------
PASS_MAX_DAYS 30 #修改密码有效期为30天
2.适用于已有用户
[root@cheng0307 ~]# chage -M 30 zhangsan #修改密码有效期
3.强制在下次登录成功时修改密码(/etc/shadow第三个字段被修改为0)
[root@cheng0307 ~]# chage -d 0 zhangsan #设置下次登录强制修改密码
2.实例1:修改密码配置文件,要求新创建的用户密码有效期都为30天


3.实例2:将现有用户zhangsan的密码有效期也修改为30天。

4.实例3:将现有用户zhangsan设置为强制下次登录时需要修改密码。

登录时输入密码后,需要设置新的密码才可以。

1.1.6 命令历史记录限制
- 减少记录的命令条数;
- 登录时自动清空命令历史 ;
- 系统默认保存1000条历史命令记录;
- history -c 命令只可以临时清除记录,重启后记录还在。
1.格式:
1.对历史命令的数量进行限制
[root@cheng0307 ~]# vim /etc/profile #修改配置文件
export HISTSIZE=200 #修改命令历史记录数量最大为200,前面添加export为全局有效
source /etc/profile #刷新配置文件,立即生效
2.设置登录时自动清空命令历史
vim .bashrc #修改/etc/profile配置文件(每次切换bash都执行)
或
vim /etc/profile #修改/etc/profile配置文件(执行一次)
echo " " > ~/.bash_history #
2.实例1:修改历史命令记录为200条,并设置全局有效,并验证



3.实例2:设置登录时自动清空命令历史


1.1.7 终端自动注销
- 闲置 [ n ] 秒后自动注销。(n为数字)
1.格式:
[root@cheng0307 ~]# vim /etc/profile #编辑/etc/profile文件
export TMOUT=100 #设置全局自动注销时间
2.案例1:设置100s秒终端自动注销

1.1.8 使用su命令切换用户
1.用途和用法
- 用途:Substitute User,切换用户
- 格式:
su - 目标用户(横杠“ - ”代表切换到目标用户的家目录)
2.密码验证
- root - - - >任意用户,不验证密码
- 普通用户- - - >其他用户,验证目标用户的密码
- 带 “ - ” 表示将使用目标用户的登录Shell环境
3.格式:
1.切换用户
[root@cheng0307 ~]# su - zhangsan #root切换普通用户
[zhangsan@cheng0307 ~]$ su - root #普通用户切换其他用户
2.查看当前登录的用户
[root@cheng0307 ~]# whoami #显示当前登录的用户
4.案例:测试用户之间切换

1.1.9 限制使用su命令的用户
- 将允许使用su命令的用户加入wheel组中;
- 启用pam_wheel 认证模块
1.格式:
[root@cheng0307 ~]# vim /etc/pam.d/su #编辑/etc/pam.d/su配置文件
[root@cheng0307 ~]# gpasswd -a zhangsan wheel #将希望可以使用su命令的用户加入到wheel组中
auth required pam_wheel.so use_uid #将此行的注释取消即可
2.实例:有zhangsan和lisi两个用户,要求设置zhangsan可以使用su命令切换用户,lisi用户不允许使用。


3. 实例2:查看su操作记录

1.1.10 Linux中的PAM安全认证
1.su命令的安全隐患
- 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root) 的登录密码,带来安全风险;
- 为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换。
2.PAM(Pluggable Authentication Modules)可插拔式认证模块
- 是一种高效而且灵活便利的用户级别的认证方式;
- 也是当前Linux服务器普遍使用的认证方式。
3.PAM认证原理:
- PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_*.so;,
- PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/lib64/security/下)进行安全认证。
- 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。
- 如果想查看某个程序是否支持PAM认证,可以用ls命令进行查看/etc/pam.d/。
- PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用.

1.1.11 使用sudo机制提升权限
1.sudo命令的用途及用法
- 用途 :以其他用户身份(如root执行授权的命令)
- 用法:
sudo 权限命令
2.配置sudo授权
- visudo或者vi /etc/sudoers(此文件默认权限为440,保存时必须 wq!强制执行操作)
- 记录格式:用户 主机名=命令程序列表
- 可以使用通配符“ * ”号任意值和“ !”号进行取反操作。
- 权限生效后,输入密码后5分钟可以不用重新输入密码。
3.语法格式:
用户 主机名=命令程序列表
用户 主机名=(用户)命令程序列表
zhangsan ALL=(root) /sbin/ifconfig #实际操作
- 用户: 直接授权指定的用户名,或采用“&组名"的形式(授权一个组的所有用户)。
- 主机名:使用此规则的主机名。没配置过主机名时可用localhost,有配过主机名则用实际的主机名,ALL则代表所有主机。
- (用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令。
命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“。"进行分隔。ALL则代表系统中的所有命令
4.启用sudo操作日志
- 需启用Defaults logfile配置
- 默认日志文件:/var/log/sudo
- 操作:在
/etc/sudoers末尾添加Defaults logfile="/var/log/sudo"
5.查询授权的sudo操作
- sudo -l
6.实例1:查看当前sudo配置文件。

实例2:配置相关文件,使得zhangsan可以通过sudo命令使用ifconfig。
-
切换到zhangsan用户进行测试。

-
末尾插入下列配置,然后强制保存并退出。

-
进行测试。

实例3:设置wheel组进行sudo操作时无需密码验证,并将lisi用户添加到wheel组中测试。

这里是sudo配置文件 /etc/sudoers 内的具体修改步骤:

实例4:使用关键字来进行设置别名,批量控制用户进行sudo操作时无法使用重启(reboot)、关机(poweroff)、切换init和无法删除。
第一步:vim /etc/sudoers 或者visudo 修改配置文件(这里我使用的是第一种)

第二步:添加配置

第三步:使用普通用户进行测试

第四步:查看zhangsan和lisi的可使用权限。

实例5:修改实例4,使zhangsan和lisi用户可以无需密码使用sudo可以使用的权限为/sbin下所有。

实例6: 在/car/log下创建sudo日志文件,用来存储用户使用的sudo命令记录。

二、系统引导和登录控制
2.1 开关机安全控制
1.调整BIOS引导设置
- 将第一引导设备设为当前系统所在硬盘;
- 禁止从其他设备(光盘、 U盘、网络)引导系统;
- 将安全级别设为setup,并设置管理员密码。
2.GRUB限制
- 使用grub2-mkpasswd-pbkdf2生成密钥;
- 修改/etc/grub.d/00_ header文件中, 添加密码记录;
- 生成新的grub.cfg配置文件。
3.限制更改GRUB引导参数
通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
4.实例:为GRUB菜单设置密码
第一步:我们先来看一下未设置之前的状态

第二步:使用grub2-mkpasswd-pbkdf2生成密钥并复制,然后备份两个配置文件。

第三步:修改/etc/grub.d/00_ header文件中, 添加密码记录,并存并退出

第四步:生成新的grub.cfg文件,然后重启系统

第五步:验证结果

2.2 限制root只在安全终端登录
- 安全终端配置:/etc/securetty
- tty1~ 6是文本型控制台,tty7 是X Window图形显示管理器。可以通过CtrI+Alt+F1 (F1-F7键) 切换到对应的登录控制台。
实例:禁止root在tty3终端登录
第一步:更改相关配置文件

第二步:切换至tty3进行测试

第三步:切换至其他终端进行测试

2.3 禁止普通用户登录
- 建立/etc/nologin文件
- 删除nologin文件或者重启后即恢复正常
1.格式
[root@cheng0307 ~]# touch /etc/nologin #禁止普通用户登录
[root@cheng0307 ~]# rm -rf /etc/nologin #删除后即可恢复
2.禁止普通用户登录系统
第一步:创建/etc/nologin文件

第二步:使用普通用户进行测试

第三步:使用root进行测试

2.4 系统弱口令检测(Joth the Ripper,检测JR)
1.介绍:
- 一款密码分析工具,支持字典式的暴力破解;
- 通过对shadow文件的口令分析,可以检测密码强度;
- 官方网站:http://www.openwall.com/john
2.安装JR工具
- 安装方法
make clean 系统类型 - 主程序文件为john
3.检测弱口令账户
- 获得Linux/Unix服务器的shadow文件;
- 执行john程序,将shadow文件作为参数
4.密码文件的暴力破解
- 准备好密码字典文件,默认为psaaword.lst
- 执行john程序,结合
--wordlist=字典文件(有更强大的字典可以使用).
第一步:将john-1.8.0.tar.gz安装包拖入Linux系统内。

第二步:移动至/opt 然后解压

第三步:编译安装指定程序

第四步:添加三个用户并设置简单密码,用于下面测试破解

第五步:将/etc/shadow 文件复制到/opt下进行暴力破解

第六步:可以使用--show进行查看破解处的密码

2.5 网络端口扫描
1.NMAP
- 一款强大的网络扫描、安全 检测工具
- 官方网站:http://nmap.org/
- CentOS 7.3光盘中安装包 nmap-6.40-7.el7.x86_64.rpm
2.格式:
nmap [扫描类型] [选项] <扫描目标>
netstat natp #查看正在运行的使用TCP协议的网络状态信息
[root@cheng0307 ~]# netstat -natp | grep httpd #实际操作(httpd换成80也可以)
netstat -naup #查看正在运行的使用UDP协议的网络状态信息
3.常见的选项
| 常见的选项 | 选项的作用 |
|---|---|
| -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通而放弃扫描。 |
4.natstat命令常用选项:
| 常用选项 | 作用 |
|---|---|
| -a | 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)。 |
| -n | 以数字的形式显示相关的主机地址、端1等信息。 |
| -t | 查看TCP相关的信息。 |
| -u | 显示UDP协议相关的信息。 |
| -p | 显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限) |
| -r | 显示路由表信息。 |
| -l | 显示处于监听状态的网络连接及端口信息。 |
5.实例1:开启本机的httpd,然后进行扫描
第一步:查询并安装nmap和httpd程序


第二步:开启httpd服务,然后对httpd进行扫描查看网络状态

实例2:查看本机开放的TCP和UDP端口

实例3:查看192.168.80.0/24网段内有多少存活主机。
第一步:开启另一台虚拟机进行查看ip地址测试

第二步:返回原虚拟机进行扫描测试

实例4:查看192.168.80.0/24网段内有哪些主机提供HTTP服务

转载:https://blog.csdn.net/weixin_45551608/article/details/116052610