用户管理
用户与用户组
UID 概述
我们通常通过用户账号(一个字符串)来登录、使用系统,但 Linux 并非是通过用户账号识别用户身份的,而是使用一串名为 UID(User's ID)的数字识别用户身份的。每个用户的 UID 在当前的 Linux 系统中是唯一的。
用户分类
用户类型 | 用户名 | UID | 说明 |
---|---|---|---|
管理员 用户 | root | 0 | 拥有系统的所有权限,且该用户只有一个 |
虚拟 用户 | bin、daemon、ftp、mail、nobody 等 | CentOS: 1-499 | 不具有登录系统的能力,但是不可或缺。一般用于给系统中的程序使用,如:浏览器即为nobody用户;匿名访问 ftp 时会用到 ftp 用户 |
普通 用户 | 用户自定 | CentOS: >=500 | 可以登录系统,系统权限有限 |
用户组与GID概述
用户组就是具有相同特征的用户的一个集合体。一个用户组可拥有多个用户,一个用户亦可从属多个用户组,但每个用户的主用户组只能有一个。主用户组在存储文件时会影响文件的「从属用户组」这个属性。
Linux 使用 GID(Group's ID)识别用户组。在当前操作系统下每个用户组的 GID 同样具有唯一性。
查看用户
查看用户命令
id
:查看用户 UID、GID、归属的用户组
finger
:查看用户家目录、shell 类型、用户备注
一下两者都只能查看指定用户或当前用户,如需查看全部用户可使用 cat /etc/passwd
查看全部用户
id
命令
「使用 1」
id <用户名>
此命令将显示用户的 UID 和用户的主用户组、归属的用户组及 GID。
「使用 2」
id
此命令用户查看当前用户的 ID 相关信息。相比上段命令多显示了一个环境,与 SELinux 有关,详情自行查阅。
finger
命令
「安装」
如果提示未找到命令,则需要进行安装
yum -y install finger
「使用 1」
finger <用户名>
输出举例
以下#
后为我添加的解释
Login: #用户名 Name: #备注
Directory: /home/用户名 # 家目录 Shell: /bin/bash # Shell类型
On since 五 2月 1 12:56 (CST) on :0 from :0 (messages off)
On since 五 2月 1 13:05 (CST) on pts/0 from :0
4 seconds idle
No mail. # 没有新邮件
No Plan. # 没有新计划
「使用 2」
finger
输出:
Login | Name | Tty | Idle | Login Time | Office | Office Phone | Host |
---|---|---|---|---|---|---|---|
登录用户名 | 用户备注 | 登录终端类型 | 空闲时间 | 登录时间 | 登录主机名或者IP地址 |
切换用户
原因
当普通用户需要访问 root 用户创建的文件时,由于我们既不属于 root 用户,也不从属 root 用户组,因此我们对文件来说属于其他用户。一般来说根用户创建的文件其他用户没有任何权限,因此我们需要切换为 root 用户进行文件访问。
在 Linux 中主张使用适当的用户做适当的操作。因此切换用户必不可少。
su
- 切换用户命令(Switch User)
「使用」
su <用户名>
或
su -l <用户名>
-l
表示不仅切换用户的身份,也切换了用户的 Shell 运行环境。可简写为 -
。(推荐)
「示例」
su - root
输入命令后回车,会提示输入密码。
「注意」
- Linux 中输入密码不会出现任何提示!
- 如果从根用户切换到普通用户则不需要输入密码!
创建、修改、删除用户
以下命令需在 root 下使用,否则需要在命令前加上
sudo
。
useradd
- 创建用户
使用 adduser
和 useradd
命令均可,建议使用 useradd
,因为删除和修改用户命令只有 userdel
和 usermod
,使用 adduser
容易混淆。
方法 1:使用 sudo
获取根权限创建
不需要密码即可访问
「创建用户」
sudo useradd <用户名>
「进入用户」
sudo su - <用户名>
注意 sudo
不能丢!
「切换 / 退出用户」
su - <其他用户名>
此处将提示输入密码,使用已知密码的用户进行切换。
「设置密码」
sudo passwd <用户名>
如果是修改当前用户的密码,则不需要在 passwd
后添加用户名。
方法 2:登录根用户创建
「创建用户」
su - root
# 输入根用户密码
useradd <用户名>
不知道根用户密码请参见「修改根用户密码」
「设置密码」
passwd <用户名> #修改指定用户名的密码
注意使用当前命令需有根用户权限。
新建用户的默认属性
属性 | 默认值 |
---|---|
UID | 上一新建用户的 UID + 1,CentOS7的第一个新建用户UID默认是 1000。 |
家目录 | /home/用户名 |
用户备注 | 无 |
主用户组 | 新建的与用户同名的用户组,该组的 GID 默认为上一新建组的 GID + 1。 |
其他从属用户组 | 无 |
Shell 类型 | bash |
由用户指定用户属性
以下参数严格区分大小写
参数 | 作用 |
---|---|
-c (小写) |
指定用户备注 |
-u |
指定用户 UID(确保 UID 未被使用) |
-U |
创建与用户同名的组 |
-d |
指定用户家目录 |
-g |
指定主用户组(确保该组已存在) |
-G |
指定除主用户组外的从属组 |
-s (小写) |
指定用户的登录 Shell |
其他命令请在根用户下输入 adduser --help
,以参阅帮助。
「示例」
adduser -c 测试用户 -u 499 -d /tmp/test01 -g test01 -G test02,test03 -s /bin/tcsh testuser
id testuser #查看主用户组和从属用户组
finger testuser #查看用户其他详细信息
usermod
- 修改用户(User Modify)
该命令需在 root 下使用,否则需要在命令前加入
sudo
。
「参数」
参数 | 作用 |
---|---|
-l |
修改用户名(修改的用户不能为当前登录用户) |
-G |
替换除主用户组外其他从属组 |
-aG |
向从属组添加组 |
-m |
将家目录内容移至新位置 (仅于 -d 一起使用) |
-L/-U |
锁定/解锁用户账号 |
-c/-u/-g/-d/-s |
修改备注/UID/主用户组/家目录/登录Shell |
「示例」
usermod -l test -g testuser -G testuser testuser
id test
finger test
这一命令将用户名修改为了 test ,用户组修改为了 testuser,且没有其他从属组。
usermod -l testuser -aG test01,test02,test03 test
id testuser
finger testuser
这一命令将用户名改回为 testuser,从属用户组除 testuser 增加了 test01, test02, test03。
「注意」:经测试仅存在 usermod
命令,但不存在 moduser
命令!
userdel
- 删除用户(User Delete)
该命令需在 root 下使用,否则需要在命令前加入
sudo
。
「使用」
userdel <用户名> #需要手动删除家目录
或
userdel -r <用户名> #删除用户的同时删除家目录和邮件池
删除用户不能为当前登录用户!
「注意」经测试仅存在 userdel
命令,不存在 deluser
命令!
创建、修改、删除用户组
以下命令需在 root 下使用,否则需要在命令前加入
sudo
。经测试仅存在
groupadd
groupmod
groupdel
命令,不存在addgroup
modgroup
delgroup
命令!
groupadd
- 创建用户组
「选项」
-g
指定用户组的 GID
「示例」
groupadd testgroup
usermod -aG testgroup test01
id test01
Linux 没有专门查看用户组的命令,需手动将用户添加到用户组进行查看。
groupmod
- 修改用户组
「选项」
选项 | 作用 |
---|---|
-g |
修改 GID |
-n |
修改组名 |
「示例」
groupmod -g 888 -n testgroup01 testgroup
usermod -aG testgroup01 test01
id test01
「注意」:不建议修改用户组的 GID,否则容易造成系统混乱。
groupdel
- 删除用户组
「示例」
groupdel testgroup01
groupdel testgroup
「注意」:只要有一个用户的主用户组为该用户组,则不可删除。且 groupdel 一次只能删除一个组。
用户权限
让渡根用户权限
本段修改自实验楼的 Linux 教程
获取 root 权限的方法
sudo 命令可以让用户无需根用户密码也能拥有部分根用户权限。
默认情况下新创建的用户是不具有 root 权限的,也不具有使用 sudo 的权限,我们可以通过让其「加入 wheel 用户组」从而获取 root 权限;也可以通过「修改 sudoers 文件」将用户添加 sudoers 中,获取 root 权限。
加入 wheel 用户组
默认情况下使用新建用户执行以下命令
# 注意 Linux 上输入密码是不会显示的
$ su - <新建的用户名>
$ sudo ls -al
会提示该用户不在 sudoers 文件中。
因此需要用默认用户执行 sudo 命令将新建用户(如前文创建的 test01)添加到 wheel 用户组:
$ su - <用户名> # 此处可使用登录用户(或者说默认用户)的用户名
$ groups <新建的用户名> # 查看新建用户所属的组。
$ sudo usermod -aG wheel <新建的用户名>
$ groups <新建的用户名>
进入新用户(这里为 test01 用户),使用 sudo ls -al
列出当前目录文件,表示获取 root 权限成功。
$ su - test01
$ sudo ls -al
修改 sudoers 文件
sudoers 文件位于 /etc/sudoers
。我们可以通过修改 sudoers 文件获取 root 权限。此文件只有 root 用户可以修改。
1)在 root 下执行以下命令
vim /etc/sudoers
2)找到
root ALL=(ALL) ALL
字样(CentOS7:第100行)
root | ALL | = | (ALL) | ALL |
---|---|---|---|---|
可使用sudo 命令的用户名 |
登录用户的来源主机名 | = | 可让渡权限的用户列表 | 用户可使用的命令列表 |
本段代码意为:root 用户可以在任何地方登录,以任意用户身份执行任何命令。
如果第一个字段为 %
打头的字符串,则表示该字段为可使用 sudo
的用户组。如,%wheel
。
3)按用户名获取权限
在上文所述代码下添加内容
test01 localpc=(root) /sbin/shutdown -h 5
本行命令意为:允许 test01 从 localpc 主机登录(假定 localpc 为本机名),使用 /sbin/shutdown -h 5
这个命令(命令需要以绝对路径方式指定)。
4)免去输入密码的步骤
在命令字段头部添加 NOPASSWD:
test01 localpc=(root) NOPASSWD:/sbin/shutdown -h 5
5)按用户组获取权限
%testgroup localpc=(root) /sbin/shutdown -h 5
6)使用
x!
强制保存并退出
Linux 获取 Root 权限的方法
部分摘自:https://blog.csdn.net/itkingone/article/details/78689828
专业名词
sudoer:可以使用 sudo 的用户称为 sudoer。
临时获取 root 权限
非永久性获取Root权限可以在我们要键入的命令之前加上 sudo
前缀。
如我们要键入的命令是:rm
,以Root用户执行的方式就是:sudo rm
永久获取 root 权限
【1° 通过 sudoer 用户升级权限】
Sudoer 用户. 如:本地用户(默认登录用户)、根用户 ↩
$ sudo su
回车后输入普通用户的密码
【2° 直接通过根用户获取权限】
$ su root
root 为根权限用户名,回车后输入根用户密码获取根用户权限。
再次使用 su 普通用户名
可回到普通用户。
↓↓↓[修改根用户密码]↓↓↓
【3° 通过修改根用户密码获取权限】
$ sudo passwd
输入 sudoer 密码后会要求输入根用户密码,回车进行确认密码。可通过 ctrl + c
结束命令/操作。
用户管理配置文件
分类
- 用户相关配置数据
/etc/passwd
/etc/shadow
- 用户组相关配置数据
/etc/group
/etc/gshadow
/etc/passwd
系统用户花名册
系统所有用户均在此被记载,不在此花名册就不是该系统用户。
「打开」(任意用户可读)
vim /etc/passwd
「解释」(passwd 共 7 个字段,每个字段之间用 :
隔开)
test01:x:1001:1001::/home/test01:/bin/bash
字段 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
示例 | test01 | x | 1001 | 1001 | /home/test01 | /bin/bash | |
解释 | 用户名 | 密码 | UID | 主用户组GID | 对用户的描述(可选) | 家目录 | 用户 Shell 名 |
显示密码为X
,但实际的密码放在 /etc/shadow
中
/etc/shadow
系统用户密码本
「系统用户花名册」和「系统用户密码本」的分离原因
因为 /etc/passwd
是任意用户可读的,为保证密码安全,因此将两个文件分离。
「打开」(仅根用户可打开)
vim /etc/shadow
「解释」(shadow 共 9 个字段,每个字段之间用 :
隔开)
test01:$6$qkTHgdZ9$H8r7PZyUNesmo1YBTuRF9b3cuufVpkCU7s7DrqhBYvxSNugmkp76GXJWM8i0K31gIIj9VpbZk8pFOXRY/yYhx/:17928:0:99999:7:::
字段 | 示例 | 说明 |
---|---|---|
1 | test01 | 用户名 |
2 | $6..x/ |
加密的密码。该字段如果是* 或 !! 表示不能作为普通用户正常登录系统。 |
3 | 17928 | 密码最后修改时间。该值为 1970-01-01 起到最后一次密码修改的天数 |
4 | 0 | 密码修改最小时间间隔。默认是 0 ,表示随时可以改动。 |
5 | 99999 | 密码最长有效天数。默认 99999 天,约为 273 年。 |
6 | 7 | 密码失效警告天数。默认是 7 ,表示不启用该功能。 |
7 | 密码最长失效天数。默认为空,表示不启用该功能。如开启后超时会禁用该用户。 | |
8 | 用户账号失效日期。默认为空,表示此用户永久可用。填写相对 1970-01-01 起的绝对天数,超过使用天数,该用户将会被禁用。 | |
9 | 保留字段。默认值为空。 |
理论上可以通过修改 /etc/passwd
和 /etc/shadow
修改用户属性(但不建议)。
/etc/group
系统用户组花名册
「打开」(任意用户可读)
vim /etc/group
「解释」(group 共 4 个字段,每个字段之间用 :
隔开)
test01:x:1001:test03
字段 | 示例 | 说明 |
---|---|---|
1 | test01 | 用户组名 |
2 | x | 用户组密码 |
3 | 1001 | 用户组 GID |
4 | test03 | 从属该用户组的用户列表,每个用户之间用逗号隔开 |
关于第4字段:如果该用户组是某个用户的主用户组,则该用户不显示在该字段中。
/etc/gshadow
系统用户组密码本
「打开」(仅根用户可打开)
vim /etc/gshadow
「解释」(gshadow 共 9 个字段,每个字段之间用 :
隔开)
test01:!::test03
字段 | 示例 | 说明 |
---|---|---|
1 | test01 | 用户组名 |
2 | ! | 用户组加密的密码。! 或空表示无密码。 |
3 | 组管理者。多个组管理者之间用逗号隔开 | |
4 | test03 | 从属该用户组的用户列表,每个用户之间用逗号隔开 |