系统账号管理
清理账号(无法登录)
将非登录用户的Shell设为/sbin/nologin
在我们使用Linux系统时,除了用户创建的账号之外,还会产生系统或程序安装过程中产生的许多其他账号,除了超级用户root外,其他账号都是用来维护系统运作的,一般不允许登录,常见的非登录用户有bin、adm、mail、lp、nobody、ftp等。
查看/etc/passwd 文件,可以看到多个程序用户。
修改为shell为无法登录
usermod -s /sbin/nologin 用户名
修改完成后lisi将无法登录
锁定账号文件passwd、shadow
chattr命令改变文件属性,lsattr命令查看文件底层属性。
chattr [-RV] [+/-/=<属性>] 文件或目录 //改变文件属性
| 属性 | 作用 |
|---|---|
| a(append) | 只允许对文件进行追加操作(适用于日志文件) |
| A | 不允许更新文件的访问时间 |
| c (compressed) | 启用这个属性时,文件在磁盘上会自动压缩 |
| d (dump) | 不能使用dump命令备份文件 |
| D | 设置了目录的D属性时,更改会同步保存在磁盘上 |
| e (extent for mat) | 它表明,该文件使用磁盘上的块的映射扩散 |
| i (immutable) | 在文件上启用这个属性时,我们不能更改、重命名或删除这个文件 |
| j (journaling) | 设置了这个属性时,文件的数据首先保存在日志中,然后再写入文件 |
| S (synchronous) | 设置了这个属性时,变更或更改同步保存到磁盘上 |
密码安全控制
一般通过设置密码规则来控制密码安全,主要设置以下两点:
- 设置密码有效期
- 要求用户下次登录时修改密码
对于新建用户
对于新建用户,可以修改/etc/login.defs文件里的内容来设置密码规则。
对于现有用户
chage [选项] 用户名
| 选项 | 含义 |
|---|---|
| -m | 密码可更改的最小天数。为0时代表任何时候都可以更改密码 |
| -M | 密码保持有效的最大天数 |
| -W | 用户密码到期前,提前收到警告信息的天数 |
| -E | 帐号到期的日期。过了这天,此帐号将不可用 |
| -d | 设置”最后一次修改密码的日期“。设置为 0 有特殊意思,表示用户应该在下次登录系统时更改密码 |
| -i | 停滞时期。允许密码过期后多少天内仍能使用,如果一个密码已过期这些天,那么此帐号将不可用 |
| -l | 例出当前的设置 |
用户切换和提权
用户切换——su
su [options...] [-] [user [args...]]
切换用户的方式:
- su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换。
- su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换。
即有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)。 密码验证:
root 切换到任意用户,不验证密码。
普通用户切换到其他用户,需要验证目标用户的密码。
限制使用su命令的用户
su 命令的安全隐患
默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险。 为了加强su 命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su 命令进行切换。
限制使用su命令的用户(通过修改/etc/pam.d/su 文件)
将允许使用su命令的用户加入wheel组。 启用pam_wheel认证模块。则只有wheel组内的用户可以使用su命令切换用户。
以上两行现在是默认状态(即开启第二行,注释第六行),这种状态下是允许所有用户间使用su命令进行切换的。
两行都注释是允许所有用户都能使用su命令,但root使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码)。
如果开启第六行,表示只有root用户和wheel组内的用户才可以使用su命令。
如果注释第二行,开启第六行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令。
示例
编辑 /etc/pam.d/su 文件,将第二行和第六行都开启,则只有root和wheel组内的用户才能使用 su 命令。
用户提权——sudo
sudo 即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。在最早之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。
sudo于1980年前后推出,sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如Ubuntu、Mac OS X等。
查看sudo操作记录
需要启用 Default logfile 配置
默认日志文件:/var/log/sudo.log
sudo特性
sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认在/etc/sudoers,权限必须为0440。
sudo [-u username] [command] //-u:以哪个用户的身份运行命令
sudo -V //查看相关配置信息
示例
允许 lisi 用户以任何用户的身份运行所有命令。
sudo子目录
如果对所有用户进行提权都放在/etc/sudoers 一个文件中,非常不便于管理。这时可以在/etc/sudoers.d/ 下创建子目录。例如针对 测试部门的员工进行授权,可以创建/etc/sudoers.d/test;针对hr部门的员工进行授权,可以创建/etc/sudoers.d/hr。便于分类管理。
PAM安全认证
PAM:Pluggable Authentication Modules,插件式的验证模块,Sun公司于1995 年开发的一种与认证相关的通用框架机制。PAM 只关注如何为服务验证用户的 API,通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序一种认证框架,自身不做认证。
PAM提供了对所有服务进行认证的中央机制,适用于本地登录,远程登录,如:telnet,rlogin,fsh,ftp,点对点协议PPP,su等应用程序中,系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略;应用程序开发者通过在服务程序中使用PAM API(pam_xxxx( ))来实现对认证方法的调用;而PAM服务模块的开发者则利用PAM SPI来编写模块(主要调用函数pam_sm_xxxx( )供PAM接口库调用,将不同的认证机制加入到系统中;PAM接口库(libpam)则读取配置文件,将应用程序和相应的PAM服务模块联系起来。重复利用别人的开发的功能,不必自己开发,会话,密码验证等功能,已经做好了调用下就可以了未来通用性,所以有了pam框架。
PAM相关文件
- 包名: pam
- 模块文件目录:/lib64/security/*.so
- 特定模块相关的设置文件:/etc/security/
- man 8 加模块名 可以查看帮助
- 应用程序调用PAM模块的配置文件
主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
为每种应用模块提供一个专用的配置文件/etc/pam.d/APP_NAME
注意:如/etc/pam.d存在,/etc/pam.conf将失效
PAM工作原理
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
专用配置文件/etc/pam.d/ 格式
配置文件/etc/pam.d/每一行都是一个独立的认证过程。 每一行可以区分为三个字段: 认证类型 、控制类型 、PAM 模块及其参数 。具体如下: 认证类型(module-type):
认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证; 帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等; 密码管理(password management):用户修改密码时密码复杂度检查机制等功能; 会话管理(session management):主要是提供对会话的管理和记账。 -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用。
控制类型: 也可以称做 Control Flags,用于 PAM 验证类型的返回结果。
1)required 验证失败时仍然继续,但返回 Fail。 2)requisite 验证失败则立即结束整个验证过程,返回 Fail 。 3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续。 4)optional 不用于验证,只是显示信息(通常用于 session 类型)。
PAM 模块及其参数:
默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。 同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
系统引导和登录控制
开关机安全控制
GRUB限制
未经授权禁止修改启动参数
未经授权禁止进入指定系统
通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
设置GRUB 2加密
由于GRUB 2负责引导linux系统,其作为系统中的第一道屏障的安全性非常重要,对GRUB 2进行加密可以实现安全性。 在默认情况下,GRUB 2对所有可以在物理上进入控制台的人都是可访问的。任何人都可以选择并编辑任意菜单项,并且可以直接访问GRUB命令行。要启用认真支持,必须将环境变量超级用户设置为一组用户名(可以使用空格、逗号、分号作为分隔符)这样就只允许超级用户使用GRUB命令行、编辑菜单项以及执行任意菜单项。
GRUB 2密码支持以下两种格式:
明文密码:密码数据没有经过加密,安全性差。 PBKDF2加密密码:密码经过PBKDF2哈希算法进行加密,在文件中存储的是加密后的密码数据,安全性较高。
CentOS 7系统中,直接使用 “grub2-setpasswd” 命令设置grub密码:
终端登录安全控制
限制root只在安全终端登录
安全终端配置:/etc/securetty
示例:
将终端tty5、tty6注释掉,禁止root用户从这两个终端登录。