用户和组管理命令
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文件。它们的作用是一样的。