用户组管理相关命令

用户和组管理命令

  • 用户管理命令

    • useradd:新增用户
    • usermod:修改用户属性
    • userdel:删除用户
    • 查看用户相关ID信息
    • 切换用户或以其他用户身份执行命令
    • 设置密码
    • 修改用户密码策略
    • 用户相关的其它命令
  • 组帐号维护命令

    • groupadd:新增组
    • groupmod:修改组属性
    • groupdel:删除组
    • gpasswd:更改组密码
    • newgrp:临时切换主组
    • 更改和查看组成员
    • 将用户加入组的几种方法
    • 多个用户添加到一个组

新增用户:useradd

useradd [options] LOGIN
    -u UID: [UID_MIN, UID_MAX]定义在/etc/login.defs
        例如:指定UID为999999
        [root@centos7 ~]# useradd -u 999999 hello
        [root@centos7 ~]# id hello
        uid=999999(hello) gid=10000(hello) groups=10000(hello)

    -o 配合-u选项,不检查UID的唯一性
        例如:
        [root@centos7 ~]# useradd -o  -u  999999 hai
        [root@centos7 ~]# id hello
        uid=999999(hello) gid=10000(hello) groups=10000(hello)
        [root@centos7 ~]# id hai
        uid=999999(hello) gid=10000(hello) groups=10000(hello)

    -g GID:指明用户所属基本组,可为组名,也可以GID
    -c "COMMENT":用户的注释信息
    -d HOME_DIR: 以指定的路径(不存在)为家目录
    -s SHELL: 指明用户的默认shell程序
        可用列表在/etc/shells文件中
    -G GROUP1[,GROUP2,...]:为用户指明附加组,组须事先存在
    -N 不创建私用组做主组,使用users组做主组
    -r: 创建系统用户 CentOS 6: ID<500CentOS 7: ID<1000

    例如:创建 UID为123456,主组为user1 付加组为jerr 家目录为 /app/user3 shell为/bin/csh 
    [root@centos7 ~]# useradd -o  -u 123456 -g user1 -G jerr -d /app/user3 -s /bin/csh -c "good" user3

新增用户默认值

  • 默认值设定:/etc/default/useradd文件中
  • 显示或更改默认设置:
useradd -D  显示新建用户默认属性
    例如:
    [root@centos7 ~]# useradd -D
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/bash
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes

useradd –D -s SHELL     #修改新建用户的默认shell
useradd –D –b BASE_DIR  #修改新建用户的默认家目录
useradd –D –g GROUP     #修改新建用户的默认组

新建用户的相关文件和命令

/etc/default/useradd # 新建用户默认配置文件
/etc/skel/*  # 新建用户的文件,例如:
    [root@centos6 ~]# ls -a /etc/skel/
    .  ..  .bash_logout  .bash_profile  .bashrc  .gnome2  .mozilla

/etc/login.defs # 用户登陆默认文件
newusers passwd格式文件 批量创建用户 
chpasswd 批量修改用户口令

用户属性修改:usermod

usermod [OPTION] login
    -u UID:UID
    -g GID: 新主组
    -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的
附加组将会被覆盖;若保留原有,则要同时使用-a选项
    -s SHELL:新的默认SHELL
    -c 'COMMENT':新的注释信息
    -d HOME: 新家目录不会自动创建;若要创建新家目录并移
    动原家数据,同时使用-m选项
    -l login_name: 新的名字;
    -L: lock指定用户,在/etc/shadow 密码栏的增加 !
    -U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
    -e YYYY-MM-DD: 指明用户账号过期日期
    -f INACTIVE: 设定非活动期限

范例1:修改haiyun用户的UID为6666
    [root@centos7 ~]# id haiyun 
    uid=1004(haiyun) gid=1004(haiyun) groups=1004(haiyun)
    [root@centos7 ~]# usermod -u 6666 haiyun
    [root@centos7 ~]# id haiyun
    uid=6666(haiyun) gid=1004(haiyun) groups=1004(haiyun)

范例2:修改用户haiyun的说明列,加上“haiyun's test”
    [root@centos7 ~]# usermod -c "haiyun's test" haiyun
    [root@centos7 ~]# getent  passwd haiyun
    haiyun:x:6666:1004:haiyun's test:/home/haiyun:/bin/bash

范例3:修改用户haiyun密码在2017年8月14日失效
    [root@centos7 ~]# usermod -e 2017-08-15 haiyun 
    [root@centos7 ~]# getent shadow haiyun
    haiyun:$6$QzvQ4qfN$kbiUQYmdV9oehOHnXmQ/DYW83czB..nhEWhxqo.v25W6kiBxBWFEN0kLuraSSxwDdX340HcK5zWULX7GzpGLV.:17391:0:99999:7::17393:        <==第8个字段代表密码失效时间17393,是使用1970年以来的总日数设置

范例4:新建用户haiyun这个系统账号时并没有给予主文件夹,请新建他的主文件夹
[root@centos7 ~]# ll -d ~haiyun                 <==haiyun用户确实没有家目录
ls: cannot access /home/haiyun: No such file or directory
[root@centos7 ~]# cp -a /etc/skel /home/haiyun      <==复制模板文件
[root@centos7 ~]# chown -R haiyun:haiyun /home/haiyun/  <==修改所有者和所属组
[root@centos7 ~]# chmod 700 /home/haiyun/           <==修改权限
[root@centos7 ~]# ll -a ~haiyun                     <==查看
total 12
drwx------. 3 haiyun haiyun  78 Jul 14 11:16 .
drwxr-xr-x. 6 root   root    71 Aug 13 14:37 ..
-rw-r--r--. 1 haiyun haiyun  18 Aug  3  2016 .bash_logout
-rw-r--r--. 1 haiyun haiyun 193 Aug  3  2016 .bash_profile
-rw-r--r--. 1 haiyun haiyun 231 Aug  3  2016 .bashrc
drwxr-xr-x. 4 haiyun haiyun  39 Jul 14 11:16 .mozilla

删除用户:userdel

userdel [OPTION]... login
    -r: 删除用户家目录

范例1:删除用户haiyun,且把她的家目录一块删除
[root@centos7 ~]# userdel -r haiyun

查看用户相关的ID信息

id [OPTION]... [USER]
    -u: 显示UID
    -g: 显示GID
    -G: 显示用户所属的组的ID
    -n: 显示名称,需配合ugG使用

范例1:查看haiyun用户的UID
    [root@centos7 ~]# id -u haiyun
    1004

范例2:查看haiyun用户的GID
    [root@centos7 ~]# id -g haiyun
    1004

范例3:根据UID 1004查看是哪个用户
    [root@centos7 ~]# id -n 1004 -u 
    haiyun

切换用户或以其他用户身份执行命令

su [options...] [-] [user [args...]]
切换用户的方式:
    su UserName:非登录式切换,即不会读取目标用户的
配置文件,不改变当前工作目录
    su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
root su至其他用户无须密码;非root用户切换时需要密码
换个身份执行命令:
    su [-] UserName -c 'COMMAND'
选项: -l --login
    su -l UserName 相当于 su - UserName

范例1:以非登陆方式切换到用户haiyun
    [root@centos7 ~]# su haiyun
    [haiyun@centos7 root]$ pwd
    /root

范例2:以登陆方式切换到用户haiyun
    [root@centos7 ~]# su - haiyun
    Last login: Sun Aug 13 14:46:40 CST 2017 on pts/0
    [haiyun@centos7 ~]$ pwd
    /home/haiyun

范例3:切换到haiyun用户,查看root目录下的内容,使用su 执行命令ls
    [root@centos7 ~]# su haiyun
    [haiyun@centos7 root]$ ls
    ls: cannot open directory .: Permission denied
    [haiyun@centos7 root]$ su - -c "ls"
    Password: 
    anaconda-ks.cfg  Documents  initial-setup-ks.cfg  Pictures  Templates
    Desktop      Downloads  Music         Public    Videos

设置密码

passwd [OPTIONS] UserName: 修改指定用户的密码,仅root用户权限
passwd: 修改自己的密码
常用选项:
    -l:锁定指定用户
    -u:解锁指定用户
    -e:强制用户下次登录修改密码
    -n mindays: 指定最短使用期限
    -x maxdays:最大使用期限
    -w warndays:提前多少天开始警告
    -i inactivedays:非活动期限
    --stdin:从标准输入接收用户密码
    echo "PASSWORD" | passwd --stdin USERNAME

范例1:请root用户为haiyun用户设置密码
    [root@centos7 ~]# passwd haiyun         <==为haiyun设置密码,后面不跟用户就是为自己设置密码
    Changing password for user haiyun.
    New password: 
    BAD PASSWORD: The password is shorter than 8 characters     <==密码太过简单或太短的报错!
    Retype new password: 
    passwd: all authentication tokens updated successfully.     <==虽然简单或短但还是设置成功了!

范例2:haiyun为自己设定密码
    [haiyun@centos7 ~]$ passwd 
    Changing password for user haiyun.
    Changing password for haiyun.
    (current) UNIX password:        <==此处输入原来的旧密码,如果旧密码输入不通过的话是无法设置新密码的!
    New password:                   <==输入新密码,密码不通过,少于8位(要符合密码复杂策略)
    BAD PASSWORD: The password is shorter than 8 characters
    New password:                   <==重新输入
    Retype new password:            <==已通过再次输入
    passwd: all authentication tokens updated successfully.     <==设置成功

范例3:使用标准输入来设置密码
    [root@centos7 ~]# echo "haiyun" | passwd --stdin haiyun
    Changing password for user haiyun.
    passwd: all authentication tokens updated successfully.

范例4:管理haiyun的密码,使其具有30天更改、10天密码失效的设置
    [root@centos7 ~]# passwd -S haiyun
    haiyun PS 2017-08-13 0 99999 7 -1 (Password set, SHA512 crypt.)
    # 以上依次为:密码新建时间、密码最短有效期(0)、密码最长有效期(99999)、密码过期警告天数(7)、密码失效时间(-1:代表永久不会失效)、括号里的内容代表密码已设置使用SHA512加密
    [root@centos7 ~]# passwd -x 30 -i 10 haiyun
    Adjusting aging data for user haiyun.
    passwd: Success
    [root@centos7 ~]# passwd -S haiyun
    haiyun PS 2017-08-13 0 30 7 10 (Password set, SHA512 crypt.)

范例5:让haiyun的账号失效,查看完毕再让他失效
    [root@centos7 ~]# passwd -l haiyun      
    Locking password for user haiyun.
    passwd: Success
    [root@centos7 ~]# passwd -S haiyun
    haiyun LK 2017-08-13 0 30 7 10 (Password locked.)   <==可以看到密码已失效
    [root@centos7 ~]# getent shadow haiyun
    haiyun:!!$6$ExWq7rry$kmJHHH8TeTzLH87b9x1iRRqDUwgNGDLmd9qcF/JxoX6rgkSfrmz7cCgZvbCOri0evGe8Yh51RCLnDW6I6Pfqk1:17391:0:30:7:10::        <==在密码字段前面家里两个!!

修改用户密码策略

chage [-ldEImMW]帐号名
选项与参数:
    -l :列出该帐号的详细密码参数;
    -d :后面接日期,修改shadow 第三栏位(最近一次更改密码的日期),格式YYYY-MM-DD
    -E :后面接日期,修改shadow 第八栏位(帐号失效日),格式YYYY-MM-DD
    -I :后面接天数,修改shadow 第七栏位(密码失效日期)
    -m :后面接天数,修改shadow 第四栏位(密码最短保留天数)
    -M :后面接天数,修改shadow 第五栏位(密码多久需要进行变更)
    -W :后面接天数,修改shadow 第六栏位(密码过期前警告日期)

范例1:列出haiyun的详细密码参数
    [root@centos7 ~]# chage -l haiyun
    Last password change                    : Aug 13, 2017
    Password expires                    : Sep 12, 2017
    Password inactive                   : Sep 22, 2017
    Account expires                     : never
    Minimum number of days between password change      : 0
    Maximum number of days between password change      : 30
    Number of days of warning before password expires   : 7

范例2:新建一个名为test的账号,该账号第一次登陆后使用默认密码,但必须要更改过密码后使用新密码才能够登陆系统使用bash环境
    [root@centos7 ~]# useradd test
    [root@centos7 ~]# echo "test123"|passwd --stdin test
    Changing password for user test.
    passwd: all authentication tokens updated successfully.
    [root@centos7 ~]# chage -d 0 test

范例3:尝试以test登陆的情况
    WARNING: Your password has expired.
    You must change your password now and login again!      
    Changing password for user test.
    Changing password for test.
    (current) UNIX password:    <==输入当前密码
    New password:               <==输入新密码,密码太短
    BAD PASSWORD: The password is shorter than 8 characters
    New password:               <==重新输入
    Retype new password:        <==再次输入
    passwd: all authentication tokens updated successfully.

用户相关的其它命令

finger [-s] username    #查阅用户相关信息
选项与参数:
    -s :仅列出使用者的帐号、全名、终端机代号与登入时间等等;
    -m :列出与后面接的帐号相同者,而不是利用部分比对(包括全名部分)
范例:查看用户haiyun的相关属性信息
    [root@centos7 ~]# finger haiyun
    Login: haiyun                   Name: 
    Directory: /home/haiyun                 Shell: /bin/bash
    Last login Sun Aug 13 14:56 (CST) on pts/0
    No mail.
    No Plan.

chfn [-foph] [帐号名]   #修改用户相关信息
选项与参数:
    -f :后面接完整的大名;
    -o :您办公室的房间号码;
    -p :办公室的电话号码;
    -h :家里的电话号码!

范例:修改haiyun的信息
    [root@centos7 ~]# chfn haiyun
    Changing finger information for haiyun.
    Name []: haiyun
    Office []: haiyun
    Office Phone []: 100
    Home Phone []: 101

    Finger information changed.
    [root@centos7 ~]# finger haiyun
    Login: haiyun                   Name: haiyun
    Directory: /home/haiyun                 Shell: /bin/bash
    Office: haiyun, 100         Home Phone: 101
    Last login Sun Aug 13 14:56 (CST) on pts/0
    No mail.
    No Plan.

chsh [-ls]  #修改shell
选项与参数:
    -l :列出目前系统上面可用的shell ,其实就是/etc/shells 的内容!
    -s :设定修改自己的Shell 啰

范例1:列出当前系统上所有合法的shell
    方法①:
        [root@centos7 ~]# chsh -l
        /bin/sh
        /bin/bash
        /sbin/nologin
        /usr/bin/sh
        /usr/bin/bash
        /usr/sbin/nologin
        /bin/tcsh
        /bin/csh
    方法②:
        [root@centos7 ~]# cat /etc/shells 
        /bin/sh
        /bin/bash
        /sbin/nologin
        /usr/bin/sh
        /usr/bin/bash
        /usr/sbin/nologin
        /bin/tcsh
        /bin/csh

范例2:修改用户haiyun的shell为csh   
    [root@centos7 ~]# chsh -s /bin/csh haiyun   <==注意:不要随便修改shell
    Changing shell for haiyun.
    Shell changed.
    [root@centos7 ~]# getent passwd haiyun
    haiyun:x:1004:1004:haiyun,haiyun,100,101:/home/haiyun:/bin/csh

创建组:groupadd

 groupadd [OPTION]... group_name
    -g GID: 指明GID号; [GID_MIN, GID_MAX]
    -r: 创建系统组
        CentOS 6: ID<500
        CentOS 7: ID<1000

范例1:新建一个名为group1的用户组
    [root@centos7 ~]# groupadd group1 
    [root@centos7 ~]# getent group group1
    group1:x:1006:

范例2:新建一个名为tset的系统组
    [root@centos7 ~]#  groupadd -r tset
    [root@centos7 ~]# getent group tset
    tset:x:984:

修改组:groupmod

组属性修改: groupmod
groupmod [OPTION]... group
    -n group_name: 新名字
    -g GID: 新的GID

范例:将刚才上个命令创建的group1名臣修改为mygroup,GID为666
    [root@centos7 ~]# getent group group1
    group1:x:1006:
    [root@centos7 ~]# groupmod -g 666 -n mygroup group1 
    [root@centos7 ~]# getent group mygroup
    mygroup:x:666:

组删除: groupdel

groupdel [groupname]

范例:删除组mygroup
[root@centos7 ~]# groupdel mygroup

更改组密码:gpasswd

gpasswd [OPTION] GROUP
    -a user: 将user添加至指定组中
    -d user: 从指定组中移除用户user
    -A user1,user2,...: 设置有管理权限的用户列表
    -M user1,user2:将某些账号加入这个用户组中

范例1:新建一个用户组,名为testgroup且用户组交给haiyun管理
[root@centos7 ~]# groupadd testgroup
[root@centos7 ~]# gpasswd testgroup
Changing the password for group testgroup
New Password: 
Re-enter new password: 
[root@centos7 ~]# gpasswd -A haiyun testgroup   <==加入用户组管理员为haiyun
[root@centos7 ~]# getent gshadow testgroup
testgroup:$6$jLCPW/52OqN/LV$XSUnOXNHbAnCTo.q1yTYeC.qvQqoXYs5oGC7kURAOW1AY755dYJQBJpieAQSFiiaQkgm2Akrf7FqIMMkQYrrX/:haiyun:

范例2:以haiyun登陆系统,并且让他加入haiyun1,haiyun2成为testgroup成员
[root@centos7 ~]# id haiyun1        <==确认haiyun1存在且没有加入testgroup组
uid=1006(haiyun1) gid=1007(haiyun1) groups=1007(haiyun1)
[root@centos7 ~]# id haiyun2        <==确认haiyun2存在且没有加入testgroup组
uid=1007(haiyun2) gid=1008(haiyun2) groups=1008(haiyun2)
[root@centos7 ~]# su - haiyun       <==切换到haiyun用户
Last login: Sun Aug 13 14:56:49 CST 2017 on pts/0
[haiyun@centos7 ~]$ gpasswd -a haiyun1 testgroup        <==将用户haiyun1加入到testgroup组
Adding user haiyun1 to group testgroup
[haiyun@centos7 ~]$ gpasswd -a haiyun2 testgroup        <==将用户haiyun2加入到testgroup组
Adding user haiyun2 to group testgroup  
[root@centos7 ~]# getent group testgroup                <==确认添加成功
testgroup:x:1006:haiyun1,haiyun2

newgrp命令:临时切换主组

newgrp命令:临时切换主组,如果用户本不属于此组,则需要组密码

范例1:临时切换到root组
[root@centos7 ~]# gpasswd root          <==为root组设置密码
Changing the password for group root
New Password: 
Re-enter new password: 
[root@centos7 ~]# su - haiyun           <==切换到haiyun
Last login: Sun Aug 13 16:00:31 CST 2017 on pts/0
[haiyun@centos7 ~]$ id                  <==未切换前的主组
uid=1004(haiyun) gid=1004(haiyun) groups=1004(haiyun) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[haiyun@centos7 ~]$ newgrp root         <==临时切换主组
Password: 
[haiyun@centos7 ~]$ id                  <==切换成功
uid=1004(haiyun) gid=0(root) groups=0(root),1004(haiyun) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

更改和查看组成员

groupmems [options] [action]
options:
    -g, --group groupname 更改为指定组 (只有root)
    Actions:
    -a, --add username 指定用户加入组
    -d, --delete username 从组中删除用户
    -p, --purge 从组中清除所有成员
    -l, --list 显示组成员列表

范例1:查看testgroup组的成员
[root@centos7 ~]# groupmems -l -g testgroup
haiyun1  haiyun2 

范例2:将haiyun3加入到testgroup组中
[root@centos7 ~]# groupmems -g testgroup -a haiyun3
[root@centos7 ~]# groupmems -g testgroup -l 
haiyun1  haiyun2  haiyun3 

范例3:将haiyun2从testgroup中移除
[root@centos7 ~]# groupmems -g testgroup -d haiyun2
[root@centos7 ~]# groupmems -g testgroup -l 
haiyun1  haiyun3 

范例4:清除testgroup组总的所有成员
[root@centos7 ~]# groupmems -g testgroup -p 
[root@centos7 ~]# groupmems -g testgroup -l 
[root@centos7 ~]# 

groups [OPTION].[USERNAME]... 查看用户所属组列表

范例:查看用户haiyun1加入的组
[root@centos7 ~]# groups haiyun1
haiyun1 : haiyun1 testgroup

将用户加入组的几种方法

方法1:groupmems
[root@centos7 ~]# groupmems -g testgroup -a haiyun

方法2:usermod
[root@centos7 ~]# usermod -G testgroup haiyun2 

方法3:
[root@centos7 ~]# gpasswd -a haiyun3 testgroup
Adding user haiyun3 to group testgroup

多个用户添加到一个组

范例:将haiyun,haiyun1,haiyun2,haiyun3添加到testgroup组
[root@centos7 ~]# groupmems -g testgroup -l 
[root@centos7 ~]# gpasswd -M haiyun,haiyun1,haiyun2,haiyun3 testgroup
[root@centos7 ~]# groupmems -g testgroup -l 
haiyun  haiyun1  haiyun2  haiyun3 

你可能感兴趣的:(linux)