• 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
  • 相关阅读:
    ★★★5230打字慢的解决方法...绝对有用...只需要在手机上轻微的设置一下(转)
    IT公司中最流行的10种编程语言(转)
    Windows下安装Object C开发环境,及Hello Word(转)
    [图]AMD的CPU在VirtualBox中安装Mac OS X 10.6(转)
    How_to_Handle_Pointer_Events_in_a_Custom_Control(转)
    Cannot obtain license for Compiler (feature compiler) with license version >= 2.2(转)
    GNUstep Gorm第一个视窗程序,第一个图形界面,第一个helloworld gui(转)
    Symbian源码分析(转)
    Symbian计算MD5(转)
    Does not support program for platform "WINSCW"
  • 原文地址:https://www.cnblogs.com/shenjianping/p/14170384.html
Copyright © 2020-2023  润新知