1、账号安全
用户的账号是计算机使用者的身份凭证或标识,每个要访问系统资源的人,必须凭借其用户账号才能进入计算机。
1.1 系统账号清理
在Linux系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而生成的其他大量账号。除了超级用户root之外,其他大量账号只是用来维护系统运作、启动或保持服务进程,一般是不允许登陆的,因此也称为非登录用户账号。
- 注:常见的非登录用户账户包括bin、daemon、adm、lp、mail等,为了确保系统安全,这些用户账号的登录Shell通常是/sbin/nologin——表示禁止终端登录,应确保不被人为改动。
- 使用useradd去创建一个账户的时候,使用-s,可以指定用户的登录Shell。默认情况下在创建账户的时候为用户分配的是/bin/bash环境,使用-s可指定一个nologin的环境,命令是:useradd aaa -s /sbin/nologin。
- (用nologin的环境创建出来的账号,这样的环境会使得该用户无法执行任何的指令,并且它连登系统都登不进去)
所以对于程序用户来讲,通常我们在创建用户的时候会给它指定一个nologin的环境。
- 对于那些临时不用的账号,我们要使用usermod -L命令给它锁定起来,锁定之后该账号是不能登系统的,
在各种非登录用户账号中,还有相当一部分是很少用到的,如games。这些用户账户可以被视为冗余账号,直接删除即可。另外,还有一些随应用程序安装的用户账户,若卸载程序后未能自动删除,则需要管理员手动进行清理。
对于那些在Linux服务器中长期不用的用户账户,若无法确定是否应该删除,可以暂时将其锁定。例如,下图中是锁定、解锁名为zhangsan的用户账号(passwd、usermod命令都可以用来锁定、解锁账号):
如果服务器中的用户账号已经固定,不再进行更改,还可以采取锁定账号配置文件的方法。
使用chattr命令,分别结合+i、-i选项来锁定、解锁文件,使用lsattr命令可以查看文件的锁定情况,如下图:
注:
- chattr命令是为文件添加特殊权限用的,i只是这些特殊权限中的一种。
- chattr命令中有两个属性只能由root用户来给它设置,一个是i(锁定文件)的属性,另一个是a的属性。
当设置+a属性后,文件只能增加数据,既不能删除也不能修改数据,只有root才能设置这个属性。(用lsattr命令可以查看文件的属性)如下图是为text.txt添加一个a的属性:
chattr的属性:
- 设置c属性后,会自动将文件压缩,在读取时自动解压缩。
lsattr命令可以查看文件的特殊属性,如下图,第二个文件就有特殊的属性:
lsattr(显示文件隐藏属性)命令的选项有:
注:用lsattr命令查看目录的属性时,会显示出该目录的一级子目录和子文件。
-a:将隐藏文件的属性也显示出来
-d:如果接的是目录,仅列出目录本身的属性而不是目录内的文件名
-R:连同子目录的数据也显示出来
补充:如下图,使用echo命令回显出aaa这个字符串,然后把他放置在test.txt这个文件里(单个大于号是覆盖的意思,即不管你现在的文件里有多少东西,我只要用覆盖的指令就会完全替代文件中的内容,即文件里现在就只剩aaa了):
系统会提示:不允许这样的操作。
如果还是用echo这个命令,后面使用两个大于号(双个大于号本身就是一种追加的操作,即在文件的末尾追加aaa的内容):
不要用vi编辑器打开去改内容,要用echo的命令去编辑文件内容。因为用vi编辑器那不是改,是编辑。
- 在账号文件被锁定的情况下,其内容将不允许变更,因此无法添加、删除账号,也不能更改用户的密码、登录Shell、宿主目录等属性信息。如下图:
2、密码安全
为了降低密码被猜出或被暴力破解的风险,用户应养成定期更改密码的习惯,避免长期使用同一个密码。
注:所设置的密码策略,对root管理员是无效的。
chage命令用于设置密码时限,执行以下操作可将密码的有效期设为30天:
例如执行下图中的命令可强制要求用户zhangsan下次登陆时重设密码:
3、命令历史、自动注销
Shell环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在命令行输入明文的密码,则无意中服务器的安全壁垒又多了一个缺口。
在Bash终端环境中,历史命令的记录条数由变量HISTSIZE控制,默认为1000条。通过修改/etc/profile文件中的HISSIZE变量值,可以影响系统中的所有用户。如下图,可以设置最多只记录200条历史命令:
除此之外,还可以修改用户宿主目录中的~/.bash_logout文件,添加清空历史命令的操作语句。这样一来,当用户退出已登录Bash环境后,所记录的历史命令将自动清空:
注:在Bash终端环境中,还可以设置一个闲置超时时间,当超过指定的时间没有任何输入时即自动注销终端,这样可以避免当管理员不在时其他人员对服务器的误操作风险(限制超时由变量TMOUT来控制,默认单位为秒s):
4、用户切换与提权
Linux系统为我们提供了su、sudo两种命令,其中su命令主要用来切换用户,而sudo命令来提升执行权限。
4.1 su命令——切换用户
使用su命令,可以切换为指定的另一个用户,从而具有该用户的所有权限。(切换时需要对目标用户的密码进行验证,从root用户切换为其他用户时除外)。
例如当前登录的用户为jerry,若要切换为root用户,可执行下图中的命令:
注:在上图中的命令中,选项-等同于--login或-l——表示切换用户后进入目标用户的登录Shell环境(若缺少此选项,则仅切换身份,不切换用户环境)
对于切换为root用户的情况,“root”可以省略。
默认情况下,任何用户都可以使用su命令,从而有机会反复尝试其他用户的登陆密码,这样就带来了安全风险。可以借助于pam_wheel认证模块,加强对su命令的使用控制,只允许极个别用户使用su命令进行切换。如下图中,将授权使用su命令的用户添加到wheel组,修改/etc/pam.d/su认证配置以启用pam_wheel认证:
注:使用su命令切换用户的操作将会记录到安全日志/var/log/secure文件中,可以根据需要进行查看。
启用pam_wheel认证后,未加入到wheel组内的其他用户将无法使用su命令,尝试进行切换时将提示“拒绝权限”,从而将切换用户的权限控制在最小范围内。
4.2 PAM安全认证
PAM安全认证是当前Linux服务器普遍使用的认证方式,PAM认证一般遵循的顺序是:
Service(服务)、PAM(配置文件)、pam_*.so
注:PAM文件在/etc/pam.d,这里面放置的都是你的PAM认证文件,PAM认证文件其实就是用户在使用你系统里面的各种命令的时候,你在执行各种指令的时候是否有权限使用该指令。如下图列出的就是PAM文件:
上图中的system-auth——是系统的认证文件,用vim编辑器打开该文件之后,与操作系统登陆有关的这些密码相关的策略,就在这里头设置着的。
如果想查看某个程序是否支持PAM认证,可以用ls命令查看,例如执行以下命令可以查看su是否支持PAM模块认证:
4.3 sudo命令——提升执行权限
通过su命令可以非常方便地切换为另一个用户,但前提条件是必须知道root用户的密码。
使用sudo命令就可以提升执行权限,但要需要由管理员预先进行授权,指定允许哪些用户以超级用户地身份来执行哪些命令。
(1)在配置文件/etc/sudoers中添加授权
sudo机制的配置文件为/etc/sudoers,文件的默认权限是440,需要使用专门的visudo工具进行编辑。
注:虽然也可以使用vi进行编辑,但保存时必须使用:w!命令来强制操作,否则系统将提示为只读文件而拒绝保存。
(2)通过sudo执行特权命令
特权命令通常位于/sbin、/usr/sbin等目录下,普通用户执行时应使用绝对路径。对于已获得授权的用户,通过sudo方式执行特权命令时,只需要将正常的命令作为sudo命令的参数即可。
例如,执行下图中的命令可查看用户自己获得哪些sudo授权(其中未授权的用户将会得到may not run sudo的提示):
如果已经启用sudo日志,则可以从/var/log/sudo文件中看到用户的sudo操作记录:
5、系统引导和登录控制
5.1 限制更改GRUB引导参数
通过修改GRUB引导的参数,可以对一些系统问题进行修复。但是从安全的角度看,如果任何人都能够修改GRUB引导参数,对服务器本身显示是一个极大的威胁,那么为了加强对引导过程的安全控制,可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
如下图所示命令中,可以为GRUB菜单设置密码,
生成密码后在/etc/grub.d/00_header配置文件中添加对应的用户、密码等配置:
然后使用grub2_mkconfig命令生成新的grub.cfg配置文件:
通过上述的配置,当重新开机进入GRUB菜单时,按E键将无法修改引导参数,若要获得编辑权限,必须根据提示输入正确的GRUB密码,如下图:
5.2 终端及登录控制
(1)进制root用户登录
在Linux服务器中,默认开启了6个tty终端,允许任何用户进行本地登录。
若要禁止root用户从指定的终端登录,只需要从该文件中删除或者注释掉对应的行即可。如下图,若要禁止root用户从tty5、tty登录,可以修改/etc/securetty文件,将tty、tty6行注释掉:
(2)禁止普通用户登录
如果当服务器正在进行备份或调试等维护工作时,可能不希望再有新的用户登陆系统。这时候只需要简单的建立/etc/nologin文件即可,login程序会检查/etc/nologin文件是否存在,如果存在,则拒绝普通用户登录系统(root用户不受限制),如下图: