一、账号安全控制
用户账号是计算机使用者的身份凭证或标识,每个要访问系统资源的人,必须凭借其用户账号才能进入计算机。在 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 类型)