目录
1.1系统账号清理
1.1.1将用户设置为无法登录
usermod -s nologin [用户]
1.1.2锁定用
passwd -l [用户名] 锁定用户密码
passwd -u [用户名] 解锁用户密码
1.1.3删除账户
userdel -r [用户名]
1.1.4锁定配置文件
1.2密码安全控制
对于新建用户
可以修改 /etc/login.defs 文件里的内容来设置密码规则
对于已有用户可以使用chage命令
chage [选项] 用户名
选项 | 作用 |
-m | 密码可更改的最小天数。为零时代表任何时候都可以更改密码 |
-M | 密码保持有效的最大天数 |
-w | 用户密码到期前,提前收到警告信息的天数 |
-E | 帐号到期的日期。过了这天,此帐号将不可用 |
-d | 上一次更改的日期 |
-i | 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用 |
-l | 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期 |
1.3 命令历史
- history -c 命令只可以临时清除记录,重启后记录还在。
- 系统默认保存1000条历史命令记录;
- 登录时自动清空命令历史 ;
- 减少记录的命令条数;
#可以使用以下命令临时清除历史命令
history -c
clear
#进入配置可以永久修改命令条数
#vim /etc/profile 进入编辑模式
2.切换和限制用户
2.1.su:切换用户
su切换用户 任何一个用户登录 都要加载bash这个程序
在切换用户的时候 export愿意传给子进程
su 不加- 是不完全的切换 即 子进程会接受父进程的一些配置
su - 完全切换 子进程不会接受父进程的配置 是完全独立的
说明:root su至其他用户无须密码;非root用户切换时需要密码
注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。
2.PAM 安全认证
PAM提供了对所有服务进行认证的中央机制,适用于本地登录,远程登录
PAM工作原理
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
专用配置文件/etc/pam.d/ 格式
type control module-path arguments
application:指服务名,如:telnet、login、ftp等,服务名字“OTHER”代表所有没有在该文件中明确配置的其它服务
type:指模块类型,即功能
control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
module-path: 用来指明本模块对应的程序文件的路径名
Arguments: 用来传递给该模块的参数
模块类型(module-type)
-
Auth 账号的认证和授权
-
Account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)
-
Password 用户修改密码时密码复杂度检查机制等功能
-
Session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等
-
-type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用
Control: ( 控制位)
-
required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件
-
requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件
-
sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的
-
equired和requisiteoptional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略include: 调用其他的配置文件中定义的配置
-
optional 可选项
第三列代表PAM模块
默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。 同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
每一行都是一个独立的认证过程; 每一行可以区分为三个字段: 认证类型 控制类型 PAM 模块及其参数 PAM 认证类型包括四种: 认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证; 帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过 期,帐号的登录是否有时间段的限制等; 密码管理(password management):主要是用来修改用户的密码; 会话管理(session management):主要是提供对会话的管理和记账。 控制类型也可以称做 Control Flags,用于 PAM 验证类型的返回结果。 1)required 验证失败时仍然继续,但返回 Fail 2)requisite 验证失败则立即结束整个验证过程,返回 Fail 3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续 4)optional 不用于验证,只是显示信息(通常用于 session 类型)
例子
以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
两行都注释也是允许所有用户都能使用su命令,但root'下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)
如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令
如果注释第一行,开启第二行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。
2.2. limit
功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间
修改限制的实现方式:
(1) ulimit命令
ulimit是linux shell的内置命令,它具有一套参数集,用于对shell进程及其子进程进行资源限制。
ulimit的设定值是 per-process 的,也就是说,每个进程有自己的limits值。使用ulimit进行修改,立即生效。
ulimit只影响shell进程及其子进程,用户登出后失效。
可以在profile中加入ulimit的设置,变相的做到永久生效
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-u size:最大用户进程数
-v size:设置虚拟内存的最大值.单位:kbytes
unlimited 是一个特殊值,用于表示不限制
2.3 .sudo
1 sudo命令的用途及用法
- 用途:以其他用户身份(如root)执行授权的命令
- 用法:sudo 授权命令
2 配置sudo授权
可以使用visudo(通常使用visudo,因为visudo可以自动检查语法是否输入错误)
也可以使用vim /etc/sudoers进行配置(此文件默认权限为440,保存时必须 wq!强制执行操作)
可以使用通配符“ * ”号任意值和“ !”号进行取反操作
权限生效后,输入密码后5分钟可以不用重新输入密码
#vim /etc/sudoers //打开授权配置文件,写入配置需要强制保存(wq!)
#visudo // l快捷打开 /etc/sudoers
visudo -c
用户: 直接授权指定的用户名,或采用“&组名"的形式(授权一个组的所有用户)。
主机名:使用此规则的主机名。没配置过主机名时可用localhost,有配过主机名则用实际的主机名,ALL则代表所有主机。
(用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令。
命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“。"进行分隔。ALL则代表系统中的所有命令。
实机演示
用户名 主机host=(root) 绝对路径命令
zzzz ALL=(root) /usr/bin/mount
3.总结安全加固的措施
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.内核参数调整
4.总结系统环境初始化(结合第七条
1.关闭 firewalld 防火墙工具(不能关
2.关闭selinux安全防护模块
3.建立国内yum源,加快安装速度
4.关闭不必要的启动项,加快系统启动速度
5.备份MBR分区
6.统一主机名、网卡名等参数
7.修改内核参数ulimit -a 中open files