linux系统安全

一、账号安全基本措施

1.1 系统账号清理

1.1.1 将用户设置为无法登录-- 改登录shell

登录shell是用户与计算机系统直接交互的接口,使用户能够通过命令行方式进行各种操作和管理。 所以让用户无法登录,其实就是将登录shell改为 /sbin/nologin,可以用usermod -s 更改。

复制代码
[root@localhost home]# usermod -s /sbin/nologin lisi ##更改登录shell
[root@localhost home]# cat /etc/passwd |grep lisi   ##查看修改是否成功
lisi:x:1001:1001::/home/lisi:/sbin/nologin
[root@localhost home]# su lisi   ##查看能否切换到目标用户
This account is currently not available.     ##用户无法切换
​
1.1.2 删除用户 userdel
复制代码
[root@localhost home]# userdel -r lisi   ##加上选项r删除用户的同时删除家目录
​
1.1.3 锁定用户

方式一

usermod -L 用户名 锁定用户

usermod -U 用户名 解锁用户

方式二

passwd -l 用户名 锁定用户

passwd -u 用户名 解锁用户

1.1.4 锁定配置文件 chattr

chattr 命令用于修改文件或目录的属性,设置文件的特殊属性,使其具有更高级的保护或控制

chattr 选项 文件名

+i 将文件设置为"不可修改",即无法被删除、重命名、修改内容或链接的操作

-i 取消对文件的"不可修改"属性

+a 只能向文件中添加内容,无法修改或删除已有内容

通过锁定配置文件 /etc/passwd 和 /etc/shadow ,可以防止恶意修改或者误修改,保证系统和数据的安全性。

复制代码
[root@localhost home]# chattr +i /etc/passwd /etc/shadow   ##锁定配置文件
[root@localhost home]# useradd liwu    
useradd:无法打开 /etc/passwd        ##无法打开配置文件 无法创建用户
​

1.2 密码安全

1.2.1 对新建用户

编辑 /etc/login.defs 文件来设置密码规则

复制代码
PASS_MAX_DAYS   99999     ##修改此部分来设置密码有效期
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7
​

PASS_MAX_DAYS:指定用户密码的最长有效天数

PASS_MIN_DAYS:指定在更改密码之间必须等待的最小天数

PASS_MIN_LEN: 指定用户密码的最小长度

PASS_WARN_AGE:指定在密码过期之前的多少天开始向用户发出警告

1.2.2 对已有用户 chage

chage 选项 用户名 -m:密码可更改的最小天数,m=0 代表任何时候都可以更改密码 -M:密码保持有效的最大天数

-w:用户密码到期前,提前收到警告信息的天数 -E:帐号到期的日期。过了这天,此帐号将不可用 -d:上一次更改的日期 -i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。 -l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。

复制代码
[root@localhost ~]# chage -d  0 用户名 
##强制用户下一次登录要修改密码
​
[root@localhost ~]#chage -M 30 lisi
#设置密码有效期为30天
[root@localhost ~]#cat /etc/shadow|tail -1
lisi:!!:19055:0:30:7:::
第5字段

1.3 自动注销

设置自动注销时间

复制代码
[root@localhost ~]# vi /etc/profile   ##对所有用户生效
.................................
export  TMOUT=60
​
[root@localhost ~]# source /etc/profile    ##使配置文件生效

1.4 清除命令历史

1.4.1 查看历史命令
复制代码
[root@localhost ~]# history  |tail
  138  vim /etc/login.defs 
  139  vim .bashrc
  140  ls
  141  vim /etc/bashrc
  142  history 
  143  history  |head 
  144  history  |tail -f 
  145  cd
  146  history  |tail -f 
  147  history  |tail
​
1.4.2 历史命令限制
复制代码
方式一、注销时清空历史命令
​
vim .bash_logout 
.. ..
echo ' ' > /root/.bash_history   ##空文件导入
...
:wq
​
. /.bash_logout   ##应用修改
​
方式二、修改全局配置文件
​
vim /etc/proflie    ##修改此文件  全局生效
.....
HISTSIZE =....(自定义数字)    ##最大显示
....
:wq  
​
reboot ##重启应用修改
​

二、用户切换和用户提权

2.1 用户切换 su命令

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

复制代码
命令格式
su [options...] [-] [user [args...]
​
su [选项] 用户名      ##不完全切换,上一个用户的部分设置会保留
​
su -  用户名         ##完全切换 ,相当于重新登录,
​
​
查看su操作记录
安全日志文件:cat /var/log/secure
[liwi@localhost root]$ su liwu
密码:
##普通用户切换需要密码
​
[root@localhost ~]# su liwi
##root用户切换到普通用户不需要密码

2.2 sudo命令格式

sudo 选项 命令

-V 显示版本编号

-l 显示出自己(执行 sudo 的使用者)的权限

-k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)

-p 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称

-u 用户名 以指定用户的权限

-s 执行环境变数中的 SHELL 所指定的 shell

vim /etc/sudoers =visudo ## 编辑配置文件

复制代码
root    ALL=(ALL)       ALL
​

1.user字段 用户名或UID %组名或者%GID

2.host字段 IP地址或主机名 ALL代表任意主机

3.代表用户字段 用户名或UID ALL代表任意用户

4.命令字段(绝对路径) command name (命令) directory (文件夹里的命令) sudoedit (可以编辑sudoers这个文件,变相变成管理员) Cmnd_Alias (命令别名)

2.3 sudo子目录

将所有提权都放在配置文件/etc/sudoers中,不便于管理。 通过再/etc/sudoers.d/下创建子目录,可以更好地管理sudo的授权规则。

/etc/sudoers.d/test1 test2.....(针对性的创建文件)

复制代码
举例
vim /etc/sudoers.d/test      ##创建子目录(新配置文件)
...
test1 ALL= (root) sudoedit     ##用户test1可以使用 sudoedit 命令
...
:wq
​
​
chmod 440 test   ##设置权限,加固安全

2.4区别

1.身份验证方式: su命令(切换用户)需要输入目标用户的密码来切换到目标用户的身份。

sudo命令(以超级用户执行)需要输入当前用户的密码来验证身份。

2.执行命令的方式: su命令会切换用户的环境,包括当前工作目录和环境变量等。在切换用户后,需要重新设置所需的工作环境。

sudo命令在当前用户的环境下以超级用户身份执行命令,不会切换用户的环境。这使得在执行完命令后,可以继续以当前用户身份继续工作,而不需要重新设置环境。

3.授权: su命令切换到目标用户后,拥有目标用户的完整权限。

sudo命令可以按需授予用户对特定命令或特定命令组合的访问权限。

三、PAM安全认证

3.1 什么是PAM?

PAM:Pluggable Authentication Modules,插件式的验证模块,用于管理和进行用户身份验证的模块化系统。

PAM提供了灵活和可定制的用户身份验证框架,使系统管理员能够根据需要配置和管理身份验证方式。

3.2 为什么要用PAM?

su命令的安全隐患

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

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

3.3 PAM认证原理

PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_*.so

1.用户访问(应用程序需要进行用户身份验证时,会调用PAM库来初始化PAM会话)

2.确定service类型(加载哪些身份验证模块,用户名、密钥、短信验证码等等)

3.PAM根据配置文件确定是否允许访问或者进一步的操作

4.PAM会话结束时,将最终的身份验证结果返回给应用程序

3.4 PAM配置文件

只有功能较强的功能模块才有配置文件,所以配置文件的数量小于功能模块的总数

配置文件路径 主要配置文件

/ etc / security / ,只有功能强大的pam模块才会有主配置文件

次要配置文件(优先生效)

/etc/pam.d/

复制代码
[root@localhost ~]# vim /etc/pam.d/login 
​
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       substack     system-auth
auth       include      postlogin
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    include      postlogin
-session   optional     pam_ck_connector.so
~                                                                           
#模块类型     控制位        PAM模块                                                              
~                                                                           
~                                                                           
~                                                                           
~                                                                           
"/etc/pam.d/login" 18L, 796C                              1,1          全部
​

第一列:模块类型(module-type)

模块类型 功能
Auth 账号的认证和授权
Account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)
Password 用户修改密码时密码复杂度检查机制等功能
Session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等
-type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用

第二列:Control:( 控制位)

required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件 requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件 sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的 equired和requisiteoptional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略include: 调用其他的配置文件中定义的配置 optional 可选项

第三列:PAM模块

模块 功能
认证管理(authentication management) 接受用户名和密码,进而对该用户的密码进行认证
帐户管理(account management) 检查帐户是否被允许登录系统,帐号是否已经过 期,帐号的登录是否有时间段的限制等
密码管理(password management) 主要是用来修改用户的密码
会话管理(session management) 主要是提供对会话的管理和记账
  1. 模块配置文件路径

/usr/lib64/security/

required 无论验证成功还是失败 会继续往下验证

requisite 验证成功则继续 验证失败则立即结束整个验证过程

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

optional 一般不用于验证,只显示信息

3.6 部分PAM功能模块

3.6.1 limits模块(重要)
1)功能

功能:限制用户的资源使用,例如:可打开的文件数量,可运行的进程数量,可用内存空间

2)ulimit 命令

通过ulimit命令可以查看和设置不同类型的资源限制

ulimit -a 显示当前所有资源的限制

ulimit -c 设置core文件的最大大小,单位为blocks

ulimit -n 设置可以打开的最大文件描述符数

ulimit -u 设置用户可创建的最大进程数

ulimit -m 设置单个进程的物理内存限制,单位为KB

ulimit -v 设置单个进程的虚拟内存限制,单位为KB

ulimit -s 设置单个栈的最大大小,单位为blocks

ulimit -f 设置单个文件的最大大小,单位为blocks

相关推荐
用户0328472220701 小时前
如何搭建本地yum源(上)
运维
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz3 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈3 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造