登录shell是用户与计算机系统直接交互的接口,使用户能够通过命令行方式进行各种操作和管理。 所以让用户无法登录,其实就是将登录shell改为 /sbin/nologin,可以用usermod -s 更改。
[root@localhost home]# usermod -s /sbin/nologin lisi ##更改登录shell [root@localhost home]# cat /etc/passwd |grep lisi ##查看修改是否成功 lisi:x:1001:1001::/home/lisi:/sbin/nologin [root@localhost home]# su lisi ##查看能否切换到目标用户 This account is currently not available. ##用户无法切换
[root@localhost home]# userdel -r lisi ##加上选项r删除用户的同时删除家目录
方式一
usermod -L 用户名 锁定用户
usermod -U 用户名 解锁用户
方式二
passwd -l 用户名 锁定用户
passwd -u 用户名 解锁用户
chattr
命令用于修改文件或目录的属性,设置文件的特殊属性,使其具有更高级的保护或控制
chattr [选项] 文件名
+i 将文件设置为“不可修改”,即无法被删除、重命名、修改内容或链接的操作
-i 取消对文件的“不可修改”属性
+a 只能向文件中添加内容,无法修改或删除已有内容
通过锁定配置文件 /etc/passwd 和 /etc/shadow ,可以防止恶意修改或者误修改,保证系统和数据的安全性。
[root@localhost home]# chattr +i /etc/passwd /etc/shadow ##锁定配置文件 [root@localhost home]# useradd liwu useradd:无法打开 /etc/passwd ##无法打开配置文件 无法创建用户
编辑 /etc/login.defs
文件来设置密码规则
PASS_MAX_DAYS 99999 ##修改此部分来设置密码有效期 PASS_MIN_DAYS 0 PASS_MIN_LEN 5 PASS_WARN_AGE 7
PASS_MAX_DAYS:指定用户密码的最长有效天数
PASS_MIN_DAYS:指定在更改密码之间必须等待的最小天数
PASS_MIN_LEN: 指定用户密码的最小长度
PASS_WARN_AGE:指定在密码过期之前的多少天开始向用户发出警告
chage [选项] 用户名 -m:密码可更改的最小天数,m=0 代表任何时候都可以更改密码 -M:密码保持有效的最大天数
-w:用户密码到期前,提前收到警告信息的天数 -E:帐号到期的日期。过了这天,此帐号将不可用 -d:上一次更改的日期 -i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。 -l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
[root@localhost ~]# chage -d 0 用户名 ##强制用户下一次登录要修改密码 [root@localhost ~]#chage -M 30 lisi #设置密码有效期为30天 [root@localhost ~]#cat /etc/shadow|tail -1 lisi:!!:19055:0:30:7::: 第5字段
设置自动注销时间
[root@localhost ~]# vi /etc/profile ##对所有用户生效 ................................. export TMOUT=60 [root@localhost ~]# source /etc/profile ##使配置文件生效
[root@localhost ~]# history |tail 138 vim /etc/login.defs 139 vim .bashrc 140 ls 141 vim /etc/bashrc 142 history 143 history |head 144 history |tail -f 145 cd 146 history |tail -f 147 history |tail
方式一、注销时清空历史命令 vim .bash_logout .. .. echo ' ' > /root/.bash_history ##空文件导入 ... :wq . /.bash_logout ##应用修改 方式二、修改全局配置文件 vim /etc/proflie ##修改此文件 全局生效 ..... HISTSIZE =....(自定义数字) ##最大显示 .... :wq reboot ##重启应用修改
su命令即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命令
命令格式 su [options...] [-] [user [args...] su [选项] 用户名 ##不完全切换,上一个用户的部分设置会保留 su - 用户名 ##完全切换 ,相当于重新登录, 查看su操作记录 安全日志文件:cat /var/log/secure [liwi@localhost root]$ su liwu 密码: ##普通用户切换需要密码 [root@localhost ~]# su liwi ##root用户切换到普通用户不需要密码
sudo [选项] 命令
-V 显示版本编号
-l 显示出自己(执行 sudo 的使用者)的权限
-k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
-p 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
-u 用户名 以指定用户的权限
-s 执行环境变数中的 SHELL 所指定的 shell
vim /etc/sudoers =visudo ## 编辑配置文件
root ALL=(ALL) ALL
1.user字段 用户名或UID %组名或者%GID
2.host字段 IP地址或主机名 ALL代表任意主机
3.代表用户字段 用户名或UID ALL代表任意用户
4.命令字段(绝对路径) command name (命令) directory (文件夹里的命令) sudoedit (可以编辑sudoers这个文件,变相变成管理员) Cmnd_Alias (命令别名)
将所有提权都放在配置文件/etc/sudoers中,不便于管理。 通过再/etc/sudoers.d/下创建子目录,可以更好地管理sudo的授权规则。
/etc/sudoers.d/test1 test2.....(针对性的创建文件)
举例 vim /etc/sudoers.d/test ##创建子目录(新配置文件) ... test1 ALL= (root) sudoedit ##用户test1可以使用 sudoedit 命令 ... :wq chmod 440 test ##设置权限,加固安全
1.身份验证方式: su命令(切换用户)需要输入目标用户的密码来切换到目标用户的身份。
sudo命令(以超级用户执行)需要输入当前用户的密码来验证身份。
2.执行命令的方式: su命令会切换用户的环境,包括当前工作目录和环境变量等。在切换用户后,需要重新设置所需的工作环境。
sudo命令在当前用户的环境下以超级用户身份执行命令,不会切换用户的环境。这使得在执行完命令后,可以继续以当前用户身份继续工作,而不需要重新设置环境。
3.授权: su命令切换到目标用户后,拥有目标用户的完整权限。
sudo命令可以按需授予用户对特定命令或特定命令组合的访问权限。
PAM:Pluggable Authentication Modules,插件式的验证模块,用于管理和进行用户身份验证的模块化系统。
PAM提供了灵活和可定制的用户身份验证框架,使系统管理员能够根据需要配置和管理身份验证方式。
su命令的安全隐患
默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root) 的登录密码,带来安全风险;
为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换。
PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_*.so
1.用户访问(应用程序需要进行用户身份验证时,会调用PAM库来初始化PAM会话)
2.确定service类型(加载哪些身份验证模块,用户名、密钥、短信验证码等等)
3.PAM根据配置文件确定是否允许访问或者进一步的操作
4.PAM会话结束时,将最终的身份验证结果返回给应用程序
只有功能较强的功能模块才有配置文件,所以配置文件的数量小于功能模块的总数
配置文件路径 主要配置文件
/ etc / security / ,只有功能强大的pam模块才会有主配置文件
次要配置文件(优先生效)
/etc/pam.d/
[root@localhost ~]# vim /etc/pam.d/login #%PAM-1.0 auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so auth substack system-auth auth include postlogin account required pam_nologin.so account include system-auth password include system-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so session optional pam_console.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open session required pam_namespace.so session optional pam_keyinit.so force revoke session include system-auth session include postlogin -session optional pam_ck_connector.so ~ #模块类型 控制位 PAM模块 ~ ~ ~ ~ "/etc/pam.d/login" 18L, 796C 1,1 全部
第一列:模块类型(module-type)
模块类型 | 功能 |
---|---|
Auth | 账号的认证和授权 |
Account | 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录) |
Password | 用户修改密码时密码复杂度检查机制等功能 |
Session | 用户会话期间的控制,如:最多打开的文件数,最多的进程数等 |
-type | 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用 |
第二列:Control:( 控制位)
required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件 requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件 sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的 equired和requisiteoptional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略include: 调用其他的配置文件中定义的配置 optional 可选项
第三列:PAM模块
模块 | 功能 |
---|---|
认证管理(authentication management) | 接受用户名和密码,进而对该用户的密码进行认证 |
帐户管理(account management) | 检查帐户是否被允许登录系统,帐号是否已经过 期,帐号的登录是否有时间段的限制等 |
密码管理(password management) | 主要是用来修改用户的密码 |
会话管理(session management) | 主要是提供对会话的管理和记账 |
模块配置文件路径
/usr/lib64/security/
required 无论验证成功还是失败 会继续往下验证
requisite 验证成功则继续 验证失败则立即结束整个验证过程
sufficient 验证成功则立即返回,否则忽略结果并继续
optional 一般不用于验证,只显示信息
功能:限制用户的资源使用,例如:可打开的文件数量,可运行的进程数量,可用内存空间
通过ulimit命令可以查看和设置不同类型的资源限制
ulimit -a 显示当前所有资源的限制
ulimit -c 设置core文件的最大大小,单位为blocks
ulimit -n 设置可以打开的最大文件描述符数
ulimit -u 设置用户可创建的最大进程数
ulimit -m 设置单个进程的物理内存限制,单位为KB
ulimit -v 设置单个进程的虚拟内存限制,单位为KB
ulimit -s 设置单个栈的最大大小,单位为blocks
ulimit -f 设置单个文件的最大大小,单位为blocks