一,账号安全及基本措施
(一)系统账号清理
1,将非登录用户的shell 设为 /sbin/nologin
usermod 命令
[root@localhost ~]# usermod -s /sbin/nologin lisi #修改lisi的shell属性
通常情况下,管理员会将某些不打算提供交互式登录权限的账户(如系统服务账户)的shell设置为 /sbin/nologin,这样可以防止误操作或恶意登录这些账户,并确保它们仅用于执行后台任务或作为守护进程运行,而不是进行人工操作
在/etc/passwd/文件里是可以看到哪些用户可以登录,哪些用户不可以登录
2,锁定长期不使用的账号
passwd 或者usermod命令
[root@localhost ~]# passwd -l zhaosi usermod -L zhaosi 锁定用户 zhaosi
3,删除无用的账号
userdel 命令
4,锁定配置文件
chattr 命令
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow 锁定账户密码 配置文件
chattr -i 解除锁定
拓展:
问:中病毒怎么处理?
答:中病毒一般会导致cpu和内存出现故障,用ps或者top命令看异常进程,通过进程pid号 找到 proc exe 找到文件的真实位置,把他删除
自己建和病毒同名的文件,加上chattr +i 锁定文件
二,密码安全控制
(一)设置密码规则
1,对于新建用户
可以修改 /etc/login.defs 文件里的内容来设置密码规则
2,对于已有用户
chage
2.1 选项
chage [选项] 用户名
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
2.2常用使用情况
[root@localhost ~]# chage -d 0 zhangsan #强制张三下一次登录一定修改密码(且密码符合复杂性要求) [root@localhost ~]#chage -M 30 lisi #设置密码有效期为30天
三,历史命令
Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在 的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在 命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。 Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通 过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。例如,可以设 置最多只记录 200 条历史命令。
输入history可以看到所有的历史命令
(一)临时清理历史命令
history -c
(二)永久清空
vim ~/.bashrc
在命令里写入echo " " >~/.bash_history
解释:开机时,会先读取~/.bashrc 配置文件,因为 而~/.bash_history放的是历史命令,这样,在用户登录前,会先把历史命令全部清空
(三)设置历史命令个数
通过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户
重新加载一下配置文件
四,切换用户su
su zhangsan 切换不加- 不完全切换
su -zhangsan 加换加- 是完全切换
限制使用su命令的用户
- 将允许使用su命令的用户加入wheel组(超级管理员组)中
- 启用pam_wheel认证模块
pam_rootok.so root用户不需要密码也可以切换用户;如果将其修改为注释(在这一行前加#表示注释)表示root切换到普通用户也需要修改密码
pam_wheel.so 只有wheel组才可以切换用户
五,PAM安全认证
su命令的安全隐患
默认情况下,任何用户都允许使用su 命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险。为了加强su命令的使用控制,可借助于pam认证模块,只允许极个别用户使用su命令进行切换。
(一)相关文件
1. /usr/lib64/security
存放功能模块
这个路径通常存放着一些安全相关的库文件,尤其是在使用PAM时。对于64位系统,程序的库文件一般存储在/usr/lib64
或/lib64
目录下。在该路径下的security
子目录里可能包含用于PAM认证机制的动态链接库(.so
文件),这些库实现了各种具体的认证策略
2. /etc/pam.d
配置文件
这个目录包含了PAM模块的具体应用配置文件,每个应用程序都有一个对应的配置文件,例如/etc/pam.d/sshd对应SSH服务,/etc/pam.d/login对应本地登录等。这些配置文件定义了在用户登录或者执行特定操作时,系统应如何按照顺序调用不同的PAM模块进行身份验证、账户管理和会话管理等操作。
3. /etc/security
复杂的配置文件
此目录则包含了一些高级的安全性配置文件,如限制用户资源使用量的配置文件limits.conf
,以及与PAM交互的一些安全设置文件,比如用于密码复杂度检查的passwd配置等。此外,还包括了与sudo权限控制相关的文件以及其他系统级别的安全配置项。
(二)pam 工作原理
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
用户访问服务器时,服务器的某一个服务程序会把用户的请求发送到pam模块进行认证
不同的应用程序所对应的pam 模块是不同的
PAM认证过程示例:
1.使用者执行/usr/bin/passwd 程序,并输入密码
2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd此设置文件
3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)
(三)专用配置文件/etc/pam.d/ 格式
每个程序单独一个配置文件,这个文件记录了这个程序怎么调用pam
可以看到,有四列
type:指模块类型,即功能
control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现 module-path: 用来指明本模块对应的程序文件的路径名
Arguments: 用来传递给该模块的参数
1,type 模块类型
- Auth 账号的认证和授权
指账户是否有效
- Account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)
指账户是否在有效期
- Password 用户修改密码时密码复杂度检查机制等功能
账户密码是否有效
- Session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等
可以同时和多少会话*(可以使用多少资源)
- -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用
2,control 控制位
required 一票否决 如果失败,最后一定失败,但是会继续往下走,到最后再回到失败
requisite 如果失败 会立即结束验证 反馈失败
sufficient 验证成功后立即返回 ,不再继续,否则忽略结果并继续
optional 可选项
3,PAM模块
默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
3,1 shell 模块
功能:检查有效shell
只规定除nologin之外的类型通过 (用户的shell 不在里面就不让登录)
3.2 securetty模块
功能:只允许root用户在/etc/securetty列出的安全终端上登录
将第一行注释的话,可以使用telnet协议进行远程登录
不建议使用telnet协议登录,因为telnet是明文传输 ,使用pam的目的是为了增强安全性
3.3 pam_nologin.so 模块
功能:如果/etc/nologin文件存在,将导致非root用户不能登录,当该用户登录时,会显示/etc/nologin文件内容,并拒绝登录(可以用于日常维护使用)
3.4 limit 模块
功能:
控制进程占用资源例如:可打开的文件数量,可运行的进程数量,可用内存空间
配置文件格式
vim 打开/etc/security/limits.conf这个配置文件,这个文件的内容就是控制进程打开的数量和内存大小
domain | 用户名 |
@组名 | |
*表示所有用户和组 |
type | hard:硬限制 |
soft:软限制 | |
—:软硬一起,相当于硬限制 |
item | core :限制核心文件大小(KB) |
data :最大数据大小(KB) | |
fsize :最大文件大小(KB) | |
memlock :最大锁定在内存中的地址空间(KB) | |
nofile :打开文件描述符的最大数目 | |
rss :最大常驻集大小(KB) | |
stack :最大堆栈大小(KB) | |
cpu :最大cpu时间(MIN) | |
nproc :最大进程数 | |
as :地址空间限制(KB) | |
maxlogins :该用户的最大登录数 | |
maxsyslogins :系统上的最大登录数 | |
priority :带锁运行用户进程的优先级 | |
locks :用户可以持有的最大文件数 | |
sigpending :挂起信号的最大数量 | |
msgqueue : POSIX消息队列使用的最大内存(字节) | |
nice :允许提升的最大优先级:[: 20,19 | |
rtprio :最大实时优先级 |
limit 模块例子
李四 这个用户在系统做个只可以打开5个进程(- 是软硬限制都有)
查看李四打开了多少个进程
内核调优,把系统可访问数量调大
输入ulimit -a 查看看一下当前显示的所有资源
压力测试
ab压力测试 -c 一次 -n一共
先来进行一个压力测试 让它同时打开1025个文件 最多打开5000个进行测试
可以看到,会有提示信息,无法同时打开,可以通过 ulimit -n 来调整
或者在配置文件里加上,表示所有用户最大打开文件数量为100000
六,sudo提权操作
(一)用途及用法
用途:以其他用户身份如(root)执行授权的命令
用法: sudo 授权命令
(二)特性
- sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
- sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
- sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
- sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440
(三)配置文件
1,介绍具体含义
[root@localhost ~]#vim /etc/sudoers
[root@localhost ~]#visudo
第一个root: 哪个用户要使用命令
ALL 哪台主机(可以写域名,也可以写网段 all 就是所有)
(ALL) 以谁的身份
ALL 任何命令、
生产环境建议把这个注释掉,有人把用户名叫root 就可以执行任何命令
2,具体使用方法
配置文件写
外面命令要加sudo 输入的命令要和配置文件一样
3, 取反与* 的用法
3.1取反
!取反 同时写可以,不可以 后面的生效
就是不能看
3.2 *
当配置文件写* 有bug
只写message shadow 也可以看了 因为把空格 /etc/shadow 看成*
解决办法:
3.3 拓展
(四)增加日志
进入visudo中配置defaults logfile="/data/sudo.log"
可以查看日志文件
(五) 对组
(六) 子配置文件
在子配置文件写sudo权限
作用:方便管理
最好先改一下权限,默认比较危险
(七)别名
sudo别名有四种类型:
- User_Alias(用户)
- Runas_Alias(代表用户)
- Host_Alias(登录主机)
- Cmnd_Alias(命令)
别名格式:必须大写字母,数字可以使用但是不能放在开头