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认证原理

linux系统安全_第1张图片

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/

linux系统安全_第2张图片

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

你可能感兴趣的:(服务器,运维)