目录
一、用户管理
1. 查看系统用户信息
cat /etc/passwd
[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...
该文件中以“ : ”为分隔符:
- 用户名:root
- 密码占位符:x
- UID(用户ID):0
- GID(组ID):0
- 用户描述,空表示没有:root
- 家目录:/root
- 登录shell:/bin/bash(/bin/bash为可登录,nologin为不可登录)
1.1 查看当前登录系统用户信息(判断用户是否存在)
id
id 用户名
1.2 查看当前登录系统用户名
whoami
[root@localhost ~]# whoami #查看当前系统用户名
root
[root@localhost ~]# id #当前登录系统用户为root,id后不跟用户名默认为root
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@localhost ~]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@localhost ~]# id yy #判断yy用户不存在
id: yy: no such user
2. 创建用户
语法结构:
useradd [参数] 用户名
[常用参数]:
-u:指定UID(UID应是唯一值,未被使用)
-g:指定GID(GID应已存在)
-c:指定描述字段
-d :指定家目录
-M:不创建家目录
-s:指定登录shell
案例
1.创建用户yy:
[root@localhost ~]# useradd yy
[root@localhost ~]# tail -2 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
yy:x:1000:1000::/home/yy:/bin/bash
[root@localhost ~]# useradd -M yy #用户yy已存在,不能再次创建
useradd: user 'yy' already exists
2.创建用户hhh,指定uid为91并且不创建家目录:
[root@localhost ~]# useradd -u 91 -M hhh
[root@localhost ~]# tail -2 /etc/passwd
yy:x:1000:1000::/home/yy:/bin/bash
hhh:x:91:1001::/home/hhh:/bin/bash
[root@localhost ~]# id hhh #用户hhh的uid为指定91
uid=91(hhh) gid=1001(hhh) groups=1001(hhh)
[root@localhost ~]# ls /home #用户hhh没有创建家目录
yy
3.创建用户yyyy,指定uid为93,gid为1000,家目录为/home/yyy,描述为yy_son:
[root@localhost ~]# useradd -u 93 -g 1000 -d /home/yyy -c yy_son yyyy
[root@localhost ~]# tail -3 /etc/passwd
yy:x:1000:1000::/home/yy:/bin/bash
hhh:x:91:1001::/home/hhh:/bin/bash
yyyy:x:93:1000:yy_son:/home/yyy:/bin/bash
[root@localhost ~]# id yyyy #用户yyyy的uid为指定93,gid为指定1000即与用户yy同组
uid=93(yyyy) gid=1000(yy) groups=1000(yy)
[root@localhost ~]# ll -d /home/yyy #用户yyyy家目录为/home/yyy
drwx------. 2 yyyy yy 62 Oct 26 10:25 /home/yyy
4.创建用户a,分别验证uid与家目录存在,gid不存在的状态:
[root@localhost ~]# useradd -u 1000 a #uid已经存在不能创建用户a
useradd: UID 1000 is not unique
[root@localhost ~]# useradd -g 11111 a #gid不存在不能创建用户a
useradd: group '11111' does not exist
[root@localhost ~]# useradd -d /home/yy a #家目录/home/yy已经存在,但用户a创建成功
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@localhost ~]# tail -4 /etc/passwd #用户yy与用户a在同一个家目录/home/yy
yy:x:1000:1000::/home/yy:/bin/bash
hhh:x:91:1001::/home/hhh:/bin/bash
yyyy:x:93:1000:yy_son:/home/yyy:/bin/bash
a:x:1001:1002::/home/yy:/bin/bash
[root@localhost ~]# su - a #从root用户登录到普通用户a失败
Last login: Thu Oct 26 16:02:22 CST 2023 on pts/1
su: warning: cannot change directory to /home/yy: Permission denied
-bash: /home/yy/.bash_profile: Permission denied
-bash-4.2$ exit #退回到root用户
logout
[root@localhost ~]# su - yy
[yy@localhost ~]$ exit #从用户yy退回到root用户
exit
[root@localhost ~]# ll -d /home/yy #查看家目录/home/yy的所属者和所属组为yy,所以用户yy能够成功登录
drwx------. 2 yy yy 83 Oct 26 16:02 /home/yy
[root@localhost ~]# chown a.a /home/yy #修改家目录/home/yy的所属者和所属组为a
[root@localhost ~]# ll -d /home/yy
drwx------. 2 a a 83 Oct 26 10:53 /home/yy
[root@localhost ~]# su - yy #再次从root用户切换到普通用户yy失败
Last login: Thu Oct 26 16:02:40 CST 2023 on pts/1
su: warning: cannot change directory to /home/yy: Permission denied
-bash: /home/yy/.bash_profile: Permission denied
-bash-4.2$ exit
logout
-bash: /home/yy/.bash_logout: Permission denied
[root@localhost ~]# su - a #再次从root用户切换到普通用户a成功
Last login: Thu Oct 26 16:02:50 CST 2023 on pts/1
[a@localhost ~]$
5. 创建用户b,指定用户b不能被登录:
[root@localhost ~]# useradd -s /sbin/nologin b
[root@localhost ~]# tail -5 /etc/passwd
yy:x:1000:1000::/home/yy:/bin/bash
hhh:x:91:1001::/home/hhh:/bin/bash
yyyy:x:93:1000:yy_son:/home/yyy:/bin/bash
a:x:1001:1002::/home/yy:/bin/bash
b:x:1002:1003::/home/b:/sbin/nologin
[root@localhost ~]# su - b #从root用户切换到用户b失败
Last failed login: Thu Oct 26 15:18:32 CST 2023 on pts/0
There was 1 failed login attempt since the last successful login.
This account is currently not available.
总结
-
如果指定uid的值,那么uid是唯一值未被创建过;
-
如果指定gid的值,那么gid的值要存在;
-
如果未指定uid的值,那么用户uid的值与gid值相等;
-
如果指定创建家目录已经存在,那么需要更改家目录所属者和所属组的权限;
-
不能创建相同的用户名;
-
创建用户时还创建了用户对应的邮件文件,/var/mail目录存储用户邮箱。
3. 修改用户
语法结构:
usermod [参数] 修改的内容 用户名
常用参数:
-l:修改用户名(新用户名 旧用户名)
-u:修改UID
-g:修改GID
-c:修改描述字段
-d:修改家目录
-s:修改登录shell
案例
1.修改用户yy为nick:
[root@localhost ~]# usermod -l nick yy
[root@localhost ~]# tail -5 /etc/passwd
hhh:x:91:1001::/home/hhh:/bin/bash
yyyy:x:93:1000:yy_son:/home/yyy:/bin/bash
a:x:1001:1002::/home/yy:/bin/bash
b:x:1002:1003::/home/b:/sbin/nologin
nick:x:1000:1000::/home/yy:/bin/bash
2.修改用户yyyy为ada,修改uid为92,描述为This is a explain,登录shell为/bin/nologin:
[root@localhost ~]# usermod -u 92 -c "This is a explain" -s /bin/nologin -l ada yyyy
[root@localhost ~]# tail -5 /etc/passwd
hhh:x:91:1001::/home/hhh:/bin/bash
a:x:1001:1002::/home/yy:/bin/bash
b:x:1002:1003::/home/b:/sbin/nologin
nick:x:1000:1000::/home/yy:/bin/bash
ada:x:92:1000:This is a explain:/home/yyy:/bin/nologin
3.修改用户b的gid为1002,家目录为/max:
[root@localhost ~]# usermod -g 1002 -d /max b
[root@localhost ~]# tail -5 /etc/passwd
hhh:x:91:1001::/home/hhh:/bin/bash
a:x:1001:1002::/home/yy:/bin/bash
b:x:1002:1002::/max:/sbin/nologin
nick:x:1000:1000::/home/yy:/bin/bash
ada:x:92:1000:This is a explain:/home/yyy:/bin/nologin
3.1 修改用户密码
语法结构:
passwd 用户名 ---->交互式
echo 密码|passwd --stdin 用户名 ---->非交互式
案例
1.为用户a设置密码,创建用户lynn并设置密码:
[root@localhost ~]# passwd a #交互式方式设置用户a密码
Changing password for user a.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# echo 123|passwd --stdin lynn #为不存在的用户lynn设置密码失败
passwd: Unknown user name 'lynn'.
[root@localhost ~]# useradd lynn #创建用户lynn
[root@localhost ~]# echo 123|passwd --stdin lynn #非交互式方式设置用户lynn密码
Changing password for user lynn.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# su - lynn #从root用户登录到用户lynn不需要密码
[lynn@localhost ~]$ su - a #普通用户lynn登录到普通用户a需要输入用户a的密码
Password:
Last login: Thu Oct 26 16:06:31 CST 2023 on pts/1
[a@localhost root]$ su - root #普通用户a登录到root用户需要输入root用户的密码
Password:
Last login: Thu Oct 26 15:58:43 CST 2023 from 172.29.11.62 on pts/1
[root@localhost ~]#
2.删除用户a的密码:
[root@localhost ~]# passwd a -d #删除用户a密码
Removing password for user a.
passwd: Success
[root@localhost ~]# su - lynn #从root用户登录用户lynn不需要密码
Last login: Thu Oct 26 16:09:45 CST 2023 on pts/1
[lynn@localhost root]$ su - a #用户lynn登录用户a不需要密码
Last login: Thu Oct 26 16:10:00 CST 2023 on pts/1
[a@localhost root]$
3.设置用户a密码为随机数,并查看用户密码:
[root@localhost ~]# echo $RANDOM|passwd --stdin a #$RANDOM产生随机数
Changing password for user a.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# tail -5 /etc/shadow #查看用户a和用户lynn密码已被加密
a:$6$gZZbji8b$Yrn9I/XNILt7QLcqlGtBsfhU8PCTYygKHbVeh93R4Xv6KknmSj1Oov23zzRvao75t9q6YclEc8OGa.KRo3zL4/:19656:0:99999:7:::
b:!!:19656:0:99999:7:::
nick:!!:19656:0:99999:7:::
ada:!!:19656:0:99999:7:::
lynn:$6$/kX3Cbsc$xlQOeKymxrPxCLt3fk.vbTGRcVZauojTIvcl97I9V2h1sbZL1tcNQzFDNU4V4Kme2gPgfUVPsGBxEOsEipB72.:19656:0:99999:7:::
总结
- 不存在用户不能设置密码;
- 不用用户是否存在都会修改密码;
- root用户切换任何用户都不需要密码,普通用户切换任何用户都需要密码。
4. 删除用户
语法结构:
userdel [参数] 用户名
常用参数:
-r:清理与用户相关文件
案例
1.使用-r参数删除用户b:
[root@localhost ~]# userdel -r b
userdel: group b not removed because it is not the primary group of user b.
userdel: /max not owned by b, not removing
[root@localhost ~]# tail -5 /etc/passwd #用户b信息被移除
hhh:x:91:1001::/home/hhh:/bin/bash
a:x:1001:1002::/home/yy:/bin/bash
nick:x:1000:1000::/home/yy:/bin/bash
ada:x:92:1000:This is a explain:/home/yyy:/bin/nologin
lynn:x:1003:1004::/home/lynn:/bin/bash
[root@localhost ~]# ls /var/mail/ #用户b邮箱被移除
a ada lynn nick
2.不使用-r参数删除用户nick:
[root@localhost ~]# userdel nick
[root@localhost ~]# tail -5 /etc/passwd #用户b信息未移除
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
hhh:x:91:1001::/home/hhh:/bin/bash
a:x:1001:1002::/home/yy:/bin/bash
ada:x:92:1000:This is a explain:/home/yyy:/bin/nologin
lynn:x:1003:1004::/home/lynn:/bin/bash
[root@localhost ~]# ls /var/mail/ #用户b邮箱未移除
a ada lynn nick
[root@localhost ~]# ls /home/ #用户b家目录未移除
b lynn yy yyy
二、组管理
1. 查看组信息
语法结构:
groups 用户名 == cat /etc/group
案例
1.查看用户hhh和用户a的组,并修改用户a的组为1001(即与用户hhh同组):
[root@localhost ~]# tail -4 /etc/group
hhh:x:1001:
a:x:1002:
b:x:1003:
lynn:x:1004:
[root@localhost ~]# groups hhh
hhh : hhh
[root@localhost ~]# groups a
a : a
[root@localhost ~]# usermod -g 1001 a
[root@localhost ~]# groups hhh
hhh : hhh
[root@localhost ~]# groups a
a : hhh
2. 创建组
语法结构:
groupadd [参数] 组名
常用参数:
-g:指定GID(与useradd指定GID相反)
案例
1.创建组group1:
[root@localhost ~]# groupadd group1
[root@localhost ~]# tail -3 /etc/group
b:x:1003:
lynn:x:1004:
group1:x:1005:
2.创建组group2,指定gid为11111:
[root@localhost ~]# groupadd -g 11111 group2
[root@localhost ~]# tail -3 /etc/group
lynn:x:1004:
group1:x:1005:
group2:x:11111:
3. 修改组
语法结构:
groupmod [参数] 组名
常用参数:
-g:指定GID
-n:修改组名(新组名 旧组名)
案例
1.修改用户hhh的GID为2222,并将组名hhh修改为group3:
[root@localhost ~]# tail -7 /etc/group
yy:x:1000:
hhh:x:1001:
a:x:1002:
b:x:1003:
lynn:x:1004:
group1:x:1005:
group2:x:11111:
[root@localhost ~]# groupmod -g 2222 -n group3 hhh
[root@localhost ~]# tail -7 /etc/group
yy:x:1000:
a:x:1002:
b:x:1003:
lynn:x:1004:
group1:x:1005:
group2:x:11111:
group3:x:2222:
4. 删除组
语法结构:
groupmod 组名
案例
1.删除组group2:
[root@localhost ~]# tail -3 /etc/group
group1:x:1005:
group2:x:11111:
group3:x:2222:
[root@localhost ~]# groupdel group2
[root@localhost ~]# tail -3 /etc/group
lynn:x:1004:
group1:x:1005:
group3:x:2222:
2.删除组group3:
[root@localhost ~]# groupdel group3 #组group3删除失败
groupdel: cannot remove the primary group of user 'hhh'
[root@localhost ~]# userdel -r hhh #删除用户hhh成功
userdel: hhh home directory (/home/hhh) not found
[root@localhost ~]# groupdel group3 #再删除组group3成功
[root@localhost ~]# tail -3 /etc/group
b:x:1003:
lynn:x:1004:
group1:x:1005:
总结
useradd语句创建的用户自动生成的组不能使用groupdel删除,如果想要删除该组就直接删除用户,即用户的属性组不能删除。
三、用户与组的关系
1. 用户添加附加组/组添加用户
1.1 用户添加附加组
语法结构:
gpasswd -a 用户名 组名 #参数-a添加用户到组
案例
1.创建用户user-1及组group-1,为用户user-1添加附加组group-1(即user-1有两个组):
[root@localhost ~]# useradd user-1 #创建用户user-1
[root@localhost ~]# groupadd group-1 #创建组group-1
[root@localhost ~]# id user-1 #查看用户user-1的组信息
uid=1005(user-1) gid=1008(user-1) groups=1008(user-1)
[root@localhost ~]# gpasswd -a user-1 group-1 #为用户user-1添加附加组group-1
Adding user user-1 to group group-1
[root@localhost ~]# id user-1 #用户user-1成功添加到group-1组
uid=1005(user-1) gid=1008(user-1) groups=1008(user-1),1007(group-1)
1.2 组添加用户
语法结构:
usermod -aG 组名 用户名 #参数-a添加用户到组需要与G一起使用是为用户添加附加组,参数-G单独使用是修改用户的附加组
案例
1.创建用户user-2,并添加到组group-1:
[root@localhost ~]# useradd user-2
[root@localhost ~]# tail -4 /etc/group #查看组group-1信息
group1:x:1005:
group-1:x:1007:user-1
user-1:x:1008:
user-2:x:1006:
[root@localhost ~]# usermod -aG group-1 user-2
[root@localhost ~]# tail -4 /etc/group
group1:x:1005:
group-1:x:1007:user-1,user-2
user-1:x:1008:
user-2:x:1006:
[root@localhost ~]# id user-2 #用户user-2与用户user-1同时拥有两个组
uid=1006(user-2) gid=1006(user-2) groups=1006(user-2),1007(group-1)
[root@localhost ~]# id user-1
uid=1005(user-1) gid=1008(user-1) groups=1008(user-1),1007(group-1)
2. 添加多个用户到组
语法结构:
gpasswd -M 用户名,用户名... 组名 #参数-M设置组列表成员
案例
1.创建用户user-3和组group-2,将用户user-1、user-2、user-3添加到组group-2:
[root@localhost ~]# useradd user-3 #创建用户user-3
[root@localhost ~]# groupadd group-2 #创建组group-2
[root@localhost ~]# tail -1 /etc/group #查看组group-2信息
group-2:x:1010:
[root@localhost ~]# gpasswd -M user-1,user-2,user-3 group-2
[root@localhost ~]# tail -1 /etc/group
group-2:x:1010:user-1,user-2,user-3
3. 从组删除用户
语法结构:
gpasswd -d 用户名 组名 #参数-d从组中删除用户
案例
1.将用户user-1从group-1组删除:
[root@localhost ~]# tail -5 /etc/group #查看组group-1中的用户
group-1:x:1007:user-1,user-2
user-1:x:1008:
user-2:x:1006:
user-3:x:1009:
group-2:x:1010:user-1,user-2,user-3
[root@localhost ~]# gpasswd -d user-1 group-1
Removing user user-1 from group group-1
[root@localhost ~]# tail -5 /etc/group
group-1:x:1007:user-2
user-1:x:1008:
user-2:x:1006:
user-3:x:1009:
group-2:x:1010:user-1,user-2,user-3
四、用户提权
超级管理员root用户useradd创建的用户为普通用户,如果服务器需要做一些高级操作时,普通用户权限往往显示权限被拒绝,此时就需要用到root权限。如果想要普通用户拥有root用户的所有权限,则可以将普通用户提升为管理员用户,即可执行管理员命令。
1. 方案一
什么是wheel(轮子)组?
wheel组用来归纳一些特殊的系统用户,是root用户所在组,普通用户添加到该组就成了管理员组内的用户,并拥有了root用户的相关权限。一般会禁止普通用户随意使用su命令登录root用户
1.1 用户添加到wheel组
语法结构:
usermod -aG wheel 用户名
== gpasswd -a 用户名 wheel
案例
1.将user-1命令添加到wheel组,有权限创建用户user-1.1:
[root@localhost ~]# echo 123 |passwd --stdin user-1 #为用户user-1创建密码为123
Changing password for user user-1.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# su - user-1 #root用户登录到用户user-1
[user-1@localhost ~]$ sudo useradd user-1.1 #用户user-1创建用户user-1.1没有权限
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for user-1:
user-1 is not in the sudoers file. This incident will be reported.
[user-1@localhost ~]$ exit #登录到root用户
logout
You have mail in /var/spool/mail/root
[root@localhost ~]# gpasswd -a user-1 wheel #将用户user-1添加到wheel组
Adding user user-1 to group wheel
[root@localhost ~]# su - user-1 #再次登录到用户user-1
Last login: Mon Oct 30 11:11:26 CST 2023 on pts/0
[user-1@localhost ~]$ sudo useradd user-1.1 #添加sudo命令创建用户user-1.1成功
[sudo] password for user-1:
[user-1@localhost ~]$ echo 123|passwd --stdin user-1.1 #为用户user1.1创建密码为123
Only root can do that.
[user-1@localhost ~]$ sudo su - user-1.1 #切换到用户user-1.1成功
Last failed login: Mon Oct 30 11:16:21 CST 2023 on pts/0
There were 2 failed login attempts since the last successful login.
[user-1.1@localhost ~]$ exit #退回到user-1用户
logout
[user-1@localhost ~]$
1.2 创建拥有管理权限的用户
语法结构:
useradd -G wheel 用户名
案例
1.创建管理员user-4:
[root@localhost ~]# useradd -G wheel user-4 #创建管理员用户user-4
[root@localhost ~]# id user-4 #查看user-4用户组
uid=1009(user-4) gid=1012(user-4) groups=1012(user-4),10(wheel)
[root@localhost ~]# echo 123|passwd --stdin user-4 #为user-4用户创建密码123
Changing password for user user-4.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# su - user-4 #登录到user-4用户
Last login: Mon Oct 30 11:26:43 CST 2023 on pts/0
[user-4@localhost ~]$ sudo useradd user-4.1 #创建用户user-4.1
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for user-4:
[user-4@localhost ~]$ echo 123|passwd --stdin user-4.1 #为用户user-4.1创建密码123
Only root can do that.
[user-4@localhost ~]$ sudo su - user-4.1 #登录到用户user-4.1
Last failed login: Mon Oct 30 11:28:34 CST 2023 on pts/0
There was 1 failed login attempt since the last successful login.
[user-4.1@localhost ~]$
2. 方案二
用户添加到sudo命令的配置文件。
案例
1.将user-2添加到sudo配置文件,登录到user-2创建user-2.1用户:
[root@localhost ~]# echo 123|passwd --stdin user-2 #为用户user-2创建密码123
Changing password for user user-2.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# su - user-2 #登录到用户user-2
Last login: Mon Oct 30 11:37:38 CST 2023 on pts/0
[user-2@localhost ~]$ sudo useradd user-2.1 #创建用户user-2.1失败
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for user-2:
user-2 is not in the sudoers file. This incident will be reported.
[user-2@localhost ~]$ exit
logout
You have new mail in /var/spool/mail/root
[root@localhost ~]# visudo #将用户user-2添加到sudo文件
[root@localhost ~]# su - user-2
Last login: Mon Oct 30 11:38:23 CST 2023 on pts/0
[user-2@localhost ~]$ sudo useradd user-2.1 #创建用户user-2.1成功
[sudo] password for user-2:
[user-2@localhost ~]$ sudo su - user-2.1 #登录到用户user-2.1成功
[user-2.1@localhost ~]$
visudo配置文件中填写信息: