一、基本配置
(一)用户管理命令汇总
命令 | 说明 |
useradd | 在系统中添加用户,同adduser命令 |
userdel | 删除用户以及相关的配置或文件 |
passwd | 可为用户设置密码 |
change | 修改用户密码有效期 |
usermod | 修改登录名、用户家目录等信息 |
id | 查看用户的uid、gid及其所归属的用户组 |
su | 进行用户切换 |
sudo | 用于提权,su是切换用户完成相应的用户,sudo不需要切换就可以执行root才能执行的权限,该权限的配置通过visudo或者直接编辑/etc/sudoers文件实现 |
visudo | 配置sudo权限的编辑命令 |
pwcov | 同步用户从/etc/passwd到/etc/shadow |
pwck | 校验用户配置文件/etc/passwd和/etc/shadow文件内容是否合法或者完整 |
pwuncov | 是pwcov的逆向操作,从/etc/passwd和/etc/shadow创建/etc/passwd,然后删除/etc/shadow文件 |
chfn | 更改用户信息工具 |
chsh | 更改用户登录shell工具 |
sudoedit | 类似sudo功能 |
(二)用户管理组命令汇总
命令 | 说明 |
groupadd | 添加用户组 |
groupdel | 删除用户组 |
groupmod | 修改用户组信息 |
gpasswd | 为用户组设置密码 |
groups | 显示用户所属的用户组 |
newgrp | 更改用户所属的有效用户组 |
(三)配置目录文件介绍
1、/etc/skel目录
/etc/skel/目录是用来存放新用户配置文件的目录,当添加用户时,这个目录下的所有文件会自动被复制到新添加用户的家目录I下,默认情况,/etc.skel目录下的所有文件都是隐藏文件(以.开头的文件),通过修改、添加、删除等/etc/skel目录下文件,可以为新创建用户提供统一的用户环境。
[root@localhost ~]# ls /etc/skel/ -al total 24 drwxr-xr-x. 2 root root 62 Oct 1 14:27 . drwxr-xr-x. 79 root root 8192 Dec 24 23:03 .. -rw-r--r--. 1 root root 18 Aug 3 2016 .bash_logout -rw-r--r--. 1 root root 193 Aug 3 2016 .bash_profile -rw-r--r--. 1 root root 231 Aug 3 2016 .bashrc
当使用useradd或者adduser时会自动将/etc/skel下的文件复制到家目录下:
[root@localhost xiaoming]# ls -al total 12 drwx------ 2 xiaoming xiaoming 62 Dec 24 23:11 . drwxr-xr-x. 7 root root 74 Dec 24 23:11 .. -rw-r--r-- 1 xiaoming xiaoming 18 Aug 3 2016 .bash_logout -rw-r--r-- 1 xiaoming xiaoming 193 Aug 3 2016 .bash_profile -rw-r--r-- 1 xiaoming xiaoming 231 Aug 3 2016 .bashrc
2、/etc/login.defs配置文件
用来定义创建用户时需要的一些用户配置信息。如是否需要家目录、UID和GID的范围、用户及密码的有效期等。下面是该文件的详细信息:
[root@localhost ~]# cat /etc/login.defs # # Please note that the parameters in this configuration file control the # behavior of the tools from the shadow-utils component. None of these # tools uses the PAM mechanism, and the utilities that use PAM (such as the # passwd command) should therefore be configured elsewhere. Refer to # /etc/pam.d/system-auth for more information. # # *REQUIRED* # Directory where mailboxes reside, _or_ name of file, relative to the # home directory. If you _do_ define both, MAIL_DIR takes precedence. # QMAIL_DIR is for Qmail # #QMAIL_DIR Maildir MAIL_DIR /var/spool/mail #创建用户是否在 /var/spool/mail目录下创建一个mail文件 #MAIL_FILE .mail # Password aging controls: # # PASS_MAX_DAYS Maximum number of days a password may be used. # PASS_MIN_DAYS Minimum number of days allowed between password changes. # PASS_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. # PASS_MAX_DAYS 99999 #密码的有效期 PASS_MIN_DAYS 0 #更改密码的最小天数 PASS_MIN_LEN 5 #密码的最小长度 PASS_WARN_AGE 7 #密码失效前多少天提醒 # # Min/max values for automatic uid selection in useradd # UID_MIN 1000 UID_MAX 60000 # System accounts SYS_UID_MIN 201 SYS_UID_MAX 999 # # Min/max values for automatic gid selection in groupadd # GID_MIN 1000 GID_MAX 60000 # System accounts SYS_GID_MIN 201 SYS_GID_MAX 999 # # If defined, this command is run when removing a user. # It should remove any at/cron/print jobs etc. owned by # the user to be removed (passed as the first argument). # #USERDEL_CMD /usr/sbin/userdel_local # # If useradd should create home directories for users by default # On RH systems, we do. This option is overridden with the -m flag on # useradd command line. # CREATE_HOME yes #是否创建家目录 # The permission mask is initialized to this value. If not specified, # the permission mask will be initialized to 022. UMASK 077 # This enables userdel to remove user groups if no members exist. # USERGROUPS_ENAB yes # Use SHA512 to encrypt password. ENCRYPT_METHOD SHA512
3、/etc/default/useradd配置文件
该配置文件是在使用useradd添加用户时默认调用的配置文件,该文件的内容如下:
[root@localhost ~]# cat /etc/default/useradd # useradd defaults file GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
规定了创建用户时的一些默认配置。假设将上面的HOME参数更改后,以后的家目录创建就在更改后的目录中了。
二、命令详解
(一)useradd
1、useradd介绍
useradd命令时添加用户的命令,当然还可以直接通过修改用户配置文件/etc/passwd和/etc/group手动添加用户,不过不建议这样使用。useradd 加-D和不加是不一样的。
当使用useradd不加-D参数时,直接添加用户用户名,系统会读取配置文件/etc/login.defs和/etc/default/useradd中定义的参数规则,然后添加用户,同时向/etc/passwd和/etc/group文件中添加新建的用户和用户组,当然加密文件/etc/shadows和/etc/gshadow也会同步生成。并且根据/etc/default/useradd中的配置简历用户家目录和拷贝/etc/skel中的所有文件到新用户的就爱目录中。
当使用useradd加-D参数时,可以更改新建用户的默认配置值。
useradd的语法通过man useradd进行查看,其中重要的参数如下,其中草绿色的部分是加-D参数后依然可以添加的选项:
参数选项 | 说明 |
-e expire_date | 账号终止日期,日期格式为MM/DD/YY |
-g initial_group | group名称或者以数字来做为用户登入起始用户组。用户组名和数字用户组均是系统现有的。 |
-G group,[...] | 定义该用户为多个不同用户组的成员,每个用户组使用“,”分隔。 |
-m | 用户目录如果不存在则自动创建。 |
-M | 不建立用户家目录,优先级高于/etc/login.defs文件中的配置 |
-s shell | 用户登入后使用的shell名称,默认情况下系统会选择/ec/default/useradd文件中预设置的选项 |
-u uid | 用户的id值,它是唯一的。 |
2、实例
- useradd后面不加任何参数
[root@localhost ~]# useradd xiaoshen [root@localhost ~]# ll /home/ total 0 ... drwx------ 2 xiaoshen xiaoshen 62 Dec 25 23:01 xiaoshen [root@localhost ~]# grep xiaoshen /etc/passwd xiaoshen:x:1004:1004::/home/xiaoshen:/bin/bash
创建一个xiaoshen的用户,并且还会创建一个名称相同的用户组。对于更复杂的的参数组合,比如添加用户xiaoshen1,设置其注释用户信息是family,指定uid为888,归属用户组为root、xiaoshen成员,shell类型为/bin/sh,设置家目录为/project/xiaoshen1:
# 添加用户 [root@localhost ~]# useradd -c family -u 888 -G root,xiaoshen -s /bin/sh -d /project/xiaoshen1 xiaoshen1 # 查看 [root@localhost project]# tail -1 /etc/passwd xiaoshen1:x:888:1005:family:/project/xiaoshen1:/bin/sh
- useradd后加-D参数
useradd后加-D参数,实际效果就是修改配置文件/etc/default/useradd文件的默认,当然也可以通过命令直接修改/etc/default/useradd更新预设值,比如:
# 修改默认shell [root@localhost ~]# useradd -D -s /bin/sh [root@localhost ~]# cat /etc/default/useradd # useradd defaults file GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/sh SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
(二)userdel
1、userdel介绍
userdel的功能是删除用户及其用户相关的信息,与userdel相关的文件有:
- /etc/passwd 用户账号信息文件
- /etc/shadow 用户账号加密信息文件
- /etc/group 用户组信息文件
userdel命令操作实际上就是对上面文件中的信息进行修改。可以通过man userdel命令查看系统帮助信息,其参数主要包括:
- userdel username
- userdel -r username
2、实例
- userdel username
这种方式只会删除用户本身,其家目录和相关文件并不会被删除,一般在生产环境下,当无法确定删除用户的及目录是否有用等,就可以使用这种命令。
[root@localhost ~]# userdel xiaoshen1 # 查看账户不存在了 [root@localhost ~]# tail -1 /etc/passwd xiaoshen:x:1004:1004::/home/xiaoshen:/bin/bash # 家目录存在 [root@localhost ~]# ll /project/ total 0 ... drwx------ 2 888 1005 62 Dec 28 20:49 xiaoshen1
- userdel -r username
表示在删除该用户时,将用户的家目录及本地邮件存储目录和文件也一起删除,需谨慎使用。
对于上面删除用户的操作,最好再次之前先进行备份,或者一般可以先将/etc/passwd通过注释的方式让其不起作用。
(三)usermod
1、usermod介绍
usermod顾名思义就是更改用户信息,包括改变用户shell类型、所归属的用户组、用户密码有效期等。其参数详情可通过man usermod查看:
参数选项 | 说明 |
-c comment | 增加用户账号/etc/passwd中的注释说明栏(第5栏) |
-d home_dir | 更新用户的家目录 |
-e expire_date | 用户账号过期日期 |
-f inactivate_days | 账号过期多少天后永久禁用 |
-g inital_group | 更新用户新的用户组(用户组须存在) |
-G group,[...] | 定义用户为一些用户组的成员,每个用户组之间使用“,”分隔 |
-l login_name | 更改用户登录时的名称,其余信息不变 |
-s shell | 指定新的shell |
-u uid | 指定用户的uid |
-L | 锁住用户密码,使其无法登录 |
-U | 解锁密码,使其可以登录 |
usermod命令实际上也是修改下面三个文件的内容:
- /etc/passwd 用户账号信息文件
- /etc/shadow 用户账号加密信息文件
- /etc/group 用户组信息文件
2、实例
# 修改前 [root@localhost ~]# tail -1 /etc/passwd xiaoshen:x:1004:1004::/home/xiaoshen:/bin/bash # 执行命令 [root@localhost ~]# usermod -c test xiaoshen 修改后 [root@localhost ~]# tail -1 /etc/passwd xiaoshen:x:1004:1004:test:/home/xiaoshen:/bin/bash
(四) groupadd
1、groupadd介绍
与groupadd命令相关的文件有/etc/group(用户组文件)和/etc/gshadow(用户组加密文件),groupadd相关的命令参数可通过man group命令帮助,其基本用法:
- groupadd [-g gid [-o]][-r][-f] groupname
参数选项 | 说明 |
-g gid | 指定用户gid值 |
-r | 建立系统用户组,gid的值比/etc/login.defs中定义的UID_MIN小 |
-f | 新增一个用户组,强制覆盖一个已经存在的用户组账号 |
2、实例
可以通过指定gid添加,也可以无需指定:
[root@localhost ~]# groupadd -g 862 xiaoshen2 [root@localhost ~]# groupadd xiaoshen3
[root@localhost ~]# tail -2 /etc/group xiaoshen2:x:862: xiaoshen3:x:1006:
(五)groupdel
groupdel是用来删除用户组(用户组必须存在),用groupdel实际上就是修改/etc/group和/etc/gshadow文件。
# 执行groupdel命令前 [root@localhost ~]# tail -1 /etc/group xiaoshen3:x:1006: [root@localhost ~]# tail -1 /etc/gshadow xiaoshen3:!:: # 执行groupdel命令 [root@localhost ~]# groupdel xiaoshen3 # 执行命令后两个文件后,文件xiaoshen3记录删除 [root@localhost ~]# tail -1 /etc/group xiaoshen2:x:862: [root@localhost ~]# tail -1 /etc/gshadow xiaoshen2:!::
(六)passwd
1、passwd介绍
passwd用来设置或者修改用户的密码,普通用户只能修改自己的密码,超级用户(root)可以设置或者修改所有用户的密码。当直接执行passwd,不加任何参数时,表示修改的是当前登录用户的密码。
passwd更详细的用户可以查看系统帮助文档:
[root@localhost ~]# passwd --help Usage: passwd [OPTION...] <accountName> -k, --keep-tokens keep non-expired authentication tokens #保留即将过期的用户在期满后仍旧正常使用 -d, --delete delete the password for the named account (root only) #删除通用户密码,仅能以root权限操作 -l, --lock lock the password for the named account (root only) #锁住用户无权更改密码,仅能通过root权限操作 -u, --unlock unlock the password for the named account (root only) #解除锁定,仅能通过root权限操作 -e, --expire expire the password for the named account (root only) #为密码设置过期时间,仅能通过root权限操作 -f, --force force operation #强制操作 -x, --maximum=DAYS maximum password lifetime (root only) #两次修改密码的最大天数,仅能通过root权限操作 -n, --minimum=DAYS minimum password lifetime (root only) #两次修改密码的最小天数,仅能通过root权限操作 -w, --warning=DAYS number of days warning users receives before password expiration (root only) #在密码过期多少天前提醒用户,仅能通过root权限操作 -i, --inactive=DAYS number of days after password expiration when an account becomes disabled (root only) #在密码过期多少天后被禁用,仅能通过root权限操作 -S, --status report password status on the named account (root only) #查询密码的状态,仅能通过root权限操作 --stdin read new tokens from stdin (root only) #从stdin读入密码,仅能通过root权限操作 Help options: -?, --help Show this help message --usage Display brief usage message
2、实例
- xiaoshen用户的锁定与解锁
# 锁定前状态 [root@localhost ~]# passwd -S xiaoshen xiaoshen PS 2020-12-28 0 99999 7 -1 (Password set, SHA512 crypt.) #锁定xiaoshen密码 [root@localhost ~]# passwd -l xiaoshen Locking password for user xiaoshen. passwd: Success #锁定后状态 [root@localhost ~]# passwd -S xiaoshen xiaoshen LK 2020-12-28 0 99999 7 -1 (Password locked.) # 切换到xiaoshen账号,修改密码,修改失败 [root@localhost ~]# su - xiaoshen Last login: Mon Dec 28 21:50:14 CST 2020 on pts/0 [xiaoshen@localhost ~]$ passwd Changing password for user xiaoshen. Changing password for xiaoshen. (current) UNIX password: passwd: Authentication token manipulation error #切换到root账户,通过-u解锁 [xiaoshen@localhost ~]$ su - Password: Last login: Mon Dec 28 21:50:23 CST 2020 on pts/0 [root@localhost ~]# passwd -u xiaoshen Unlocking password for user xiaoshen. passwd: Success [root@localhost ~]# su - xiaoshen Last login: Mon Dec 28 21:54:37 CST 2020 on pts/0 # 解锁后状态 [root@localhost ~]# passwd -S xiaoshen xiaoshen PS 2020-12-28 0 99999 7 -1 (Password set, SHA512 crypt.)
- 脚本修改密码
上面修改密码都是通过交互式方式修改,如果批量修改多个账户的密码,可以通过stdin参数来实现:
[root@localhost ~]# echo "123456789" | passwd --stdin xiaoshen Changing password for user xiaoshen. passwd: all authentication tokens updated successfully.
- 用户过期时间
xiaoshen用户10天内不能修改密码,70天以后必须修改密码,过期前10天通知xiaoshen用户,过期30天禁止用户登录。
[root@localhost ~]# passwd -n 10 -x 70 -w 10 -i 30 xiaoshen Adjusting aging data for user xiaoshen. passwd: Success
3、passwd特殊权限
[root@localhost ~]# which passwd /bin/passwd [root@localhost ~]# ls -l /bin/passwd -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd
在上面的/bin/passwd文件的属主权限位上带了s,这是setuid权限位,表示普通用户可以以/bin/passwd文件属主权限来操作文件,以达到普通用户无法完成的操作。
(七)chage
1、chage介绍
chage命令是用于修改密码有效期的命令,它与passwd命令有部分功能重复,其详细用户可通过chage --help查看:
[root@localhost ~]# chage --help Usage: chage [options] LOGIN Options: -d, --lastday LAST_DAY set date of last password change to LAST_DAY #将最近一次密码修改日期设置为“最近日期” -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE #将账户过期时间设置为“过期日期” -h, --help display this help message and exit #显示帮助信息并且退出 -I, --inactive INACTIVE set password inactive after expiration to INACTIVE #将因过期而失效的密码设置为“失效密码” -l, --list show account aging information #显示账户年龄信息 -m, --mindays MIN_DAYS set minimum number of days before password change to MIN_DAYS #将两次修改密码之间的最小天数设置为“最小天数” -M, --maxdays MAX_DAYS set maximim number of days before password change to MAX_DAYS #将两次修改密码之间的最大天数设置为“最大天数” -R, --root CHROOT_DIR directory to chroot into #设置文件的目录 -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS #将过期警告天数设置为“告警天数”
2、实例
- -l 显示账户年龄信息
[root@localhost ~]# chage -l xiaoshen Last password change : Dec 28, 2020 Password expires : Mar 08, 2021 Password inactive : Apr 07, 2021 Account expires : never Minimum number of days between password change : 10 Maximum number of days between password change : 70 Number of days of warning before password expires : 10
- 修改用户密码失效(同passwd)
xiaoshen用户10天内不能修改密码,70天以后必须修改密码,过期前10天通知xiaoshen用户,过期30天禁止用户登录。
[root@localhost ~]# chage -m 10 -M 70 -W 10 -I 30 xiaoshen