Linux下用户管理

一、基本配置

(一)用户管理命令汇总

命令 说明
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
原文地址:https://www.cnblogs.com/shenjianping/p/14170384.html