用户管理

用户与用户组

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 - 创建用户

使用 adduseruseradd 命令均可,建议使用 useradd,因为删除和修改用户命令只有 userdelusermod,使用 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 从属该用户组的用户列表,每个用户之间用逗号隔开

results matching ""

    No results matching ""