1.账号安全基本措施
1.1.系统账号设置
将用户设置为无法登录:
shell——/sbin/nologin却比较特殊,所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。
使用的命令:chsh 修改用户的shell属性
查看lisi的属性:
查看lisi的属性:
使用的命令:chsh 修改用户的shell属性:
1.1.1.锁定账户
锁定账户命令:passwd -l 用户名 或者usermod -L 用户名
解锁账户命令:passwd -u 用户名 或者usermod -U 用户名
1.1.2.删除用户
userdel -r 用户名 # 删除用户,加 -r 可以连同用户在/home目录下的家目录一同删除 |
1.1.3.锁定配置文件
chattr命令:
-a:让文件或目录仅供附加用途。只能追加
-i:不得任意更动文件或目录
chattr +i /etc/passwd /etc/shadow # 将passwd文件和shadow文件加上 i 属性 chattr -i /etc/passwd /etc/shadow 取消 i 属性 |
lsattr [参数] 文件名:
-a | 列出目录中的所有文件,包括隐藏文件 |
-d | 只显示目录名称 |
-R | 递归地处理指定目录下的所有文件及子目录 |
-v | 显示文件或目录版本 |
-V | 显示版本信息 |
-D | 显示属性的名称、默认值 |
-E | 显示从用户设备数据库中获得属性的当前值 |
1.2.密码安全控制
设置密码规则:
可以修改 /etc/login.defs 文件里的内容来设置密码规则
vim /etc/login.defs
chage:
chage命令可以对已经创建过的用户修改规则
chage [选项] 用户名
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-w:用户密码到期前,提前收到警告信息的天数。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
1.3.历史命令
Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在 的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在 命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通 过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。例如,可以设 置最多只记录 200 条历史命令。
可以使用以下命令临时清除历史命令:
history -c
若想关机清理历史命令,首先在.bash_logout文件内多加一句话:
[root@localhost ~]#vim .bash_logout
echo " " >~/.bash_history # 然后保存退出
[root@localhost ~]# ~/.bash_logout # 最后刷新以下该文件即可
1.4.用户切换
使用su命令实现用户切换
格式:su 用户名 或者 su - 用户名 |
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换
二、PAM安全认证
PAM:Pluggable Authentication Modules,插件式的验证模块,Sun公司于1995 年开发的一种与认证相关的通用框架机制。PAM 只关注如何为服务验证用户的 API,通过提供一些动态链接库和一套统一的API 接口,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序一种认证框架,自身不做认证。
http://www.linux-pam.org/ #官网手册
PAM提供了对所有服务进行认证的中央机制,适用于本地登录,远程登录。如:telnet,rlogin,fsh,ftp,点对点协议PPP,su等应用程序中,系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略;应用程序开发者通过在服务程序中使用PAM API(pam_xxxx( ))来实现对认证方法的调用;而PAM服务模块的开发者则利用PAM SPI来编写模块(主要调用函数pam_sm_xxxx( )供PAM接口库调用,将不同的认证机制加入到系统中;PAM接口库(libpam)则读取配置文件,将应用程序和相应的PAM服务模块联系起来。
2.1.PAM相关文件
包名: pam
模块文件目录:/lib64/security/*.so
特定模块相关的设置文件:/etc/security/
man 8 加模块名 可以查看帮助
应用程序调用PAM模块的配置文件
主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
注意:如/etc/pam.d存在,/etc/pam.conf将失效
2.2.PAM工作原理
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
PAM认证过程示例:
1.使用者执行/usr/bin/passwd 程序,并输入密码
2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd此设置文件
3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)
2.3.专用配置文件/etc/pam.d/ 格式
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 可选项
2.4.shell模块
功能:检查有效shell
帮助:man pam_shells
案例:不允许使用/bin/csh的用户本地登录
模块: pam_shells.so 只允许 规定的shell类型通过, 是在/etc/shells 文件中存在的 类型通过
2.5.securetty模块
功能:只允许root用户在/etc/securetty列出的安全终端上登陆
案例:CentOS 7 允许root在telnet登陆
2.6.pam_nologin.so 模块
功能:如果/etc/nologin文件存在,将导致非root用户不能登陆,当该用户登陆时,会显示/etc/nologin文件内容,并拒绝登陆
范例: 默认此模块可以对ssh等登录有效,但不影响su登录
2.7.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
可以看到系统的相关资源限制设置:
使用压力测试工具进行测试 打开的文件数:
三.sudo
sudo 即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。
sudo特性:
sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440
sudo设置的配置文件打开方式有两种:
(1)vim /etc/sudoers # 使用vim编辑器打开,修改内容后,不能自我检查
配置文件格式说明:/etc/sudoers, /etc/sudoers.d/
配置文件中支持使用通配符 glob
(2)visudo # 修改后,可以自我检查,有错误会指出哪一行有错误
例子:让lisi用户可以使用挂载命令
让用户使用root命令除了以上的方法,还有另一种方法,就是将用户加入到root组中