LINUX系统安全和应用

文章详细介绍了Linux系统中保障账号和密码安全的一系列措施,包括设置非登录用户Shell为nologin,锁定和删除账号,限制命令历史记录,以及通过PAM模块控制su命令的使用。同时,提到了使用sudo命令进行权限提升的配置和安全控制,以及GRUB密码设置、BIOS引导安全和终端登录控制等多方面强化系统安全的方法。
摘要由CSDN通过智能技术生成

一.账号安全的基本措施

1.将非登录用户的Shell设为nologin

usermod -s nologin 用户名 #禁止登录

2.锁定长期不使用的账号(含解锁方式)

usermod -L lisi#锁定账户

usermod -U lisi#解锁账户

passwd -l lisi#锁定账户方

passwd -u lisi#解锁账户

3.删除无用的账号

userdel 用户名#删除用户

4.chattr锁定重要账号文件(如passwd、shadow、fstab等)

lsattr /etc/passwd /etc/shadow#查看文件的状态

chattr +i /etc/passwd /etc/shadow#锁定文件

chattr -i /etc/passwd /etc/shadow#解锁文件

二.密码安全控制

对于新建用户,可以进入/etc/login.defs进行修改属性,设置密码规则,使得在下次创建用户时密码信息生效

设置密码有效期

要求用户下次登录时修改密码

1.适用于新建用户

vim /etc/login.defs #修改配置文件

PASS_MAX_DAYS 30#修改密码有效期为30天

2.适用于已有用户

chage -M 30 dn#修改密码有效期

3.强制在下次登录成功时修改密码(/etc/shadow第三个字段被修改为0)

chage -d 0 dn#设置下次登录强制修改密码

三.命令历史记录限制

减少记录的命令条数;

登录时自动清空命令历史;

系统默认保存1000条历史命令记录;

history -c 命令只可以临时清除记录,重启后记录还在。

1.临时修改当前用户的历史命令条数

export HISTSIZE=200

#临时修改历史命令条数为200条

[root@localhost ~]# echo $HISTSIZE

200

2.进入配置文件永久修改历史命令条数

vim /etc/profile

#进入配置文件

HISTSIZE=300

#将全局历史命令条数由1000改为300

source /etc/profile

#刷新配置文件,使文件立即生效

3.退出当前终端将命令清除

vim .bash_logout

echo " " > ~/.bash_history

source .bash_logout

4.开机后当前终端将命令清除

vim .bashrc

echo " " > ~/.bash_history

5.设置登录超时时间

vim /etc/profile

#进入配置文件

TMOUT=600

#设置全局自动注销时间,声明600s没有操作就登出

source /etc/profile

#更新配置文件

四.切换和限制用户

1.su:切换用户

可以切换用户身份,并且以指定用户的身份执行命令

1.1 切换用户的方式

su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换

su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换

1.2 密码验证

超级管理员切换普通用户,不需要密码

普通用户切换普通用户,需要密码

普通用户切换超级管理员,需要密码

注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,

否则会生成很多的bash子进程,环境可能会混乱。

1.3 限制使用su命令的用户

(1)su命令的安全隐患

默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,

带来安全风险

为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换

(2)限制使用su命令的用户

将允许使用su命令的用户加入wheel组。

启用pam_wheel认证模块。则只有wheel组内的用户可以使用su命令切换用户(编辑/etc/pam.d/su文件)。

(3)查看su操作记录

安全日志:/var/log/secure

示例:有zxc和123两个用户,要求设置123可以使用su命令切换用户,zxc用户不允许使用

vim /etc/pam.d/su #编辑/etc/pam.d/su配置文件

auth required pam_wheel.so use_uid #将此行的注释取消即可

gpasswd -a 123 wheel #将希望可以使用su命令的用户加入到wheel组中

2.PAM安全认证

2.1su命令的安全隐患

默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户的登录密码,带来安全风险。

为了加强su命令的使用控制,可借助于PAM认证模块,只允许及个别用户使用su命令切换

2.2PAM可插拔式认证模块

是一种高效而且灵活便利的用户级别的认证方式

也是当前linux服务器普遍使用的认证方式

2.3PAM认证原理

一般遵循的顺序

service(服务)——PAM(配置文件)——pam_*.so

首先要确定那一项服务,然后加载相应的PAM配置文件(文件位置位于/etc/pam.d下),最后调用认证文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证

用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证

不同的应用程序对应的PAM模块是不同的

2.4 PAM相关文件

包名: pam

模块文件目录:/lib64/security/*.so

特定模块相关的设置文件:/etc/security/

应用程序调用PAM模块的配置文件

1. 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置

2. 注意:如/etc/pam.d存在,/etc/pam.conf将失效

ls /lib64/sccurity/ 认证模块的位置

/etc/pam.d/* 配置文件位置

第一列:type类型 第二列:control控制位 第三列:PAM模块

type 类型

- auth 用户身份认证

- account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)

- password 用户修改密码时密码复杂度检查机制等功能

- session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等

- -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用

Control: ( 控制位)

- required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件

- requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件

- sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的

- equired和requisiteoptional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略

include: 调用其他的配置文件中定义的配置

- optional 可选项

control 总结:

1)required 验证失败时仍然继续,但返回 Fail

2)requisite 验证失败则立即结束整个验证过程,返回 Fail

3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续

4)optional 不用于验证,只是显示信息(通常用于 session 类型)

PAM模块(一共有61个任务模块)

默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。

同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,

这是由于每个模块针对不同的模块类型编制了不同的执行函数。

2.5 shell模块

功能:检查有效shell

帮助:man pam_shells

案例:不允许使用/bin/csh的用户本地登录

3.使用sudo机制提升权限

3.1 sudo命令的用途及用法

用途:以其他用户身份(如root)执行授权的命令

用法:sudo 授权命令

3.2 配置sudo授权

可以使用visudo(通常使用visudo,因为visudo可以自动检查语法是否输入错误)

也可以使用vim /etc/sudoers进行配置(此文件默认权限为440,保存时必须 wq!强制执行操作)

权限生效后,输入密码后5分钟可以不用重新输入密码

3.3 格式

用户 主机名=命令程序列表

用户 主机名=(用户)命令程序列表

dn ALL=(root) /sbin/ifconfig#举例

[root@localhost pam.d]# vim /etc/sudoers

91 ## Allow root to run any commands anywhere

92 root ALL=(ALL) ALL

使用命令的用户 主机列表=代表谁去执行命令 可以执行哪些命令

用户: 直接授权指定的用户名,或采用“&组名"的形式(授权一个组的所有用户)。

主机名:使用此规则的主机名。没配置过主机名时可用localhost,有配过主机名则用实际的主机名,ALL则代表所有主机。

(用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令。

命令程序列表:允许授权的用户通过sudo方式执行的特权命令,

需填写命令程序的完整路径,

多个命令之间以逗号“。"进行分隔。ALL则代表系统中的所有命令。

查看当前sudo配置文件,启用sudo操作日志

启用sudo操作日志

需启用Defaults logfile配置

默认日志文件:/var/log/sudo

操作:在/etc/sudoers末尾添加Defaults logfile="/var/log/sudo"

查询授权的sudo操作 --包含详细的信息

sudo -l

示例1:配置文件使dn可以通过sudo命令使用ifconfig

第一步:切换至用户dn进行测试

[dn@localhost ~]$ ifconfig ens33:1 192.168.233.21/24

SIOCSIFADDR: 不允许的操作

SIOCSIFFLAGS: 不允许的操作

SIOCSIFNETMASK: 不允许的操作

[dn@localhost ~]$ sudo -l ifconfig ens33:1 192.168.168.12/24

我们信任您已经从系统管理员那里了解了日常注意事项。

总结起来无外乎这三点:

#1) 尊重别人的隐私。

#2) 输入前要先考虑(后果和风险)。

#3) 权力越大,责任越大。

[sudo] dn 的密码:

提示要输入密码

第二步:在/etc/sudoers末尾插入相关配置,然后强制保存退出

91 ## Allow root to run any commands anywhere

92 root ALL=(ALL) ALL

93 dn ALL=(root) /sbin/ifconfig #配置文件

[root@localhost pam.d]# su - dn

上一次登录:日 2月 19 19:53:15 CST 2023pts/2 上

[dn@localhost ~]$ sudo ifconfig ens33:1 192.168.233.12/24 ---不在提示安全指示

[sudo] dn 的密码:

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

[root@localhost dn]# useradd ky27

[root@localhost dn]# echo 123 | passwd --stdin ky27

更改用户 ky27 的密码 。

passwd:所有的身份验证令牌已经成功更新。

[root@localhost dn]# su - ky27

[ky27@localhost ~]$ sudo ky27

我们信任您已经从系统管理员那里了解了日常注意事项。

总结起来无外乎这三点:

#1) 尊重别人的隐私。

#2) 输入前要先考虑(后果和风险)。

#3) 权力越大,责任越大。

[sudo] ky27 的密码:#要输入密码才能使用

[root@localhost dn]# vim /etc/sudoers

98 ## Allows people in group wheel to run all commands

99 #%wheel ALL=(ALL) ALL #注释掉

100

101 ## Same thing without a password

102 %wheel ALL=(ALL) NOPASSWD: ALL #取消注释

[root@localhost dn]# gpasswd -a ky27 wheel #把用户KY27加入wheel组内

正在将用户“ky27”加入到“wheel”组中

示例3:使用关键字来进行设置别名,批量控制用户

要求:控制用户进行sudo操作时无法使用重启(reboot)、关机(poweroff)、

切换init和无法删除

第一步:vim /etc/sudoers 或者visudo 修改配置文件

visudo和vim /etc/sudoers效果一样

98 ## Allows people in group wheel to run all commands

99 #%wheel ALL=(ALL) ALL #注释掉

[dn@localhost ~]$ sudo reboot

[sudo] dn 的密码:

对不起,用户 dn 无权以 root 的身份在 localhost.localdomain 上执行 /sbin/reboot。

五.开关机安全控制

1.调整BIOS引导设置

将第一引导设备设为当前系统所在硬盘

禁止从其他设备(光盘、U盘、网络)引导系统

将安全级别设为setup,并设置管理员密码(进boot中有一个Set Supervisor Password)

2.GRUB限制

使用grub2-mkpasswd-pbkdf2生成密钥

修改/etc/grub.d/00_header文件中,添加密码记录

生成新的grub.cfg配置文件

3.grub加密方法(为GRUB菜单设置密码)

不安全,可以进光盘的系统,通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。

第一步:按e键查看未设置之前的状态

重启之后按e,查看配置,不建议修改

第二步:设置GRUB密码并重启

[root@localhost ~]# grub2-setpassword

Enter password:

Confirm password:

[root@localhost ~]# reboot

在重启界面按e,输入账号密码才可以登录

4.终端登录安全控制

4.1 限制root只在安全终端登录

安全终端配置:/etc/securetty

tty1~ 6是文本型控制台,tty7 是X Window图形显示管理器。可以通过CtrI+Alt+F1 (F1-F7键) 切换到对应的登录控制台。

示例:禁止root在tty2和tty3终端登录

第一步:更改安全终端配置文件

vim /etc/securetty

把tty2和tty3注释掉

4.2 禁止普通用户登录

建立/etc/nologin文件

删除nologin文件或者重启后即恢复正常

touch /etc/nologin

#禁止普通用户登录

rm -rf /etc/nologin

#取消上述登录限制,删除后即可恢复

系统弱口令检测工具:

john-1.8.0.tar.gz

yum install -y gcc gcc-c++ make

cd /opt

tar -zxvf john-1.8.0.tar.gz #解压工具包

yum -y install gcc gcc-c++ make #安装软件编译工具

cd /opt/john-1.8.0/src

make clean linux-x86-64 #切换到src子目录,进行编译安装

cp /etc/shadow /opt/shadow.txt #准备待破解的密码文件

cd /opt/john-1.8.0/run

./john /opt/shadow.txt #切换到run子目录,执行暴力破解

./john --show /opt/shadow.txt #查看已破解出的账户列表

5.网络扫描—NMAP

一款强大的网络扫描、安全 检测工具

官方网站:Nmap: the Network Mapper - Free Security Scanner

CentOS 7.3光盘中安装包 nmap-6.40-7.el7.x86_64.rpm

nmap [扫描类型] [选项] <扫描目标>

netstat natp #查看正在运行的使用TCP协议的网络状态信息

netstat -natp | grep httpd #实际操作(httpd换成80也可以)

netstat -naup #查看正在运行的使用UDP协议的网络状态信息

nmap常见选项:

选项功能

-p 指定扫描的端口。

-n 禁用反向DNS解析(以加快扫描速度) ip转换成 域名 12222 2www.baidu.com

-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通而放弃扫描。

netstat常见选项:

常用选项 作用

-a 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)。

-n 以数字的形式显示相关的主机地址、端1等信息。

-t 查看TCP相关的信息。

-u 显示UDP协议相关的信息。

-p 显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限)

-r 显示路由表信息。

-l 显示处于监听状态的网络连接及端口信息。

总结安全加固的措施

1.将非登录用户shell设置为nologin

2.锁定长期不使用的账号(锁定用户)

3.删除无用账号

4.chattr锁定配置文件(重要文件passwd、shadow、fstab等加 i 权限,不让删除)

5.设置密码复杂性规则(长度、特殊字符、失效时间等)密码策略

6.修改history,记录历史命令,尽量缩短记录历史命令的条数

7.禁止su root,切换超级管理员

8.设置sudo权限,禁用不安全命令

9.给GRUB设置密码

10.只允许BIOS从硬盘启动,关闭除了硬盘启动外的(光驱、udisk 、网络)

11.给BIOS设置密码

12.限制root只在安全终端登录

13.禁止普通用户登录

14.改掉大家都知道的服务端口

15.做好日志权限管理

16.内核参数调整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值