管理本地用户和组
描述用户和组
用户
用户账户用于运行命令的不同人员与程序之间提供安全界限。
使用id显示有关当前登录用户信息
[root@servera ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
查找其他用户基本信息
[root@servera ~]# id usr1
uid=1000(usr1) gid=1000(usr1) groups=1000(usr1)
查看文件所有者
[root@servera /]# ls -ld
dr-xr-xr-x. 17 root root 224 Jul 15 10:14 .
查看进程相关信息,使用ps命令 -u进程关联用户
[root@servera /]# ps -au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 890 0.0 0.0 6916 1708 tty1 Ss+ 23:00 0:00 /sbin/agetty -o -p -- \u --noclear tty1 l
root 1651 0.0 0.2 15120 3680 pts/0 Ss 23:01 0:00 -bash
root 1756 0.0 0.2 47636 3692 pts/0 R+ 23:58 0:00 ps -au
组
组需要共享文件和其他系统资源访问权限的用户的集合。组可以用于向一组用户授予文件访问权限,而非一个用户授予访问权限。
系统通过分配的唯一标识好GID区分不同组,组名称到GID的映射在组账户信息数据库定义。默认情况存储在/etc/group
[root@servera ~]# head -n 1 /etc/group
root:x:0:
#被冒号分隔
#用户组名称:过时的组密码字段始终x:改组GID:作为补充组成员的用户列表
主要组和补充组
每个用户有且只有一个主要组。对于本地用户而言,按照/etc/passwd
上的GID号列出。
创建新用户时,会创建一个与该用户同名的新组。该组用户新用户的主要组,而该用户是这一用户组唯一成员。
用户组也可以有补充组。补充组的资格由/etc/group
确定。根据所在组是否具有访问权限啊,将授予用户对文件的访问权限。
获取超级用户访问权限
切换用户
su命令可以切换用户,普通用户运行su,系统会提示输入切换账户的密码,而root身份运行su,无需密码。
[root@servera ~]# su - tmpUsr
[tmpUsr@servera ~]$
[tmpUsr@servera ~]$ su - root
Password:
Last login: Mon Jul 17 02:34:36 EDT 2023 from 192.168.182.1 on pts/0
[root@servera ~]#
使用sudo运行命令
有时为安全,root用户可能没有有效的密码,这种情况下,用户无法使用密码直接以root身份登录系统,也不能使用su获取交互式shell。
sudo可以配置运行特定用户想其他用户一样运行命令,或仅运行该用户身份运行部分命令。且所有命令默认记录/var/log/secure
。
[root@servera ~]# tail /var/log/secure
Jul 17 02:34:59 servera sshd[6232]: pam_unix(sshd:session): session opened for user root by (uid=0)
Jul 17 02:46:09 servera useradd[6282]: new group: name=tmpUsr, GID=1000
Jul 17 02:46:09 servera useradd[6282]: new user: name=tmpUsr, UID=1000, GID=1000, home=/home/tmpUsr, shell=/bin/bash
Jul 17 02:46:26 servera passwd[6289]: pam_unix(passwd:chauthtok): password changed for tmpUsr
Jul 17 02:46:36 servera su[6293]: pam_unix(su-l:session): session opened for user tmpUsr by root(uid=0)
Jul 17 02:46:59 servera su[6321]: pam_unix(su-l:session): session opened for user root by root(uid=1000)
Jul 17 02:54:47 servera su[6349]: pam_unix(su-l:session): session opened for user tmpUsr by root(uid=0)
Jul 17 02:55:11 servera sudo[6377]: tmpUsr : user NOT in sudoers ; TTY=pts/0 ; PWD=/home/tmpUsr ; USER=root ; COMMAND=/sbin/usermod -L root
Jul 17 02:56:49 servera sudo[6381]: tmpUsr : user NOT in sudoers ; TTY=pts/0 ; PWD=/home/tmpUsr ; USER=root ; COMMAND=/bin/tail /var/log/secure
Jul 17 02:57:05 servera su[6385]: pam_unix(su:session): session opened for user root by root(uid=1000)
配置sudo
/etc/sudoers
,如果多个管理员同时编辑该文件,为避免出现问题,只硬使用特殊的visudo命令进行编辑。
[root@servera ~]# cat /etc/sudoers | grep wheel
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
# %wheel ALL=(ALL) NOPASSWD: ALL
%wheel是规则适用的用户或组。%指定这是一个组,ALL=(ALL)指定在可能包含此文件的任何主机上,wheel可以运行任何命令。最后的ALL指定wheel可以在系统上的任何用户一样运行这些命令。
默认/etc/sudoers
还包含/etc/sudoers.d
目录中所有文件内容,作为配置文件的一部分。管理员只需将相应的文件放入该目录中,即可为用户添加sudo访问权限。
为用户tmpUsr启用完整的sudo权限,创建含有以下内容的/etc/sudoer.d/tmpUsr
tmpUsr ALL=(ALL) ALL
管理用户密码
阴影密码和密码策略
加密密码存储在全局可读/etc/passwd
中,由于对于加密密码的攻击变得常见;加密密码被移动到只有root用户才能读取的/etc/shadow
中,该文件也允许实施期限和到期时间。
[root@servera ~]# head -n 1 /etc/shadow
root:$6$Jbj1e1iV11tUoVKP$OpdEsyOvZ0vS0ndaXi06/2yPBFPJMOE6vkSoht0zeh8kPBAp9mFIqyHEv4BKsCCJk27RWC5kGlFH1pJicwywq.::0:99999:7:::
#
#用户名:加密密码:上次更改密码时间:自上次更改后可以再次更改必须经过的最短时间:密码过期之前不进行更改可以经过的最长时间:警告期(在密码过期前几天,登录会有提示):非活动期(一旦密码过期,在有些天内仍可以使用,之后账户被锁定):密码过期时间:留给未来使用
配置密码期限
使用chage命令
[root@servera ~]# chage -m 0 -M 90 -W 7 -I 14 tmpUsr
chage -d 0 tmpUsr #强制tmpUsr用户下次登录更新密码
chage -l tmpUsr #显示tmpUsr密码期限详情
chage -E 2011-08-05 tmpUsr #2011-08-05tmpUsr用户到期
#计算未来日期
[root@servera ~]# date
Mon Jul 17 05:21:39 EDT 2023
[root@servera ~]# date -d "+45 days" -u
Thu Aug 31 09:21:53 UTC 2023
编辑/etc/login.defs
,设置密码期限策略
[root@servera ~]# cat /etc/login.defs | grep PASS_
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
限制访问
nologin shell 用作不打算通过交互式登录系统的用户账户代替shell。
[root@servera ~]# su - usr1
Last login: Mon Jul 17 05:57:24 EDT 2023 on pts/0
[usr1@servera ~]$ exit
logout
[root@servera ~]# usermod -s /sbin/nologin usr1
[root@servera ~]# su - usr1
Last login: Mon Jul 17 06:09:15 EDT 2023 on pts/0
This account is currently not available.