目录
账号安全的基本措施
系统账号清理
将非登录用户的Shell设为/sbin/nologin
锁定长期不使用的账号
删除无用的账号
chattr 锁定账号文件passwd、shadow
选项:
-a :让文件或目录仅供附加用途。只能追加
-i :不得任意更动文件或目录
密码安全控制
设置密码有效期
新建用户
修改/etc/login.defs文件,设置密码规则
已有用户 chage
选项:
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
要求用户下次登录时修改密码
PAM安全认证
pam 插件式的模块
最常见的功能 用户名, 密码验证功能。
开发出一款软件,如果要用到用户名和密码的功能时,就会调用pam架构中的密码模块不需要二次开发。pam架构统一了标准。
PAM认证原理
一般遵循的顺序
Service (服务)---->PAM (配置文件)---->pam_*.so
- 首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
- 用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证
- 不同的应用程序所对应的PAM模块是不同的
PAM安全认证流程
控制类型也称做Control Flags,用于PAM验证类型的返回结果
1.required验证失败时仍然继续,但返回Fail
2.requisite验证失败则立即结束整个验证过程,返回Fail
3.sufficient验证成功则立即返回不再继续,否则忽略结果并继续 4.optional不用于验证,只显示信息(通常用于session类型)
专用配置文件/etc/pam.d/ 格式
type control module-path arguments
功能 判断成功失败 .so 参数
application:指服务名,如:telnet、login、ftp等,服务名字“OTHER”代表所有没有在该文件中明确配置的其它服务
type:指模块类型,即功能
control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
module-path: 用来指明本模块对应的程序文件的路径名
Arguments: 用来传递给该模块的参数
limit
功能:在用户级别实现对其可使用的资源的限制。例如:可打开的文件数量,可运行的进程数量,可用内存空间。unlimited 是一个特殊值,用于表示不限制。
- H | 设置硬件资源限制,一旦设置不能增加 | ulimit - Hs 64;限制硬资源,线程栈大小为 64 k |
- S | 设置软件资源限制,设置后可以增加,但不能超过硬资源设置 | ulimit -Sn 32;限制软资源,32个文件描述符 |
- a | 显示当前所有的资源限制 | ulimit -a; |
- c | 设置core文件的最大值.单位:blocks | ulimit -c unlimited;不限制 |
- d | 设置数据段的最大值.单位:kbytes | ulimit -d unlimited;不限制 |
- f | 设置创建文件的最大值.单位:blocks | ulimit -f 2048;文件大小最大为2048 |
- l | 设置在内存中锁定进程的最大值.单位:kbytes | ulimit -l 32;最大加锁内存为32 |
- m | 设置可以使用的常驻内存的最大值.单位:kbytes | ulimit -m unlimited;不限制 |
- n | 设置内核可以同时打开的文件描述符的最大值.单位:n | ulimit -n 128;最大可使用128个文件描述符 |
- p | 设置管道缓冲区的最大值.单位:kbytes | ulimit -p 512;管道缓冲区大小为512 |
- s | 设置堆栈(线程栈)的最大值.单位:kbytes | ulimit -s 512;线程栈大小为512 |
- t | 设置CPU使用时间的最大上限.单位:seconds | ulimit -t unlimited;不限制 |
- u | 最大用户进程数 | ulimit -u 64;用户最多可使用64个进程 |
- v | 设置虚拟内存的最大值.单位:kbytes | ulimit -v 200000;虚拟内存最大可用200000 |
修改限制的实现方式:
(1) ulimit命令
ulimit是linux shell的内置命令,它具有一套参数集,用于对shell进程及其子进程进行资源限制。
ulimit的设定值是 per-process 的,也就是说,每个进程有自己的limits值。使用ulimit进行修改,立即生效。
ulimit只影响shell进程及其子进程,用户登出后失效。
可以在profile中加入ulimit的设置,变相的做到永久生效
limits 生产中的 建议设置
* soft core unlimited
* hard core unlimited
* soft nproc 1000000
* hard nproc 1000000
* soft nofile 1000000
* hard nofile 1000000
* soft memlock 32000
* hard memlock 32000
* soft msgqueue 8192000
* hard msgqueue 8192000
用户切换 su
切换用户的方式:
su 用户名(UserName):非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换;即su 不加 - 切换子进程会接收父进程的一些配置
su - 用户名(UserName):登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换;即su 加 - 子进程不会接受父进程的 配置是完全独立
说明:root su至其他用户无须密码;非root用户切换时需要密码
注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。
限制使用su命令的用户
1.以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
2.两行都注释也是允许所有用户都能使用su命令,但root'下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)
3.如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令
4.如果注释第一行,开启第二行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。
sudo
允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。
sudo特性:
- sudo 授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员。
- sudo 提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
- sudo 使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票。
- sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440。
vim /etc/sudoers
visudo -c 检查语法
配置文件格式说明:/etc/sudoers, /etc/sudoers.d/
配置文件中支持使用通配符 glob
#用户 登入主机 = (代表用户) 命令
#user host = (runas) command
root ALL=(root) Auser: 运行命令者的身份
host: 通过哪些主机 多个 192.168.91.100 - 110 localhost
(runas):以哪个用户的身份
command: 运行哪些命令User和runas:
username(用户名)
#uid(id号)
%group_name(组名)
%#gid(组id)
user_alias|runas_alias(别名) MYUSER=zhangsan,lisi
host:
ip或hostname(IP地址或主机名)
host_alias(别名) localhost
command:
command name (命令)
directory (文件夹里的命令)
sudoedit (可以编辑sudoers这个文件,变相变成管理员)
Cmnd_Alias (命令别名)