Linux的用户和组管理
==============================================================================
概述;
==============================================================================
安全介绍及所属主和所属组
1.安全介绍3A
★资源分配
每个使用者:用户标识、密码
Authentication :认证 (用户名和对应口令)
Authorization :授权 (不同的用户权限不一样)
Accouting /Audition :审计
2.所属主和所属组
★user:用户
在Linux系统上,用户管理是基于用户名和密码的方式进行资源分配,linux上用户即:Username/UID 分为以下类别:
☉用户标识:UserID,UID(16bits二进制数字:0-65535)
管理员:root ,UID=0
普通用户:1-65535 (普通用户又分为系统用户和登录用户两种)
※系统用户:
1-499 (CentOS6 系统)1-999(CentOS7 系统)由系统保留,作为管理账号,对守护进程获取资源进行权限分配;
※登录用户:
500-60000(CentOS6) 1000-60000(CentOS7)通过交互方式登录
★名称解析:名称转换
Username <---> UID
根据名称解析库进行:/etc/passwd
★Linux组:Groupname/GID
☉组标识:GroupID,GID
管理员组:root ,UID=0
普通用户组:1-65535 (普通用户又分为系统用户组和登录用户组两种)
※系统用户组:
1-499 (CentOS6 )1-999(CentOS7 )
※登录用户组:
500+(CentOS6) 1000+(CentOS7)
☉Linux组的类别:
※用户的主要组(主组):
用户必须属于一个且只有一个主组(基本组);
基本组名同用户名,且仅包含一个用户,也叫私有组(即:新建的用户,也会建一个组,但组里只有用户自己)
※用户的附加组(辅助组):secondary group
基本组以外的组属于用户的附加组(或者额外组)
注意:
一个用户只有一个主组,但是可以属于零个或多个附加组;
一般第一个为用户的主组,后面的都为附加组;
系统识别用户不是看用户名,是看id编号的;
3.安全上下文
★安全上下文
运行中的程序:进程(process)
运行中的进程有其属主和属组:
进程以其发起者的身份运行:
进程所能够访问资源的权限取决于发起此进程的用户的权限 (和程序本身没关系,看是谁运行的);
★系统用户:
为了能够让那些后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户,这类用户从不用登录系统,只是为了能够让其以普通用户的身份运行,获取普通用户权限;
用户和组的配置文件
1.Linux用户和组的主要配置文件
★主要配置文件:
☉/etc/passwd:
用户及其属性信息(名称、UID、主组ID等)
☉/etc/shadow:
用户密码及其相关属性
☉/etc/group:
组及其属性信息
☉ /etc/gshadow:
组密码及其相关属性
2./etc/passwd解说
★格式:
name:password:UID:GID:GECOS:directory:shell
/etc/passwd 由“:”分割成7段,每个字段含义如下:
①login name:
登录用户名(wang)
②passwd:
密码,口令(x) 现在放在 /etc/shadow 如果要想回到之前的状态用(命令 pwunconv)但是这样的话/etc/shadow文件就没有了,恢复使用(命令 pwconv)
③UID:
用户身份编号 管理员:0,系统默认为root,但是可以修改。普通用户:500+;1000+
④GID:
组标识号登录默认所在组编号(1000)
⑤GECOS:
用户全名或注释;
用命令chfn 可以修改注释信息;
用命令 finger 可以更加详细的查看修改和用户信息;
⑥home directory:
用户主目录(/home/wang)
root 的家目录是/root ,普通用户的家目录则为/home/username,用户家目录可以自己定义。
⑦shell:
用户默认使用shell (/bin/bash)
用 chsh命令 可以直接修改用户的shell
演示:
[root@centos7 ~]# getent passwd centos centos:x:1001:1001::/home/centos:/bin/bash [root@centos7 ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
3./etc/shadow解说
★/etc/shadow 和 /etc/passwd 类似,由“:”分割成9段,只有管理员可以查看,普通用户是看不了的。含义如下:
①登录用户名:
与/etc/passwd 类似
②用户密码,一般sha512加密
密码存储格式:单向加密,并借助于salt完成
如果刚建的新用户,密码是(!!)是不允许登陆的,(可以用 su切换)如果删除了,该用户就可以不用密码直接登录。可以使用 命令 usermod -U (删除!号)(usermod -L 加!号),只能删除一个,第二个系统不允许被删除。 其实,有密码的用户也是可以被锁定的,也是用 usermod -L
密码前面的$6代表哈希算法,一般用sha512加密,是单向加密的,不可逆。但是也有可能会被破解。我们也可以修改用户的加密算法 命令:authconfig--passalgo=sha256 --update(对老用户不起作用,只对新用户起作用)
如果两个新用户设置的密码完全以一样,但在 shadow中显示的也是不同的,因为系统会加 “salt”,是一种随机数,更安全。
在工作中设置密码可以用命令 openssl rand -base64 (10随机数)
③从1970年1月1日起到密码最近一次被更改的时间
如果为0 就代表,迫使你下一次登录时必须该口令(可以通过 chage -d0 tao 直接改为0)或者(passwd -e tao)和前者效果一样。
④密码再过多少天可以被更改,系统默认为0,即不受限制
⑤密码多少天后到期,即在多少天内必须更改密码,系统默认99999表示永远不需要更改。
⑥密码过期前几天系统提醒用户(默认为一周)
⑦密码过期几天后账号会被锁定
⑧生命周期,从1970年1月1日算起,多少天后帐号失效
⑨没有意义,作为保留用
附图:
密码期限如下图:
演示:
[root@centos7 ~]# getent shadow centos centos:$6$OeRE6xaj$o1pe/AWqLf2ek8y3rRLGFHzcSLHiZ031pSHep2wJoQdIm5GwId9NxM.rG9b2H8C0XxFisTC9B2mYrAnHiHqGk.:17114:0:99999:7::: [root@centos7 ~]# cat /etc/shadow root:$6$0runH6nF$5nFsv0fqUrH/YfLuxrqh0sXMSHFXCOWpDeRKeKWy6Fcrwq4pYSpfB6DS0j9kk95pLzouxXk6kSt/K1lHYcjqO0:17111:0:99999:7::: bin:*:16659:0:99999:7::: daemon:*:16659:0:99999:7::: adm:*:16659:0:99999:7::: lp:*:16659:0:99999:7::: tcpdump:!!:17111:::::: mageedu:$6$S0t9SxXkvSI0Npz5$YDVonz69YGGGkGyZDy/KesO4CI1HUBLNThcHj6PXDntQGS0Cl0SNpN6zGASuzYE.z5veu1XAzMvO4xLWbKE.n0::0:99999:7::: apache:!!:17111:::::: nginx:!!:17111:::::: centos:$6$OeRE6xaj$o1pe/AWqLf2ek8y3rRLGFHzcSLHiZ031pSHep2wJoQdIm5GwId9NxM.rG9b2H8C0XxFisTC9B2mYrAnHiHqGk.:17114:0:99999:7::: userx1:!!:17115:0:99999:7::: userx2:!!:17115:0:99999:7:::
4./etc/group 组及其属性信息
①组群名称:就是群组名
②群组密码:通常不需要设定,密码是被记录在/etc/gshadow
③GID:就是组的id
④以当前组为附加组的用户列表(分隔符为逗号)
注意:
新用户添加或删除附加组,必须重新登录才能够表现出来。
演示:
[root@centos7 ~]# getent group centos centos:x:1001: [root@centos7 ~]# cat /etc/group root:x:0: bin:x:1: mageedu:x:1000:mageedu apache:x:48: nginx:x:986: centos:x:1001: groupx1:x:1002: groupx2:x:1003: groupx3:x:1004: memcached:x:985: zabbix:x:984: haclient:x:189: tomcat:x:91:
5./etc/gshadow 解说
①群组名称
②群组密码 :
一般不对组设置口令,如果设置了,普通用户知道口令后便可直接加进来,不设置反而更加安全。
③组管理员列表:
组管理员的列表,更改组密码和成员
④以当前组为附加组的用户列表:(分隔符为逗号)
演示:
[root@centos7 ~]# cat /etc/gshadow root::: bin::: daemon::: sys::: adm::: tty::: disk::: lp::: mem:::
用户和组相关的管理命令
1.文本操作及用户和组的相关命令
★vipw(vi /etc/passwd)和 vigr (vi /etc/group)
用这两个命令比直接使用nano,vim等编辑工具安全,因为在使用过程中如果格式不正确,系统会报错,其他的则不会
pwck(passwd check)和grpck(group check)
修改完成之后,用这两个工具可以作相应的检查
★用户账号管理命令:
useradd;
usermod;
userdel;
passwd;
★组账号管理命令:
groupadd;
groupmod;
groupdel;
gpasswd;
2.useradd 用户创建
★useradd UserName
☉语法格式:
useradd [options] LOGIN(登录名)
★选项
-u UID:指定UID
-g GROUP:即指定用户的基本组(要事先存在);如果没有指定,使用与用户名相同的组名
-G GROUP1[,GROUP2,...[,GROUPN]]]:指定用户所属的附加组,多个组之间用逗号隔开,组要事先存在;
-c "COMMENT":用户的注释信息
-d HOME_DIR:以指定的路径为用户的家目录,通过复制/etc/skel 目录,并重命名事实现。指定的家目录路径如果事先存在,则不会为用户复制环境配置文件
-s SHELL:指定用户的默认shell,可用的所有shell列表存储在 /etc/shells 文件中;
-m:创建用户时,强制给用户创建家目录;
-M:创建用户,但不为用户创建家目录;
-r:创建系统用户
id:1-499(centos6);1-999(centos7)
不会为用户创建家目录
默认shell为/sbin/nologin
系统维护如果不想让其他用户登录,只需创建 touch /etc/nologin即可
☉创建用户时的诸多默认值设定配置文件为:/etc/login.defs
useradd -D :显示默认设置
useradd -D 选项:更改默认设置,修改的结果保存于/etc/default/useradd中
如:更改默认shell :useradd -D -s /bin/csh(后面加选项可以更改默认设置)
总结:
新建用户的相关默认文件
/etc/default/useradd :useradd 相关的配置文件默认设置;
/etc/skel/* :家目录的配置文件模板
/etc/login.defs :一些配置文件的默认设置
演示:
# 不加任何选项创建用户, [root@CentOS6 ~]# useradd tao [root@CentOS6 ~]# tail -1 /etc/passwd tao:x:504:505::/home/tao:/bin/bash [root@CentOS6 ~]# tail -1 /etc/group 默认创建和用户名同名的组,作为私有组 tao:x:505: [root@CentOS6 ~]# tail -1 /etc/shadow tao:!!:17206:0:99999:7::: # -u 指明UID,创建用户: [root@CentOS6 ~]# useradd -u 521 xiu [root@CentOS6 ~]# tail -2 /etc/passwd tao:x:504:505::/home/tao:/bin/bash xiu:x:521:521::/home/xiu:/bin/bash [root@CentOS6 ~]# tail -2 /etc/group tao:x:505: xiu:x:521: # -c 用户的注释信息 [root@CentOS6 ~]# useradd -c "love you" taoxiu [root@CentOS6 ~]# tail -3 /etc/passwd tao:x:504:505::/home/tao:/bin/bash xiu:x:521:521::/home/xiu:/bin/bash taoxiu:x:522:522:love you:/home/taoxiu:/bin/bash # -G指明附加组,组必须事先存在 [root@CentOS6 ~]# tail -5 /etc/group mysql:x:27: mygrp:x:504: tao:x:505: xiu:x:521: taoxiu:x:522: [root@CentOS6 ~]# useradd -G mygrp arclinux # 指明新用户的附加组为mygrp [root@CentOS6 ~]# tail -1 /etc/passwd arclinux:x:523:523::/home/arclinux:/bin/bash [root@CentOS6 ~]# tail -5 /etc/group mygrp:x:504:arclinux # 最后一个字段表示:以此组为其附加组的用户列表 tao:x:505: xiu:x:521: taoxiu:x:522: arclinux:x:523: [root@CentOS6 ~]# id arclinux uid=523(arclinux) gid=523(arclinux) groups=523(arclinux),504(mygrp) # -d,指明用户的家目录,家目录环境来自/etc/skel/*, [root@CentOS6 ~]# useradd -d /tmp/moosfs moosfs [root@CentOS6 ~]# tail -1 /etc/passwd moosfs:x:524:524::/tmp/moosfs:/bin/bash [root@CentOS6 ~]# ls /tmp/moosfs/ [root@CentOS6 ~]# ls -a /tmp/moosfs/ . .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla # 家目录环境来自/etc/skel/* [root@CentOS6 ~]# mkdir /tmp/mytest [root@CentOS6 ~]# useradd -d /tmp/mytest mytest # 如果指定的路径事先存在,则会报错,如下: useradd: warning: the home directory already exists. Not copying any file from skel directory into it. [root@CentOS6 ~]# ls -a /tmp/mytest/ . .. # 无任何文件 # -s 指定用户的默认shell,可用的所有shell列表存储在 /etc/shells 文件中; [root@CentOS6 ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh [root@CentOS6 ~]# useradd -s /bin/csh jing [root@CentOS6 ~]# getent passwd jing jing:x:526:526::/home/jing:/bin/csh [root@CentOS6 ~]# tail -1 /etc/passwd jing:x:526:526::/home/jing:/bin/csh
2.系统维护如果不想让其他用户登录,只需创建 touch /etc/nologin,如下:
3.在创建用户的时候会有一些默认值设定:在 /etc/default/useradd,/etc/login.defs文件中
[root@CentOS6 ~]# useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes [root@CentOS6 ~]# cat /etc/default/useradd # useradd defaults file GROUP=100 # 创建用户时要不要添加私有组 HOME=/home # 指定添加新用户是否创建家目录,如果创建路径为/home INACTIVE=-1 EXPIRE= # 到期时间,默认永不过期 SHELL=/bin/bash # 默认创建的shell类型 SKEL=/etc/skel # 家目录初始化环境的模板文件 CREATE_MAIL_SPOOL=yes # 是否自动生成用户名的邮箱(系统用户不创建) [root@CentOS6 ~]# ls /var/spool/mail arclinux centos jing moosfs mytest root rpc tao taoxiu userx1 userx2 userx3 xiu #更改默认设置,并保存在 /etc/default/useradd [root@CentOS6 ~]# useradd -D -s /bin/csh [root@CentOS6 ~]# useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/csh SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
# 查看创建用户时的默认设置文件 [root@centos7 ~]# 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 #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.usermod和userdel 用户属性修改及删除用户
★用户属性修改
☉格式:usermod [options] LOGIN
☉选项:
-u UID:修改用户的ID为此处指定的新UID;
-g GID:修改用户所属的基本组为此处所指的基本组;
-G GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项,表示append;
-a,--append:与 -G 一同使用,用于为用户追加新的附加组;
-c 'COMMENT':修改注释信息;
-d HOME_DIR:修改用户的家目录,新家目录要事先存在,并且原家目录中的文件不会同时移动至新的家目录;若要创建新家目录并移动原家目录中数据,同时使用-m选项
-m,--move-home:只能与 -d 选项一同使用,用于将原来的家目录中的数据移动至新家目录中;
-l NEW_LOGIN:修改用户名;
-s SHELL:修改用户的默认shell;
-L,--lock:锁定用户密码,即在用户原来的密码串之前添加“!”;
-U,--unlock:解锁用户的密码,将/etc/shadow 密码栏的 ! 拿掉;
★删除用户
☉格式:userdel [OPTION] LOGIN
☉选项:
-r:删除用户时一并删除家目录
演示:
# -L 锁定用户密码,此时,用户将不能正常登录 [root@centos7 ~]# usermod -L centos [root@centos7 ~]# getent shadow centos # 可以看在密码串之前多了一个“!”号 centos:!$6$o61IX7wj$eopH2Oif3SzUJ0zBmESpYuvyy49xY7tjOooSbIt5blPQMBYvdw30.avcwqubkXZ3fMGOjd6MSJiAO0GpFjG2q0:17207:0:99999:7::: # -U 解锁用户密码,用户可以正常登录 [root@centos7 ~]# usermod -U centos [root@centos7 ~]# getent shadow centos #可以看在密码串之前的“!”号被删除 centos:$6$o61IX7wj$eopH2Oif3SzUJ0zBmESpYuvyy49xY7tjOooSbIt5blPQMBYvdw30.avcwqubkXZ3fMGOjd6MSJiAO0GpFjG2q0:17207:0:99999:7::: # 删除用户连并其家目录一起删除 [root@CentOS6 ~]# userdel -r tao [root@CentOS6 ~]# userdel -r xiu
4.groupadd 组创建
★创建一个新组
☉格式:groupadd [选项] group_name
☉选项:
-g GID:指明GID号;[GID_MIN, GID_MAX]
-r:创建系统组 (centos6 UID<500;centos7 UID<1000 )
演示:
# 创建普通组 [root@CentOS6 ~]# groupadd mygrp [root@CentOS6 ~]# tail -1 /etc/group mygrp:x:504: # 创建系统组 [root@CentOS6 ~]# groupadd -r testgrp [root@CentOS6 ~]# tail -2 /etc/group mygrp:x:504: testgrp:x:493: # 指明GID [root@CentOS6 ~]# groupadd -g 2000 grp1 [root@CentOS6 ~]# tail -3 /etc/group mygrp:x:504: testgrp:x:493: grp1:x:2000:
5.groupmod和groupdel 修改组属性及删除组
★组属性修改
☉格式:groupmod [options] GROUP
☉选项:
-g GID:修改GID;
-n new_naem:修改组名
★删除组
☉格式:groupdel GROUP
演示:
[root@CentOS6 ~]# tail -1 /etc/group grp1:x:2000: # 修改组ID [root@CentOS6 ~]# groupmod -g 2008 grp1 [root@CentOS6 ~]# tail -1 /etc/group grp1:x:2008: #修改组名 [root@CentOS6 ~]# groupmod -n grp8 grp1 [root@CentOS6 ~]# tail -1 /etc/group grp8:x:2008: # 删除组 [root@CentOS6 ~]# groupdel grp8 [root@CentOS6 ~]# groupdel testgrp [root@CentOS6 ~]# tail -3 /etc/group groupx3:x:503: mysql:x:27: mygrp:x:504:
5.产看用户id信息
★id
☉格式:id [OPTION]... [USER]
☉选项:
-u: 仅显示用户有效的UID;
-g: 仅显示用户所属的基本组ID;
-G: 仅显示用户所属的所有组的ID
-n:显示名字而非ID
演示:
[root@centos7 ~]# id uid=0(root) gid=0(root) 组=0(root) [root@centos7 ~]# id uid=0(root) gid=0(root) 组=0(root) [root@centos7 ~]# id centos uid=1001(centos) gid=1001(centos) 组=1001(centos) [root@centos7 ~]# id arclinux uid=1002(arclinux) gid=1003(arclinux) 组=1003(arclinux),1002(mygrp) [root@centos7 ~]# id -u arclinux 1002 [root@centos7 ~]# id -g arclinux 1003 [root@centos7 ~]# id -G arclinux 1003 1002 [root@centos7 ~]# id -G centos 1001 # -n 配合其他选项使用可显示对应的名称 [root@centos7 ~]# id -G -n arclinux arclinux mygrp [root@centos7 ~]# id -G -n centos centos [root@centos7 ~]# id -u -n arclinux arclinux [root@centos7 ~]# id -g -n arclinux arclinux
6.切换用户或以其他身份执行命令:su
★su
☉格式:
su[options...] [-] [user [args...]]
☉切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
root su 至其他用户无须密码;非root用户切换时需要密码
注意:
如果切换用户之后一定要使用 exit 或 logout 退出来,否则会影响系统。
☉换个身份执行命令:
su [-] UserName -c 'COMMAND'
☉选项:
-l,--login:su -l UserName相当于su - UserName
演示:
# 不完全切换,保存当前的工作环境 [root@centos7 ~]# su centos [centos@centos7 root]$ pwd /root # 还在root的环境下,保存当前的工作环境 # 完全切换,会读取目标用户的配置文件 [root@centos7 ~]# su - centos 上一次登录:五 2月 10 13:34:52 CST 2017pts/1 上 [centos@centos7 ~]$ pwd /home/centos # 换个身份后执行命令,并退出 [root@centos7 ~]# su - centos -c whoami centos [root@centos7 ~]# su - centos -c pwd /home/centos
练习:
1.创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution"
# 注意选项可以铁甲使用 [root@CentOS6 ~]# useradd -G bin,root -s /bin/csh -c 'Gentoo Description' gentoo [root@CentOS6 ~]# id gentoo uid=501(gentoo) gid=505(gentoo) groups=505(gentoo),0(root),1(bin)
2.创建下面的用户、组和组成员关系
名字为admins 的组
用户natasha,使用admins 作为附属组
用户harry,也使用admins 作为附属组
用户sarah,不可交互登录系统,且不是admins 的成员,natasha,harry,sarah密码都是centos
7.passwd命令
★设置用户密码:
☉格式:
passwd [OPTIONS] UserName:
passwd :修改自己的密码
passwd USERNAME:修改指定用户的密码,仅root用户有权限
☉选项:
-l:锁定指定用户;
-u:解锁指定用户;
-e :强制用户下次登录修改密码
-n DAYS:指定最短使用期限;
-x DAYS:最大使用期限;
-w DAYS:提前多少天开始警告;
-i DAYS:非活动期限;
--stdin:从标准输入接收用户密码;
用法:echo "PASSWORD" | passwd --stdin username
演示:
1.-e 选项,强制用户下次登录修改密码
[root@centos7 ~]# passwd -e centos 正在终止用户 centos 的密码。 passwd: 操作成功
8.gpasswd命令
★更改组密码:
☉格式:
gpasswd [OPTION] USERNAME GROUP
☉选项:
-a USERNAME:将user_name 添加至指定组中;
-d USERNAME:从指定组中移除用户user;
-A USERNAME1,USERNAME2,...: 设置有管理权限的用户列表
★newgrp命令:
☉格式:newgrp [-] [group]
newgrp -:会模拟用户重新登录,以实现重新初始化其工作环境
newgrp:临时切换基本组(只适用于当前用户切换)如果用户本不属于此组,则需要组密码;
演示:
1.gpasswd和newgrp
# 创建用户arclinux和组mygrp,并使mygrp为arclinux的附加组 [root@centos7 ~]# groupadd mygrp [root@centos7 ~]# useradd -G mygrp arclinux [root@centos7 ~]# id arclinux uid=1002(arclinux) gid=1003(arclinux) 组=1003(arclinux),1002(mygrp) # 为组mygrp设定密码 [root@centos7 ~]# gpasswd mygrp 正在修改 mygrp 组的密码 新密码: 请重新输入新密码: [root@centos7 ~]# getent gshadow mygrp mygrp:$6$FKckp/z12$FbiAfF07C27oweshUtwDsajfBVHLpE6CWZ6l0QMjehv1J3DJfSRB2y6Ac.XRrdSBdw2s9V5cDjXsLs0hxuXWm0::arclinux # 切换到用户arclinux [root@centos7 ~]# su - arclinux [arclinux@centos7 ~]$ whoami arclinux [arclinux@centos7 ~]$ id uid=1002(arclinux) gid=1003(arclinux) 组=1003(arclinux),1002(mygrp) # 创建的新文件,这时是属于基本组arclinux [arclinux@centos7 ~]$ touch test [arclinux@centos7 ~]$ ll 总用量 0 -rw-rw-r-- 1 arclinux arclinux 0 2月 10 15:03 test # 临时切换基本组 [arclinux@centos7 ~]$ newgrp mygrp # 此时基本组已经变为mygrp [arclinux@centos7 ~]$ id uid=1002(arclinux) gid=1002(mygrp) 组=1002(mygrp),1003(arclinux) # 再创建的新文件属于临时基本组mygrp [arclinux@centos7 ~]$ touch test2 [arclinux@centos7 ~]$ ll 总用量 0 -rw-rw-r-- 1 arclinux arclinux 0 2月 10 15:03 test -rw-r--r-- 1 arclinux mygrp 0 2月 10 15:04 test2 [arclinux@centos7 ~]$ exit exit [arclinux@centos7 ~]$ exit 登出 #------------------------------------------------------------------------- # 如果是不属于mygrp组的用户想临时切换到此组,就需要输入组密码 [root@centos7 ~]# su - centos 上一次登录:五 2月 10 14:59:16 CST 2017pts/1 上 [centos@centos7 ~]$ id uid=1001(centos) gid=1001(centos) 组=1001(centos) [centos@centos7 ~]$ newgrp mygrp 密码: # 需要输入密码 [centos@centos7 ~]$ id uid=1001(centos) gid=1002(mygrp) 组=1002(mygrp),1001(centos)
2.-a 选项和 -d 选项
# 将用户添加到指定的组中 [root@centos7 ~]# gpasswd -a centos mygrp 正在将用户“centos”加入到“mygrp”组中 [root@centos7 ~]# id centos uid=1001(centos) gid=1001(centos) 组=1001(centos),1002(mygrp) [root@centos7 ~]# getent gshadow mygrp mygrp:$6$FKckp/z12$FbiAfF07C27oweshUtwDsajfBVHLpE6CWZ6l0QMjehv1J3DJfSRB2y6Ac.XRrdSBdw2s9V5cDjXsLs0hxuXWm0::arclinux,centos # 从指定组中移除用户 [root@centos7 ~]# gpasswd -d centos mygrp 正在将用户“centos”从“mygrp”组中删除 [root@centos7 ~]# id centos uid=1001(centos) gid=1001(centos) 组=1001(centos) [root@centos7 ~]# getent gshadow mygrp mygrp:$6$FKckp/z12$FbiAfF07C27oweshUtwDsajfBVHLpE6CWZ6l0QMjehv1J3DJfSRB2y6Ac.XRrdSBdw2s9V5cDjXsLs0hxuXWm0::arclinux
8.groupmems 和groups命令
★更改和查看组成员 (操作的人是root)
☉格式:
groupmems [options] [action]
☉options
-g, --group groupname:更改为指定组
☉action (操作)
-a, --add USERNAME :指定用户加入组
-d, --delete USERNAME :从组中删除用户
-p, --purge :从组中清除所有成员
-l, --list :显示组成员列表
★groups
显示每个输入的用户名所在的全部组,如果没有指定用户名则默认为当前进程用户
☉格式:
groups [选项]... [用户名]...
演示:
#显示组成员列表 [root@centos7 ~]# groupmems -g mygrp -l arclinux #指定用户加入组 [root@centos7 ~]# groupmems -g mygrp -a centos [root@centos7 ~]# groupmems -g mygrp -l arclinux centos #从组中删除用户 [root@centos7 ~]# groupmems -g mygrp -d centos [root@centos7 ~]# groupmems -g mygrp -l arclinux #==================================================================================== # groups命令 [root@centos7 ~]# groups root [root@centos7 ~]# groups arclinux arclinux : arclinux mygrp [root@centos7 ~]# groups centos centos : centos
9.chage命令
★修改用户密码策略
☉格式:
chage [OPTION]... LOGIN
☉选项:
-d LAST_DAY:最后时间
-E, --expiredateEXPIRE_DATE:到期时间
-W, --warndaysWARN_DAYS:提前多少天开始警告
-m, --mindaysMIN_DAYS:最短使用期限
-M, --maxdaysMAX_DAYS:最大使用期限
-I, --inactive INACTIVE:非活动期限
☉下一次登录强制重设密:
chage -d 0 USERNAME
示例:
chage -m 0 –M 42 –W 14 –I 7 tom
chage -E 2016-09-10 tom
10.用户相关的其他命令
★chfn :修改finger信息
☉格式:
chfn [选项] [用户名]
☉选项:
-f, --full-name <全名> 真实姓名
-o, --office <办公> 办公号码
-p, --office-phone <电话> 办公电话
-h, --home-phone <电话> 住宅电话
★chsh:修改用户默认shell
☉格式:
chsh [选项] [用户名]
☉选项:
-s, --shell <shell>: 指定登录 shell
演示:
[root@centos7 ~]# finger Login Name Tty Idle Login Time Office Office Phone Host centos tty1 2:06 Feb 10 14:11 root root pts/1 Feb 10 13:18 (192.168.1.104) [root@centos7 ~]# chfn centos Changing finger information for centos. 名称 []: centos 办公 []: 110101 办公电话 []: 110110 住宅电话 []: 11223 Finger information changed. [root@centos7 ~]# finger centos Login: centos Name: centos Directory: /home/centos Shell: /bin/bash Office: 110101, 110110 Home Phone: x1-1223 On since 五 2月 10 14:11 (CST) on tty1 2 hours 9 minutes idle Last login 五 2月 10 15:23 (CST) on pts/1 No mail. No Plan. # chsh 修改用户默认shell [root@centos7 ~]# chsh centos Changing shell for centos. New shell [/bin/bash]: /bin/csh Shell changed. [root@centos7 ~]# getent passwd centos centos:x:1001:1001:centos,110101,110110,11223:/home/centos:/bin/csh [root@centos7 ~]# chsh -s /bin/bash centos Changing shell for centos. Shell changed. [root@centos7 ~]# getent passwd centos centos:x:1001:1001:centos,110101,110110,11223:/home/centos:/bin/bash
11.批量创建用户并修改用户口令
★newusers:批量创建用户;
★chpasswd :批量修改用户口令
演示:
1.创建passwd格式的文件 newuser.txt
[root@centos7 ~]# vim user.txt hehe:x:2000:2000::/home/hehe:/bin/bash hehe1:x:2001:2001::/home/hehe1:/bin/bash hehe2:x:2002:2002::/home/hehe2:/bin/bash
2.批量设置密码,同样要注意书写格式:
[root@centos7 ~]# vim p.txt hehe:123456 hehe1:654321 hehe2;centos
3.使用newusers和chpasswd批量创建用户和设置口令
# 批量创建用户 [root@centos7 ~]# cat user.txt |newusers 或 newusers < user.txt [root@centos7 ~]# tail -3 /etc/passwd hehe:x:2000:2000::/home/hehe:/bin/bash hehe1:x:2001:2001::/home/hehe1:/bin/bash hehe2:x:2002:2002::/home/hehe2:/bin/bash # 批量设置密码 [root@centos7 ~]# chpasswd < p.txt [root@centos7 ~]# tail -3 /etc/shadow hehe:$6$NVMTwWKV$fhX5XxvRAo58de8uXfenCgnJT6KyFOVeVcZDAw3z1aTomX1eC9DbknSqhPNm26jX.oMavvHoK02m4XUaIXfcC.:17207:0:99999:7::: hehe1:$6$eza5u/AJVej$SrXTC9fnHnCmndR1fSyqX.UXC1FkWwNw4ua6.m3DnqbqReaUoRcL7hznuMpa1U6Zmr4YAhVy52lANQrBL9TgY1:17207:0:99999:7::: hehe2:$6$4zwN/Mkjp7QBpHe/$BrmHawiGTOY8nt0uhwOBMo5NlU.HGkf5m58arGGAJuG/5VoSi7v8mcF1FPfwSG91A1JqehHnGimfZhSEgWBH01:17207:0:99999:7:::
4.复制家目录中的模板文件,初始化登录环境
[root@centos7 ~]# cp -a /etc/skel/. /home/hehe [root@centos7 ~]# cp -a /etc/skel/. /home/hehe1 [root@centos7 ~]# cp -a /etc/skel/. /home/hehe2 [root@centos7 ~]# ls -a /home/hehe . .. .bash_logout .bash_profile .bashrc .mozilla
练习:
创建sysadmins组,将用户user1、user2、user3加入sysadmins组中;将user3设置为sysadmins组的管理员;用user3登录,将用户user2从组中移除,设置sysadmins组的密码为 centos;设置user1在创建新文件时,文件的所属组为sysadmins;删除user1...3;删除组sysadmins
# 创建sysadmins组 [root@centos7 ~]# groupadd sysadmins # 创建用户 [root@centos7 ~]# useradd user1 [root@centos7 ~]# useradd user2 [root@centos7 ~]# useradd user3 # 将用户添加到指定的sysadmins组 [root@centos7 ~]# gpasswd -a user1 sysadmins 正在将用户“user1”加入到“sysadmins”组中 [root@centos7 ~]# gpasswd -a user2 sysadmins 正在将用户“user2”加入到“sysadmins”组中 [root@centos7 ~]# gpasswd -a user3 sysadmins 正在将用户“user3”加入到“sysadmins”组中 # 查看组成员列表 [root@centos7 ~]# groupmems -g sysadmins -l user1 user2 user3 # 设置user3位sysadmins组的管理员 [root@centos7 ~]# gpasswd -A user3 sysadmins # 切换到user3 [root@centos7 ~]# su - user3 [user3@centos7 ~]$ id uid=1004(user3) gid=1005(user3) 组=1005(user3),1002(sysadmins) # 执行从sysadmins组中删除用户user2 [user3@centos7 ~]$ gpasswd -d user2 sysadmins 正在将用户“user2”从“sysadmins”组中删除 # 设置组密码 [user3@centos7 ~]$ gpasswd sysadmins 正在修改 sysadmins 组的密码 新密码: 请重新输入新密码: [user3@centos7 ~]$ usermod -g sysadmins user1 -bash: /usr/sbin/usermod: 权限不够 [user3@centos7 ~]$ exit 登出 #设置user1的基本组为sysadmins(只有root有权限) [root@centos7 ~]# usermod -g sysadmins user1 [root@centos7 ~]# id user1 uid=1002(user1) gid=1002(sysadmins) 组=1002(sysadmins) # 切换到用户user1,并创建文件test [root@centos7 ~]# su - user1 [user1@centos7 ~]$ touch test1 [user1@centos7 ~]$ ll 总用量 0 -rw-r--r-- 1 user1 sysadmins 0 2月 10 17:32 test1