1.1 用户的基本概念
用户在操作系统中是非常重要的,我们登录系统、访问共享文件夹等都需要用户进行验证。所以,掌握管理用户的知识是非常有必要的。
说到用户,我们会提到两个名词:账户信息和密码信息。
(1)账户信息:以QQ为例,可以理解为QQ号码、QQ签名、QQ中填写的个人资料等。
(2)密码信息:以QQ为例,就是登录QQ的密码。
用户的账户信息是存储在/etc/passwd文件中的,在此文件中一行一个用户信息,各字段用“:”隔开,如图所示。
第一个字段:用户名。
第二个字段:原来此处用于存储用户的密码,因为安全性问题,这里统一用x作为占位符。
第三个字段:用户的UID,每个用户都会有一个UID,root的UID为0。
第四个字段:用户的GID,每个组也都会有一个GID。
第五个字段:用户的描述信息。
第六个字段:用户的家目录。
第七个字段:用户的shell。
上面的命令也可以通过“getent passwd 用户名” 来获取。
[root@RedHat ~]# getent passwd bdqn
bdqn:x:1000:1000:bdqn:/home/bdqn:/bin/bash
[root@RedHat ~]#
用户的密码信息存储在/etc/shadow中,如下所示。
[root@RedHat ~]# grep bdqn /etc/shadow
bdqn:$6$Elfb.xnt8eXjXJan$ARTj8CGxgw29mSfa9YGErDhidygfgukRRHmqdFgOI2kSXqy2VVUH2ETOhaS2fcjLysQ2yb0jrjc9gH3rwQpt..::0:99999:7:::
[root@RedHat ~]#
上面第一个和第二个冒号之间的斜体字就是被加密后的密码。上面的信息也可以通过“getent shadow 用户名”来获取,如下所示。
[root@RedHat ~]# getent shadow bdqn
bdqn:$6$Elfb.xnt8eXjXJan$ARTj8CGxgw29mSfa9YGErDhidygfgukRRHmqdFgOI2kSXqy2VVUH2ETOhaS2fcjLysQ2yb0jrjc9gH3rwQpt..::0:99999:7:::
[root@RedHat ~]#
判断一个用户是否存在,可以使用“id 用户名”命令,如下所示。
[root@RedHat ~]# id tom
id: “tom”:无此用户
[root@RedHat ~]#
这里tom用户不存在,则显示无此用户。如果用户存在,则显示用户信息,如图所示。
第一字段:显示用户的UID信息。
第二字段:显示用户的GID信息。
第三字段:显示用户的GID信息。
如果id后面没有跟用户,则显示当前用户的自己信息。
[root@RedHat ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@RedHat ~]#
1.2 管理用户
管理用户包括创建用户和修改用户属性。
1.2.1 创建用户
利用useradd命令可以创建用户,useradd中常见的选项包括8种。
(1)-d:指定用户的家目录,默认为/home/用户名。
(2)-m:创建家目录,这是默认选项,一般不用指定。
(3)-M:不为用户创建家目录,即创建好用户之后没有“/home/用户名”。
(4)-s:指定用户的shell,默认为/bin/bash。
(5)-c:用来指定备注信息,不指定则为空。
(6)-u:指定用户的UID。
(7)-g:默认情况下,创建用户时会创建一个同名组。例如,创建tom用户,则会创建一个tom组,然后把 tom用户加人 tom组中。如果指定了-g root,则创建用户时直接把tom加入root组,就不会再创建tom组,此时 tom只属于一个组。
(8)-G:指定附属组,即把用户加人一个额外的组,此时 tom属于两个组。如果同时指定-g和-G选项,如-g root-G users,这里的意思是不再为tom创建命名组,直接加入root组,同时再额外地加入users组,此时tom 就属于两个组,即root和users组。
下面创建tom用户,如下所示。
[root@RedHat ~]# useradd -d /tom -s /sbin/nologin \
> -c "Im tom" -u 2000 -g root -G users tom
[root@RedHat ~]#
这里创建一个tom用户,因为命令太长,所以最后加一个反斜线后按【Enter】键,这里
虽然换行了,但是系统会认为仍然是一行的。
现在查看tom用户的属性,如下所示。
[root@RedHat ~]# grep tom /etc/passwd
tom:x:2000:0:Im tom:/tom:/sbin/nologin
[root@RedHat ~]#
可以看到,这里tom用户的属性完全是按照我们的要求创建出来的。
查看tom的密码信息,如下所示。
[root@RedHat ~]# grep tom /etc/shadow
tom:!!:19696:0:99999:7:::
[root@RedHat ~]#
因为我们在创建用户时,并没有指定用户的密码,所以这里密码为空。当我们创建用户时,没有给这个用户设置密码,则这个用户是处于被锁定状态,即不能登录,如下所示。
[root@RedHat ~]# passwd -S tom
tom LK 2023-12-05 0 99999 7 -1 (密码已被锁定。)
[root@RedHat ~]#
现在为 tom用户设置密码,可以使用如下命令。
[root@RedHat ~]# passwd tom
更改用户 tom 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@RedHat ~]#
这里把密码设置为haha001,或者使用如下命令。
[root@RedHat ~]# echo haha001 | passwd --stdin tom
更改用户 tom 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@RedHat ~]#
这里显示了用户已经设置了密码。查看密码信息,如下所示。
[root@RedHat ~]# grep tom /etc/shadow
tom:$6$8ajcUW2HvpeukuI5$hDCb2LPmalSQlMqnnah/BeOkVhgXTEUgbdbR3YR.R7mzy/IiaqpZZXmQsh8YEMIVgb2B4k1hijXbMPtt3UNq10:19696:0:99999:7:::
[root@RedHat ~]#
这里已经有了密码,但是,现在用户仍然是不能登录的,所以用su命令切换到tom用户。
[root@RedHat ~]# su - tom
This account is currently not available.
[root@RedHat ~]#
这是因为tom用户的shell被设置为了/sbin/nologin,任何用户的shell 被设置为/sbin/nologin,则此用户是不能登录系统的。那么,创建此用户的意义何在?很多时候我们搭建了服务,如用samba共享了一个目录,希望其他主机来访问此共享目录时不能以匿名用户访问,必须输入相关的用户名和密码,但又不想让他能登录系统,这种情况下就可以用到了。
1.2.2 修改用户的属性
如果想修改用户属性,可以使用usermod命令。usermod命令所能用到的选项与useradd时差不多的,下面讲最常见的5个选项。
(1)-c:修改注释信息。
(2)-s:修改shell信息。
(3)-d:修改家目录。
(4)-L:锁定用户。
(5)-U:解锁用户。
把tom的shell改成/bin/bash,并把备注信息改成hello tom,如下所示。
[root@RedHat ~]# grep tom /etc/passwd
tom:x:2000:0:Hello Tom:/tom:/bin/bash
[root@RedHat ~]#
1. 锁定用户
[root@RedHat ~]# usermod -L tom
[root@RedHat ~]# passwd -S tom
tom LK 2023-12-05 0 99999 7 -1 (密码已被锁定。)
[root@RedHat ~]#
锁定用户,使用root用户是可以用su命令切换过去的,但是使用其他用户是不能用su命令切换过去的,如下所示。
[root@RedHat ~]# su - tom
[tom@RedHat ~]$ exit
注销
[root@RedHat ~]#
再打开一个终端,这个终端中是以bdqn用户登录的,然后通过su命令切换到tom用户,如下所示。
[bdqn@RedHat ~]$ su - tom
密码:
su: 鉴定故障
[bdqn@RedHat ~]$
可以看到,blab用户不能用su命令切换过去,提示为鉴定故障。
2. 解锁用户
如果要解锁用户,可以使用usermod -U命令,如下所示。
[root@RedHat ~]# usermod -U tom
[root@RedHat ~]# passwd -S tom
tom PS 2023-12-05 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@RedHat ~]#
在第二个终端bdqn用户用su命令切换到tom用户。
[bdqn@RedHat ~]$ su - tom
密码:
[tom@RedHat ~]$ whoami
tom
[tom@RedHat ~]$ pwd
/tom
[tom@RedHat ~]$ exit
注销
[bdqn@RedHat ~]$
3. 修改用户的家目录
前面已经看到了,tom用户的家目录设置为/tom,现在想把家目录改成/home/tom,命令如下。
[root@RedHat ~]# usermod -d /home/tom tom
[root@RedHat ~]# grep tom /etc/passwd
tom:x:2000:0:Hello Tom:/home/tom:/bin/bash
[root@RedHat ~]#
可以看到,tom用户的家目录已经设置为了/home/tom。在第二个终端测试,输入以下命令。
[bdqn@RedHat ~]$ su - tom
密码:
su: 警告:无法更改到 /home/tom 目录: 没有那个文件或目录
[tom@RedHat bdqn]$
这里显示无法切换到/home/tom。因为创建用户时用户的家目录是创建在/tom下的,但是手动修改tom的家目录为/home/tom,这个家目录并没有在/home下创建,所以才会出现刚才的问题。我们只要把原来的家目录拷贝过去即可,在第一个终端中执行如下命令。
[root@RedHat ~]# cp -a /tom/ /home/
[root@RedHat ~]# ls /home/
bdqn tom
[root@RedHat ~]#
再回到第二个终端中测试,输入如下命令。
[tom@RedHat bdqn]$ exit
注销
[bdqn@RedHat ~]$ su - tom
密码:
[tom@RedHat ~]$ pwd
/home/tom
[tom@RedHat ~]$ exit
注销
[bdqn@RedHat ~]$
可以看到,已经可以切换到家目录了。
4. 管理组
所有组的信息都是放在/etc/group中的,如果要判断一个组是否存在,可以到/etc/group中查询。例如,现在判断bob组是否存在,命令如下。
[root@RedHat ~]# grep bob /etc/group
[root@RedHat ~]#
没有任何输出,说明bob组不存在。如果想创建一个新的组,则用“groupadd 组名”命令。例如,现在要创建bob组,命令如下。
[root@RedHat ~]# groupadd bob
[root@RedHat ~]# grep bob /etc/group
bob:x:1001:
[root@RedHat ~]#
如果要删除某个组,则用“groupdel 组名”命令。例如,现在要删除bob组,命令如下。
[root@RedHat ~]# groupdel bob
[root@RedHat ~]# grep bob /etc/group
[root@RedHat ~]#
创建组时,可以通过-g选项来指定GID信息。例如,创建bob组,组id设置为3000,命令如下。
[root@RedHat ~]# groupadd -g 3000 bob
[root@RedHat ~]# grep bob /etc/group
bob:x:3000:
[root@RedHat ~]#
再次删除bob组。
[root@RedHat ~]# groupdel bob
[root@RedHat ~]#
查看用户属于哪个组的,可以通过“groups 用户”来查看。例如,查看tom属于哪个组,命令如下。
[root@RedHat ~]# groups tom
tom : root users
[root@RedHat ~]#
可以看到,tom属于root和users组。如果想把用户继续添加到其他组中,可以通过“gpasswd -a 户组”来添加。例如,现在要把tom 加入bin组,命令如下。
[root@RedHat ~]# groups tom
tom : root users
[root@RedHat ~]# gpasswd -a tom bin
正在将用户“tom”加入到“bin”组中
[root@RedHat ~]# groups tom
tom : root bin users
[root@RedHat ~]#
可以看到,tom已经属于bin组了。