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 

  • 基本组以外的组属于用户的附加组(或者额外组)

Linux的用户和组管理_groupadd

注意:

  • 一个用户只有一个主组,但是可以属于零个或多个附加组;

  • 一般第一个为用户的主组,后面的都为附加组;

  • 系统识别用户不是看用户名,是看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日算起,多少天后帐号失效

没有意义,作为保留用

附图:

 密码期限如下图:

Linux的用户和组管理_useradd_02

演示:

[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,如下:

Linux的用户和组管理_用户和组管理_03

Linux的用户和组管理_useradd_04
   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

Linux的用户和组管理_用户和组管理_05


 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: 操作成功

Linux的用户和组管理_useradd_06


 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 :批量修改用户口令

  • chpasswd 除了可以批量修改用户的密码之外,也可以设置用户的单个口令。

  • 用法:echo USERNAME:PASSWORD |chpasswd 

    Linux的用户和组管理_userdel_07

演示:

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