一、账号安全控制
用户账号是计算机使用者的身份凭证或标识,每个要访问系统资源的人,必须凭借其用户账号才能进入计算机。在 Linux 系统中,提供了多种机制来确保用户账号的正当、安全使用。
1、账号的基本安全措施
(1)系统账号清理
常见的非登录用户账号包括 bin、daemon、adm、lp、mail等为了确保系安全,这些用户账号的登录 Shell 通常是/sbin/nologin,表示禁止终端登录,应确保不被人为改动。
如果服务器中的用户账号已经固定,不再进行更改,还可以采取锁定账号配置文件的方法。使用 chattr 命令,分别结合"+i""-i"选项来锁定、解锁文件,使用 lsattr 命令可以查看文件锁定情况。
存放账户的文件一旦加入 i 权限就会锁定文件,锁定之后无法修改
+"a":只给该文件设置一个追加的权限,可以用"echo"工具写入。
如:echo aaa>>test.txt
+"c":该文件会被压缩,读的时候会被解压缩,读完之后会被再次压缩起来。
+"s":当删除文件的时候,该文件在磁盘上的数据也会被删除掉。
+"u":删除文件的时候,不会删除在磁盘上的数据。
lsattr:查看文件的特殊属性。
存放账号的文件 /etc/passwd 存放密码的文件/etc/shadow


(2)密码安全控制
管理员可以在服务器端限制用户密码的最大有效天数,对于密码已过期的用户,登录时将被要求重新设置密码,否则将拒绝登录。
修改配置文件只适用于新创建的用户,已存在的用户不受影响。
已存在的用户用命令去修改
在某些特殊情
在某些特殊情况下,如要求批量创建的用户初次登录时必须自设密码,根据安全规划统一要求所有用户更新密码等,可以由管理员执行强制策略,以便用户在下次登录时必须更改密码。

(3)命令历史、自动注销
Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。
Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为1000条。通过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户,适用于永久修改。
除此之外,还可以修改用户宿主目录中的~/.bash_logout 文件,添加清空历史命令的操作语句。这样,当用户退出已登录 Bash 环境以后,所记录的历史命令将自动清空。(!+历史命令的序号=使用相对应的命令)
Bash 终端环境中,还可以设置一个闲置超时时间,当超过指定的时间没有任何输入时即自动注销终端,这样可以有效避免当管理员不在时其他人员对服务器的误操作风险。闲置超时由变量 TMOUT 来控制,默认单位为秒(s)。
需要注意的是,当正在执行程序代码编译、修改系统配置等耗时较长的操作时应避免设置 TMOUT 变量。必要时可以执行"unset TMOUT"命令取消TMOUT变量设置。

二、用户切换与提权
大多数 Linux 服务器并不建议用户直接以 root 用户进行登录。一方面可以大大减少因误操作而导致的破坏,另一方面也降低了特权密码在不安全的网络中被泄露的风险。鉴于这些原因,需要为普通用户提供一种身份切换或权限提升机制,以便在必要的时候执行管理任务。
Linux 系统为我们提供了 su、sudo 两种命令,其中 su 命令主要用来切换用户而 sudo命令用来提升执行权限
1、su 命令 ------ 切换用户
使用 su 命令,可以切换为指定的另一个用户,从而具有该用户的所有权限。当然,切换时需要对目标用户的密码进行验证(从 root 用户切换为其他用户时除外)。选项"-"等同于"--login"或"-l",表示切换用户后进入目标用户的登录Shell环境若缺少此选项则仅切换身份、不切换用户环境。对于切换为 root 用户的情况"root"可以省略。-c是以root的身份在其他账户执行命令

默认情况下,任何用户都允许使用 su 命令,从而有机会反复尝试其他用户(如 root)的登录密码这样带来了安全风险。为了加强 su 命令的使用控制,可以借助于 pam_wheel认证模块,只允许极个别用户使用 su 命令进行切换。
启用 pam_wheel 认证以后,未加入到 wheel 组内的其他用户将无法使用 su 命令,尝试进行切换时将提示"拒绝权限",从而将切换用户的权限控制在最小范围内。使用 su 命令切换用户的操作将会记录到安全日志/var/log/secure 文件中,可以根据需要进行查看。

限制用户使用 su 命令有两步,第一步把用户加入到wheel组里

第二步把配置文件里第六行 # 去掉

加入wheel组里相当于缩小了使用 su 命令的范围
查看su的操作记录记录在 /var/log/secure 里面

2、PAM 安全认证
PAM(Pluggable Authentication Modules),是 Linux 系统可插拔认证模块,是一种高效而且灵活便利的用户级别的认证方式,它也是当前 Linux 服务器普遍使用的认证方式 。

PAM 提供了对所有服务进行认证的中央机制 适用于login ,远程登录 telnet,rlogin,fsh,ftp
su 等应用程序中。系统管理员通过 PAM 配置文件来制定不同应用程序的不同认证策略
PAM 认证原理如下所示:
PAM 认证一般遵循的顺序:Service(服务)→PAM(配置文件)→pam_*.so;
PAM 认证首先要确定哪一项服务,然后加载相应的 PAM 的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security 下)进行安全认证;
用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到 PAM 模块进行认证。不同的应用程序所对应的 PAM 模块也是不同的。

如果想查看某个程序是否支持 PAM 认证,可以用 ls 命令进行查看,例如执行以下命令
可以查看 su 是否支持 PAM 模块认证。每一行都是一个独立的认证过程;
每一行可以区分为三个字段:认证类型、控制类型、PAM 模块及其参数
PAM 认证类型包括四种:
认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证;
帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等;
密码管理(password management):主要是用来修改用户的密码;
会话管理(session management):主要是提供对会话的管理和记账。
控制类型也可以称做 Control Flags,用于 PAM 验证类型的返回结果。
1)required 验证失败时仍然继续,但返回 Fail
2)requisite 验证失败则立即结束整个验证过程,返回 Fail
3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
4)optional 不用于验证,只是显示信息(通常用于 session 类型)

补充:为了安全考虑,可以修改系统历史命令(history)的参数。
进入vim编辑器编辑一些参数。(vim /etc/profile)
profile:全局环境变量文件
只对未登录的用户生效,对已登录的用户不生效。

再设置当用户退出时自动清空历史命令。
进入vi编辑器添加一些参数。(vim .bash_logout)
只能清理修改该文件之后的命令。

如果想查看有哪些用户使用提权操作过相关指令,可以添加一个日志条目供管理员查看。
vi sudo 写入完成后记得把前面的"#"号删除掉,要不不启用。

2、sudo 命令 ------ 提升执行权限
使用 sudo 命令就可以提升执行权限。不过,需要由管理员预先进行授权,指定允许哪些用户以超级用户(或其他普通用户)的身份来执行哪些命令。
(1)在配置文件/etc/sudoers 中添加授权
sudo 机制的配置文件为/etc/sudoers,文件的默认权限为 440,需使用专门的,visudo工具进行编辑。虽然也可以用 vi 进行编辑,但保存时必须执行":w!"命令来强制操作,否则系统将提示为只读文件而拒绝保存。
授权配置主要包括用户、主机、命令三个部分,即授权哪些人在哪些主机上执行哪些命令。
用户(user):直接授权指定的用户名,或采用"%组名"的形式(授权一个组的所有用户)。
主机(MACHINE):使用此配置文件的主机名称。此部分主要是方便在多个主机间共用同一份 sudoers 文件,一般设为 localhost 或者实际的主机名即可
命令(COMMANDS):允许授权的用户通过 sudo 方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号","进行分隔。
典型的 sudo 配置记录中,每行对应一个用户或组的 sudo 授权配置。

(2)通过 sudo 执行特权命令
(sudo限制的命令都是超级管理员的命令,普通命令这不需要限制)
sudo 配置记录的命令部分允许使用通配符 " * "、取反符号 " ! ",当需要授权某个目录下的所有命令或取消其中个别命令时特别有用。
对于已获得授权的用户,通过 sudo 方式执行特权命令时,只需要将正常的命令行作为sudo 命令的参数即可。由于特权命令程序通常位于 /sbin、/usr/sbin 等目录下,普通用户执行时应使用绝对路径。
在当前会话过程中,第一次通过 sudo 执行命令时,必须以用户自己的密码不是 root用户或其他用户的密码)进行验证。此后再次通过 sudo 执行命令时,只要与前一次 sudo操作的间隔时间不超过 5分钟,则不再重复验证。若要查看用户自己获得哪些 sudo 授权,可以执行"sudo -l"命令。未授权的用户将会得到"may not run sudo"的提示,已授权的用户则可以看到自己的 sudo 配置。
默认情况下,通过 sudo 方式执行的操作并不记录。若要启用 sudo 日志记录以备管理员查看,应在/etc/sudoers 文件中增加"Defaults logfile"设置。
如果已经启用 sudo 日志,则可以从/var/log/sudo 文件中看到用户的 sudo 操作记录。(visudo可以检测到修改的内容有没有语法错误,尽量去使用visudo对配置文件进行修改。而vim这不能检测到语法错误)

wheel组里面的用户使用所有命令不需要验证密码(不在wheel组里的用户需要输入密码验证)的两个步骤,第一步先把用户加入到wheel组里边去,第二步用visudo修改110行的内容,把110行前面的 # 号去掉(适用于多个用户)

110行和107行的内容有时候会发生冲突,发生冲突的时候需要把107行加一个#

需要单个用户使用所用命令不需要验证密码,要在102行添加内容


为grub2文件加密。
命令:grub2-mkpasswd-pbkdf2(哈西算法)

生成以后将加密后的内容放入到对应的文件中,才可生效。
cd /etc/grub.d
vim 01_users
修改成以下图片中的格式即可。

然后再把刚才修改的01_users文件载入到/boot/grub2下的grub.cfg文件中 载入命令:grub2-mkconfig -o grub.cfg 重启验证。


