RHEL8--- 用户管理

本章主要介绍Linux系统中的用户管理。

  • 基本概念的理解
  • 创建及删除用户
  • 修改用户属性
  • 修改密码策略
  • 通过sudo对用户进行授权

基本概念

  用户在操作系统中是非常重要的,我们登录系统、访问共享文件夹等都需要用户进行验 证。所以,掌握管理用户的知识是非常有必要的。 

说到用户,我们会提到两个名词:账户信息和密码信息。

  • 账户信息:以QQ为例,可以理解为QQ号码、QQ签名、QQ中填写的个人资料等。
  • 密码信息:以QQ为例,就是登录QQ的密码。

用户的账户信息是存储在/etc/passwd中的,在此文件中一行一个用户信息,各字段 用“:”隔开,如下图所示。

c58139efd1b349088bd5bcd532b44b6a.png 

用户账户信息结构 

  1. 用户名。
  2. 原来此处用于存储用户的密码,因为安全性问题,这里统一用x作为占位符。
  3. 用户的uid,每个用户都会有一个 user id,简称为uid。root的uid为0。
  4. 用户的gid,每个组也都会有一个 group id,简称为 gid。
  5. 用户的描述信息。
  6. 用户的家目录。
  7. 用户的shell。

 上面的命令也可以通过“getent passwd 用户名”来获取,如下所示。 

[root@rhel03 ~]# getent passwd blab
blab:x:1003:1003::/home/blab:/bin/bash

用户的密码信息存储在/etc/shadow中,如下所示。

[root@rhel03 ~]# grep blab /etc/shadow
blab:$6$y3Dvw9W.E6gv3LRP$QW0g9ELlIj23W00KqCgOYlqX40iX4iRulHEXDB0omFZHbSG7tjYaL3ODCoiqw7OcfAn4A4WN/ogDKz0FL9.qr0:19692:0:99999:7:::

  上面第一个和第二个冒号之间的斜体字就是被加密后的密码。上面的信息也可以通 过"“getent shadow用户名”来获取,如下所示。 

[root@rhel03 ~]# getent shadow blab
blab:$6$y3Dvw9W.E6gv3LRP$QW0g9ELlIj23W00KqCgOYlqX40iX4iRulHEXDB0omFZHbSG7tjYaL3ODCoiqw7OcfAn4A4WN/ogDKz0FL9.qr0:19692:0:99999:7:::

判断一个用户是否存在,可以使用“id 用户名”命令,如下所示。

[root@rhel03 ~]# id tab
id: “tab”:无此用户

这里tom用户不存在,则显示无此用户。如果用户存在,则显示用户信息,如下所示。

[root@rhel03 ~]# id blab
uid=1003(blab) gid=1003(blab) 组=1003(blab)
  1. 显示用户的uid信息。
  2. 显示用户的gid信息。
  3. 显示用户的gid信息。

如果id后面没有跟用户,则显示当前用户自己的信息。

[root@rhel03 ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

管理用户 

管理用户包括创建用户和修改用户属性。 

1、创建用户 

利用useradd命令可以创建用户,useradd中常见的选项包括8种。

  • -d:指定用户的家目录,默认为/home/用户名。
  • -m:创建家目录,这是默认选项,一般不用指定。
  • -M:不为用户创建家目录,即创建好用户之后没有“/home/用户名”。
  • -s:指定用户的shell,默认为/bin/bash。
  • -c:用来指定备注信息,不指定则为空。
  • -u:指定用户的uid。
  • -g:默认情况下,创建用户时会创建一个同名组。例如,创建tom用户,则会创建一 个tom组,然后把 tom用户加人 tom组中。如果指定了-g root,则创建用户时直接把tom 加入root组,就不会再创建tom组,此时 tom只属于一个组。
  • -G:指定附属组,即把用户加人一个额外的组,此时 tom属于两个组。 如果同时指定-g和-G选项,如-g root-G users,这里的意思是不再为tom创建命名组,直接 加入root组,同时再额外地加入users组,此时tom 就属于两个组,即root和users组。

下面创建tom用户,如下所示。

[root@rhel03 ~]# useradd -d /tom -s /sbin/nologin \
> -c "Im tom" -u 2000 -g root -G users tom

  这里创建一个tom用户,因为命令太长,所以最后加一个反斜线后按【Enter】键,这里 虽然换行了,但是系统会认为仍然是一行的。 

  记住,反斜线后面不能有空格,按【Enter】键之后前面会自动出现一个提示符“>”, 这个“>”不是我们输入的。

现在查看tom用户的属性,如下所示。

[root@rhel03 ~]# grep tom /etc/passwd
tom:x:2000:0:Im tom:/tom:/sbin/nologin

可以看到,这里tom用户的属性完全是按照我们的要求创建出来的。

查看密码信息,如下所示。 

[root@rhel03 ~]# grep tom /etc/shadow
tom:!!:19692:0:99999:7:::

  因为我们在创建用户时,并没有指定用户的密码,所以这里密码为空。当我们创建用户时, 没有给这个用户设置密码,则这个用户是处于被锁定状态,即不能登录,如下所示。

[root@rhel03 ~]# passwd -S tom
tom LK 2023-12-01 0 99999 7 -1 (密码已被锁定。)

现在为 tom用户设置密码,可以使用如下命令。

[root@rhel03 ~]# passwd tom
更改用户 tom 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 它基于一个字典中的词
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

或者使用如下命令,这里把密码设置为cisco@123。

[root@rhel03 ~]# echo cisco@123 | passwd --stdin tom
更改用户 tom 的密码 。
passwd:所有的身份验证令牌已经成功更新。

再次查看用户的状态,如下所示。

[root@rhel03 ~]# passwd -S tom
tom PS 2023-12-01 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

这里显示了用户已经设置了密码。查看密码信息,如下所示。

[root@rhel03 ~]# grep tom /etc/shadow
tom:$6$FSkfR1D210j2RuzZ$bcoWEyilqCyFxvuqnCncwJctsa20KzN90B61n1FV8Es5Ik5LKLGwK0gDsU558ustx5Mw12ms46../A856a.t4.:19692:0:99999:7:::

这里已经有了密码。

但是现在用户仍然是不能登录的,所以用su命令切换到tom用户。

[root@rhel03 ~]# su - tom
This account is currently not available.

  这是因为tom用户的shell被设置为了/sbin/nologin,任何用户的shell 被设置 为/sbin/nologin,则此用户是不能登录系统的。那么,创建此用户的意义何在?很多时候我 们搭建了服务,如用samba共享了一个目录,希望其他主机来访问此共享目录时不能以匿名 用户访问,必须输入相关的用户名和密码,但又不想让他能登录系统,这种情况下就可以用到了。

2、修改用户属性 

  如果想修改用户属性,可以使用usermod命令。usermod命令所能用到的选项与 useradd是差不多的,下面讲最常见的5个选项。 

  • -c:修改注释信息。
  • -s:修改shell信息。
  • -d:修改家目录。
  • -L:锁定用户。
  • -U:解锁用户。

把tom的shell改成/bin/bash,并把备注信息改成hello tom,如下所示。

[root@rhel03 ~]# usermod -s /bin/bash -c "hello Tom" tom
[root@rhel03 ~]# grep tom /etc/passwd
tom:x:2000:0:hello Tom:/tom:/bin/bash

(1)锁定用户

[root@rhel03 ~]# usermod -L tom
[root@rhel03 ~]# passwd -S tom
tom LK 2023-12-01 0 99999 7 -1 (密码已被锁定。)

  锁定用户,使用root用户是可以用su命令切换过去的,但是使用其他用户是不能用su命 令切换过去的,如下所示。 

[root@rhel03 ~]# su - tom
[tom@rhel03 ~]$ exit
注销
[root@rhel03 ~]# 

再打开一个终端,这个终端中是以bdqn用户登录的,然后通过su命令切换到tom用户, 如下所示。

[bdqn@rhel03 ~]$ su - tom
密码:
su: 鉴定故障
[bdqn@rhel03 ~]$ 

可以看到,bdqn用户不能用su命令切换过去,提示为鉴定故障。 

(2)解锁用户

如果要解锁用户,可以使用usermod -U命令。下面把 tom用户解锁

[root@rhel03 ~]# usermod -U tom
[root@rhel03 ~]# passwd -S tom
tom PS 2023-12-01 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

在第二个终端中bdqn用户用 su 命令切换到 tom 用户 

[bdqn@rhel03 ~]$ su - tom
密码:
[tom@rhel03 ~]$ whoami
tom
[tom@rhel03 ~]$ pwd
/tom
[tom@rhel03 ~]$ exit
注销
[bdqn@rhel03 ~]$ 

此时其他用户是可以正常切换的。

(3)修改用户的家目录 

前面已经看到了, tom用户的家目录设置为/tom,现在想把家目录改成/home/tom,命令如下.

[root@rhel03 ~]# usermod -d /home/tom tom
[root@rhel03 ~]# grep tom /etc/passwd
tom:x:2000:0:hello Tom:/home/tom:/bin/bash

可以看到,tom用户的家目录已经设置为了/home/tom。在第二个终端中测试,输入如下命令。

[bdqn@rhel03 ~]$ su - tom
密码:
su: 警告:无法更改到 /home/tom 目录: 没有那个文件或目录

  这里显示无法切换到/home/tom。因为创建用户时用户的家目录是创建在/tom下的,但 是手动修改tom的家目录为/home/tom,这个家目录并没有在/home下创建,所以才会出 现刚才的问题。我们只要把原来的家目录拷贝过去即可,在第一个终端中执行如下命令。 

[root@rhel03 ~]# cp -a /tom/ /home/
[root@rhel03 ~]# ls /home/
aa  bdqn  blab  tom

再回到第二个终端中测试,输入如下命令

[bdqn@rhel03 ~]$ su - tom 
密码:
[tom@rhel03 ~]$ pwd
/home/tom
[tom@rhel03 ~]$ exit
注销
[bdqn@rhel03 ~]$ 

可以看到,已经可以切换到家目录了。

(4)管理组

  所有组的信息都是放在/etc/group中的,如果要判断一个组是否存在,可以 到/etc/group中查询。例如,现在判断bob组是否存在,命令如下。 

[root@rhel03 ~]# grep bob /etc/group
[root@rhel03 ~]# 

  没有任何输出,说明bob组不存在。如果想创建一个新的组,则用“groupadd 组名”命 令。例如,现在要创建bob组,命令如下。

[root@rhel03 ~]# groupadd bob 
[root@rhel03 ~]# grep bob /etc/group
bob:x:1004:
[root@rhel03 ~]# 

如果要删除某个组,则用“groupdel组名”命令。例如,现在要删除bob组,命令如 下。

[root@rhel03 ~]# groupdel bob
[root@rhel03 ~]# grep bob /etc/group
[root@rhel03 ~]# 

创建组时,可以通过-g选项来指定gid信息。例如,创建bob组,组id设置为3000,命令如下。

[root@rhel03 ~]# groupadd -g 3000 bob
[root@rhel03 ~]# grep bob /etc/group
bob:x:3000:

再次删除 bob 组。

查看用户属于哪个组的,可以通过“groups用户”来查看。例如,查看tom属于哪个组,命令如下。

[root@rhel03 ~]# groups tom
tom : root users

  可以看到,tom属于root和users 组。如果想把用户继续添加到其他组中,可以通 过“gpasswd -a用户组”来添加。例如,现在要把tom 加入bin组,命令如下。

[root@rhel03 ~]# gpasswd -a tom bin
正在将用户“tom”加入到“bin”组中
[root@rhel03 ~]# groups tom
tom : root bin users
[root@rhel03 ~]# 

可以看到,tom已经属于bin组了。

  要是想把用户从某个组中踢出去,则通过“gpasswd -d用户组”来删除。例如,现在要 把 tom从 bin组中删除,命令如下。 

[root@rhel03 ~]# gpasswd -d tom bin
正在将用户“tom”从“bin”组中删除
[root@rhel03 ~]# groups tom
tom : root users

可以看到,tom已经不属于bin组了。

用户的密码策略 

  很多人是没有修改密码的习惯的,设置了一个密码就一直使用下去,这样会带来一定的安 全隐患。所以,为了提高安全性,需要设置一定的密码策略,使用的命令是chage。 

chage常见的选项包括以下几个。

  • -l:列出用户的信息。
[root@rhel03 ~]# chage -l tom
最近一次密码修改时间					:12月 01, 2023
密码过期时间					:从不
密码失效时间					:从不
帐户过期时间						:从不
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:99999
在密码过期之前警告的天数	:7

 可以看到,tom的密码是在2023年12月1日修改的。

  • -d:用于更改最近一次修改密码的日期,如改成2023年12月2日。
[root@rhel03 ~]# chage -d 2023-12-02 tom
[root@rhel03 ~]# chage -l tom
最近一次密码修改时间					:12月 02, 2023
密码过期时间					:从不
密码失效时间					:从不
帐户过期时间						:从不
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:99999
在密码过期之前警告的天数	:7
  • -E:设置此账户什么时候过期,如要设置2023年12月10日过期。 
[root@rhel03 ~]# chage -E 2023-12-10 tom
[root@rhel03 ~]# chage -l tom
最近一次密码修改时间					:12月 02, 2023
密码过期时间					:从不
密码失效时间					:从不
帐户过期时间						:12月 10, 2023
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:99999
在密码过期之前警告的天数	:7

那么,tom用户到了2023年12月10日就会被锁定,不能登录系统了。 

  • -E -1:设置为永不过期。
[root@rhel03 ~]# chage -E -1 tom
[root@rhel03 ~]# chage -l tom
最近一次密码修改时间					:12月 02, 2023
密码过期时间					:从不
密码失效时间					:从不
帐户过期时间						:从不
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:99999
在密码过期之前警告的天数	:7
  • -E 1:设置为立即过期。
  • -M:最大使用天数,过了这个天数还没有修改密码,账户将被锁定。
  • -m:最小使用天数,两次修改密码的间隔不得低于这个天数,不能今天改了明天再改回去。
  • -W:达到最大使用天数之前,提前几天警告。如同房贷,提前一周短信通知用户银 行卡余额要足够。
  •  -I:达到最大使用天数之后还没有修改密码,不会立即锁定账户,而是会给几天的缓 冲期,但是在缓冲期内不管何时登录系统,都会强迫你修改密码。如果在缓冲期内也没有修 改密码,则会锁定账户。
[root@rhel03 ~]# chage -m 5 -M 30 -W 6 -I 3 tom
[root@rhel03 ~]# chage -l tom
最近一次密码修改时间					:12月 02, 2023
密码过期时间					:1月 01, 2024
密码失效时间					:1月 04, 2024
帐户过期时间						:从不
两次改变密码之间相距的最小天数		:5
两次改变密码之间相距的最大天数		:30
在密码过期之前警告的天数	:6

   这里把最小使用天数设置为5天,最大使用天数设置为30天,警告天数设置为6天,缓冲期设置为3天。

上面关于账户的锁定及密码的过期时间,也可以使用passwd结合来实现,如下所示。

[root@rhel03 ~]# passwd --help
用法: passwd [选项...] <帐号名称>
  -k, --keep-tokens       保持身份验证令牌不过期
  -d, --delete            删除命名帐户的密码(仅限 root 用户);也删除密码锁(如果有)
  -l, --lock              锁定指名帐户的密码(仅限 root 用户)
  -u, --unlock            解锁指名帐户的密码(仅限 root 用户)
  -e, --expire            终止指名帐户的密码(仅限 root 用户)
  -f, --force             强制执行操作
  -x, --maximum=DAYS      密码的最长有效时限(只有 root 用户才能进行此操作)
  -n, --minimum=DAYS      密码的最短有效时限(只有 root 用户才能进行此操作)
  -w, --warning=DAYS      在密码过期前多少天开始提醒用户(只有 root 用户才能进行此操作)
  -i, --inactive=DAYS     当密码过期后经过多少天该帐号会被禁用(只有 root 用户才能进行此操作)
  -S, --status            报告已命名帐号的密码状态(只有 root 用户才能进行此操作)
      --stdin             从标准输入读取令牌(只有 root 用户才能进行此操作)

帮助选项:
  -?, --help              显示这个帮助信息
      --usage             显示简短的使用说明

具体操作,同学们可以自行练习 

这里需要注意的是,如果想清除某用户的密码,可以使用“passwd -d 用户名”命令来 实现,命令如下。

[root@rhel03 ~]# passwd -d tom
清除用户的密码 tom。
passwd: 操作成功
[root@rhel03 ~]# passwd -S tom
tom NP 2023-12-01 5 30 6 3 (密码为空。)

tom 再登录系统时,是不需要密码。

[tom@rhel03 ~]$ su - tom
[tom@rhel03 ~]$ exit
注销
[tom@rhel03 ~]$ 

删除用户的命令是userdel。

[root@rhel03 ~]# userdel -r tom
[root@rhel03 ~]# ls /home/
aa  bdqn  blab
[root@rhel03 ~]# id tom
id: “tom”:无此用户

userdel后面加上r选项的意思是除删除此用户外,还把用户的家目录、邮件等全部删除。

用户授权 

前面讲了普通用户很多时候权限是不够的,例如,下面的命令。

[bdqn@rhel03 ~]$ mount /dev/cdrom /mnt/
mount: 只有 root 能执行该操作

  要执行该操作,需要使用su命令切换到root。但是并不希望其他人知道root密码,那怎么办?我们可以让root用户通过 sudo对普通用户进行授权。 

首先查看本机的主机名,命令如下。

[root@rhel03 ~]# hostname
rhel03

  到/etc/sudoers.d下随便创建一个文件,建议使用用户名作为文件名(不过文件名可以随 便取),这样比较方便看出来是对哪个用户授权的。假设现在对bdqn用户授权,则创建文 件/etc/sudoers.d/bdqn,文件中的格式如下。 

  • userX ALL=(userY) 命令1,命令2,命令3,...

假设现在授权bdqn用户在本机能以root身份使用mount命令,编辑内容如下。 

[root@rhel03 ~]# vim /etc/sudoers.d/bdqn
bdqn rhel03=(root) /bin/mount

用户要是想执行sudo授权过的命令,则命令前面要加上 sudo。

在另外一个终端中执行mount命令,命令如下。

[bdqn@rhel03 ~]$ sudo mount /dev/cdrom /mnt/

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] bdqn 的密码:
mount: /mnt: WARNING: device write-protected, mounted read-only.
[bdqn@rhel03 ~]$ 

  可以看到,已经可以执行了,这里输入的密码会保留5分钟,5分钟之内再次执行sudo是 不需要密码的,过了5分钟再执行sudo命令则还需要输入密码。可以使用sudo -k命令立即 清除记忆的密码。 

下面执行umount命令,命令如下。

[bdqn@rhel03 ~]$ sudo umount /mnt
对不起,用户 bdqn 无权以 root 的身份在 rhel03 上执行 /bin/umount /mnt。

  还是不行,为何?因为我们只授权lduan执行 mount命令、并没有授权执行umount 命 令。下面使用root授权 blab 能执行umount命令,修改/etc/sudoers.d/blab的内容如下 

[root@rhel03 ~]# cat /etc/sudoers.d/bdqn 
bdqn rhel03=(root) /bin/mount,/bin/umount

此时已经对 blab 授权mount和 umount 命令,然后到第二个终端中再次执行如下命令

[bdqn@rhel03 ~]$ sudo  umount /mnt
[bdqn@rhel03 ~]$ 

已经可以正常执行了。

查看bdqn被授权执行哪些命令,可以通过sudo -l来查看,命令如下。 

[bdqn@rhel03 ~]$ sudo -l
匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME
    HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
    LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

用户 bdqn 可以在 rhel03 上运行以下命令:
    (root) /bin/mount, /bin/umount

  前面介绍了sudo命令需要输人密码,这个密码会保留5分钟,如果想修改此默认时间, 可以通过vim修改letc/sudoers,添加 Defaults timestamp_timeout=N,此处N为一个数 字,单位为分钟。如果想立即清除保存的密码,使用sudo -k即可。 

  如果想让bdqn执行授权命令时不需要输入密码,则可以加上NOPASSWD,修 改/etc/sudoers.d/bdqn的内容如下。

[root@rhel03 ~]# cat /etc/sudoers.d/bdqn 
bdqn rhel03=(root) NOPASSWD: /bin/mount,/bin/umount

在另外一个终端中验证,命令如下。

[bdqn@rhel03 ~]$ sudo -k
[bdqn@rhel03 ~]$ sudo mount /dev/cdrom /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.
[bdqn@rhel03 ~]$ sudo -k
[bdqn@rhel03 ~]$ sudo umount /mnt 
[bdqn@rhel03 ~]$ 

  此时并没有输人密码,这里特意执行 sudo -k命令的目的就是确保没有缓存密码。 如果想授权所有命令给bdqn,则可以在命令位置上用ALL替代,命令如下。 

[root@rhel03 ~]# cat /etc/sudoers.d/bdqn 
bdqn rhel03=(root) NOPASSWD: ALL

此时bdqn用户通过sudo -i无密码切换到root用户,命令如下。 

[bdqn@rhel03 ~]$ sudo -i
[root@rhel03 ~]# pwd
/root
[root@rhel03 ~]# whoami
root
[root@rhel03 ~]# exit
注销
[bdqn@rhel03 ~]$ 

在编辑/etc/sudoers.d/bdqn时,为了防止主机名写错,可以在主机名的位置写ALL,命令如下。

[root@rhel03 ~]# cat /etc/sudoers.d/bdqn 
bdqn ALL=(root) NOPASSWD: ALL

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值