S_lion's Studio

linux用户与组管理(下篇)

字数统计: 2.8k阅读时长: 10 min
2021/07/31 Share

用户和组管理命令

useradd 和 adduser

adduser是useradd的一个软链接。

1
2
[root@slions_pc1 ~]# ls -l /usr/sbin/adduser
lrwxrwxrwx. 1 root root 7 5月 21 16:45 /usr/sbin/adduser -> useradd

useradd用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
useradd [options] login_name
选项说明:
-b:指定家目录的basedir,默认为/home目录
-d:指定用户家目录,不写时默认为/home/user_name
-m:要创建家目录时,若家目录不存在则自动创建,若不指定该项且/etc/login.defs中的CREATE_HOME未启用时将不会创建家目录
-M:显式指明不要创建家目录,会覆盖/etc/login.defs中的CREATE_HOME设置

-g:指定用户主组,要求组已存在
-G:指定用户的辅助组,多个组以逗号分隔
-N:明确指明不要创建和用户名同名的组名
-U:明确指明要创建一个和用户名同名的组,并将用户加入到此组中

-o:允许创建一个重复UID的用户,只有和-u选项同时使用时才生效
-r:创建一个系统用户。useradd命令不会为此选项的系统用户创建家目录,除非明确使用-m选项
-s:指定用户登录的shell,默认留空。此时将选择/etc/default/useradd中的SHELL变量设置
-u:指定用户uid,默认uid必须唯一,除非使用了-o选项
-c:用户的注释信息

-k:指定骨架目录(skeleton)
-K:修改/etc/login.defs文件中有关于用户的配置项,不能修改组相关的配置。设置方式为KEY=VALUE,如-K UID_MIN=100
-D:修改useradd创建用户时的默认选项,就修改/etc/default/useradd文件
-e:帐户过期时间,格式为"YYYY-MM-DD"
-f:密码过期后,该账号还能存活多久才被禁用,设置为0表示密码过期立即禁用帐户,设置为-1表示禁用此功能
-l:不要将用户的信息写入到lastlog和faillog文件中。默认情况下,用户信息会写入到这两个文件中

useradd -D [options]
修改/etc/default/useradd文件
选项说明:不加任何选项时会列出默认属性
-b, --base-dir BASE_DIR
-e, --expiredate EXPIRE_DATE
-f, --inactive INACTIVE
-g, --gid GROUP
-s, --shell SHELL

useradd创建用户时,默认会自动创建一个和用户名相同的用户组,这是/etc/login.defs中的USERGROUP_ENAB变量控制的。

useradd创建普通用户时,不加任何和家目录相关的选项时,是否创建家目录是由/etc/login.defs中的CREATE_HOME变量控制的。

批量创建用户 newusers

newusers用于批量创建或修改已有用户信息。在创建用户时,它会读取/etc/login.defs文件中的配置项。

1
2
3
4
5
6
7
8
9
[root@slions_pc1 ~]# newusers -h
用法:newusers [选项]

选项:
-c, --crypt-method 方法 加密方法(NONE DES MD5 SHA256 SHA512 中的一个)
-h, --help 显示此帮助信息并推出
-r, --system 创建系统帐号
-R, --root CHROOT_DIR chroot 到的目录
-s, --sha-rounds SHA* 加密算法中的 SHA 旁边的数字

newusers命令从file中或标准输入中读取要创建或修改用户的信息,文件中每行格式都一样(同passwd格式),一行代表一个用户。格式如下:

1
name:passwd:uid:gid:note:homedir:shell

newusers首先尝试创建或修改所有指定的用户,然后将信息写入到user和group的文件中。如果尝试创建或修改用户过程中发生错误,则所有动作都将回滚,但如果在写入过程中发生错误,则写入成功的不会回滚,这将可能导致文件的不一致性。要检查用户、组文件的一致性,可以使用showdow-utils包提供的grpck和pwck命令。

1
2
3
4
5
6
7
8
9
10
11
[root@slions_pc1 ~]# cat batch_adduser
s1:123456:7295:7295::/home/s1:/bin/bash
s2:123456:::::/bin/bash
[root@slions_pc1 ~]# newusers -c SHA512 batch_adduser
[root@slions_pc1 ~]# tail -2 /etc/passwd
s1:x:7295:7295::/home/s1:/bin/bash
s2:x:7296:7296:::/bin/bash
[root@slions_pc1 ~]# tail -2 /etc/shadow
s1:$6$OSCVQmJiFP/U4CbD$72ZkAJNKs4ehMgfxJR..tqNuy7yKHINycOiB/.lW4ANBtuIMuIcsphgw8mcfkR7A1tvhKifG6vmPbc8VjmfmV.:18839:0:99999:7:::
s2:$6$/7nes/BRVe5pw7Gw$qV8.mVjf4Mpv9zVwjsKDSmtmx8qCwZwX03hmsbuFM.CEHJ.X76pX6Css8dvIAE87j7GcihAJN8lSn3Lg.KD.Q.:18839:0:99999:7:::

创建组 groupadd

用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@slions_pc1 ~]# groupadd -h
用法:groupadd [选项] 组

选项:
-f, --force 如果组已经存在则成功退出
并且如果 GID 已经存在则取消 -g
-g, --gid GID 为新组使用 GID
-h, --help 显示此帮助信息并推出
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-o, --non-unique 允许创建有重复 GID 的组
-p, --password PASSWORD 为新组使用此加密过的密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录

修改密码 passwd

修改密码的工具。默认passwd命令不允许为用户创建空密码。

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

批量修改密码 chpasswd

以批处理模式从标准输入中获取提供的用户和密码来修改用户密码,可以一次修改多个用户密码。也就是说不用交互。适用于一次性创建了多个用户时为他们提供密码。

1
2
3
4
5
6
7
8
9
10
[root@slions_pc1 ~]# chpasswd --help
用法:chpasswd [选项]

选项:
-c, --crypt-method 方法 加密方法(NONE DES MD5 SHA256 SHA512 中的一个)
-e, --encrypted 提供的密码已经加密
-h, --help 显示此帮助信息并推出
-m, --md5 使用 MD5 算法加密明文密码
-R, --root CHROOT_DIR chroot 到的目录
-s, --sha-rounds SHA* 加密算法中的 SHA 旁边的数字

chpasswd会读取/etc/login.defs中的相关配置,修改成功后会将密码信息写入到密码文件中。

该命令的修改密码的处理方式是先在内存中修改,如果所有用户的密码都能设置成功,然后才写入到磁盘密码文件中。在内存中修改过程中出错,则所有修改都回滚,但若在写入密码文件过程中出错,则成功的不会回滚。

修改单个用户密码。

1
$ echo "s1:123456" | chpasswd -c SHA512

修改多个用户密码,则提供的每个用户对都要分行。

1
$ echo  -e 's1:123456\ns2:123456' | chpasswd

更方便的是写入到文件中,每行一个用户密码对。

1
2
3
4
5
$ cat /tmp/passwdfile
s1:123456
s2:123456

$ chapasswd -c SHA512 </tmp/passwdfile

chage

chage命令主要修改或查看和密码时间相关的内容。

1
2
-l:列出指定用户密码相关信息
-E:指定帐户(不是密码)过期时间,所以是强锁定,如果指定为0,则立即过期,即直接锁定该用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@slions_pc1 ~]# chage -l s1|column -t
最近一次密码修改时间 :7月 31, 2021
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
[root@slions_pc1 ~]# chage -E 0 s1
[root@slions_pc1 ~]# chage -l s1|column -t
最近一次密码修改时间 :7月 31, 2021
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :1月 01, 1970
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7

删除用户 userdel

1
2
3
userdel [options] login_name
-r:递归删除家目录,默认不删除家目录。
-f:强制删除用户,即使这个用户正处于登录状态。同时也会强制删除家目录。

一般不直接删除家目录,即不用-r,可以vim /etc/passwd,将不需要的用户直接注释掉。

删除组 groupdel

如果要删除的组是某用户的主组,需要先删除主组中的用户。

修改帐户属性信息 usermod

修改帐户属性信息。必须要确保在执行该命令的时候,待修改的用户没有在执行进程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
usermod [options] login
选项说明:
-l:修改用户名,仅仅只是改用户名,其他的一切都不会改动(uid、家目录等)
-u:新的uid,新的uid必须唯一,除非同时使用了-o选项
-g:修改用户主组,可以是以gid或组名。对于那些以旧组为所属组的文件(除原家目录),需要重新手动修改其所属组
-m:移动家目录内容到新的位置,该选项只在和-d选项一起使用时才生效
-d:修改用户的家目录位置,若不存在则自动创建。默认旧的家目录不会删除
如果同时指定了-m选项,则旧的家目录中的内容会移到新家目录
如果当前用户家目录不存在或没有家目录,则也不会创建新的家目录
-o:允许用户使用非唯一的UID
-s:修改用的shell,留空则选择默认shell
-c:修改用户注释信息

-a:将用户以追加的方式加入到辅助组中,只能和-G选项一起使用
-G:将用户加入指定的辅助组中,若此处未列出某组,而此前该用户又是该组成员,则会删除该组中此成员

-L:锁定用户的密码,将在/etc/shadow的密码列加上前缀"!"或"!!"
-U:解锁用户的密码,解锁的方式是移除shadow文件密码列的前缀"!"或"!!"
-e:帐户过期时间,时间格式为"YYYY-MM-DD",如果给一个空的参数,则立即禁用该帐户
-f:密码过期后多少天,帐户才过期被禁用,0表示密码过期帐户立即禁用,-1表示禁用该功能

同样,还有groupmod修改组信息,用法非常简单,几乎也用不上,不多说了。

vipw和vigr

vipw和vigr是编辑用户和组文件的工具,vipw可以修改/etc/passwd和/etc/shadow,vigr可以修改/etc/group和/etc/gshadow,用这两个工具比较安全,在修改的时候会检查文件的一致性。

删除用户出错时,提示用户正在被进程占用。可以使用vi编辑/etc/paswd和/etc/shadow文件将该用户对应的行删除掉。也可以使用vipw和vipw -s来分别编辑/etc/paswd和/etc/shadow文件。它们的作用是一样的。

CATALOG
  1. 1. 用户和组管理命令
    1. 1.1. useradd 和 adduser
    2. 1.2. 批量创建用户 newusers
    3. 1.3. 创建组 groupadd
    4. 1.4. 修改密码 passwd
    5. 1.5. 批量修改密码 chpasswd
    6. 1.6. chage
    7. 1.7. 删除用户 userdel
    8. 1.8. 删除组 groupdel
    9. 1.9. 修改帐户属性信息 usermod
    10. 1.10. vipw和vigr