一、用户的类别

  在linux系统中用户可以分为两大类:管理员与普通用户。管理员root具有最高权限,其ID号为0;普

通用户的ID号为1-65535,普通用户又可以分为两类:系统用户与一般用户,系统用户的ID号为1-499(系

统户用通常没有家目录,即不可以登录),而一般用户的ID号为500-65535。

  对于用户组也可以分为管理员组root和普通用户组,普通用户组也分为系统组与一般组。当从用户视

角对用户组进行划分时,分为私用组,基本组以及额外组。

私有组: 创建用户时, 如果没有为其指定所属的组, 系统会自动为其创建一个与用户名同名的组
基本组, 有效用户组
显示在/etc/passwd 中 GID 字段组, 为用户的基本组
额外组, 附加组
默认组以外的其它组/etc/group

二、用户与用户组相关配置文件

/etc/passwd: 用户及其属性信息

  此文件中存放的为用户与其相关的属性信息。可以分为7段,分别用':'隔开,它们分别代表的意义为:用户名:密码:UID:GID:注释:家目录:默认SHELL。此配置文件的权限为644,即其他用户都可以查看次文件内容。所以文件的密码段用x表示,而实际密码存放在/etc/shadow文件中

[root@mylinux ~]# ls -l /etc/passwd
-rw-r--r-- 1 root root 1529 3月   8 16:09 /etc/passwd
[root@mylinux ~]# 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

/etc/shadow: 用户密码及其相关属性

  用户实际存放密码的配置文件。次文件的权限为000,即任何人都不能查看,当然次权限对于root用户不起作用,root用户还是可以对次文件进行操作。此文件的信息每一行可以分为8段,每一行代表一个用户的密码信息,分别用':'隔开。其每一段代表的意义为:
  用户名:密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告时间:非活动时间:过期时间

  如果密码字段包含一些不是crypt(3)合法结果的字符,比如 ! 或 *,用户将无法使用unix密码登录(但是可以通过其它方法登录系统)。此字段可以为空,此时认证为特定的登录名时,不要求密码。

[root@mylinux ~]# cat /etc/shadow
root:$1$aRbkAvfC$zoFwPeuviOTZIZCrHQ0z51:16429:0:99999:7:::
bin:*:15980:0:99999:7:::
...
ftp:*:15980:0:99999:7:::
nobody:*:15980:0:99999:7:::
vcsa:!!:16429::::::
abrt:!!:16429::::::
ntp:!!:16429::::::

/etc/group: 组及其属性信息

  用户组及其属性信息。每一行代表一个用户组,每一行信息可以分为4段,分别表示:
    组名:密码:
GID:以此组为其附加组的用户列表

  与/etc/passwd配置文件相似,其第二段密码信息也是用x表示。实际密码存放的文件为/etc/gshadow

[root@mylinux ~]# cat /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon

/etc/gshadow:组密码及其相关属性

  次文件存放用户组密码及相关属性信息。每一行代表一个用户组,用户组信息可以分为4段,分别表示为:组名:密码:用户组成员:管理员

[root@mylinux ~]# cat /etc/gshadow
root:::
bin:::bin,daemon
daemon:::bin,daemon
sys:::bin,adm
adm:::adm,daemon
tty:::

创建用户时的默认配置文件:
/etc/default/useradd:新增用户的默认属性

[root@mylinux ~]# cat /etc/default/useradd 
# useradd defaults file
GROUP=100        #新建用户默认组,Centos、redhat等系统不会生效
HOME=/home       #用户家目录创建的地方
INACTIVE=-1      #密码过期后是否会失效的配置值,-1代表永远不是失效
EXPIRE=          #过期时间
SHELL=/bin/bash  #默认shell
SKEL=/etc/skel   #新建用户家目录参考目录,此目录下的内容会自动复制到新建用户家目录
CREATE_MAIL_SPOOL=yes#是否为新建用户创建邮箱

/etc/login.def: 用户配置信息

[root@mylinux ~]# 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
#一个密码可以使用的最大天数。如果密码比这旧,将会强迫更改密码。如果不指定,就假定为 -1,这会禁用这个限制。
PASS_MIN_DAYS   0
PASS_MIN_LEN    8
PASS_WARN_AGE   7
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                   500
UID_MAX                 60000
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN                   500
GID_MAX                 60000
#useradd,groupadd 或 newusers 创建的常规组的组 ID 的范围。
#
# 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
#文件模式创建掩码初始化为此值。如果没有指定,掩码初始化为 022。
# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes
# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512

/etc/skel: 创建用户时自动添加到用户家目录的配置文件

三、创建用户与密码管理 sueradd/userdel/passwd

useradd [options] LOGIN  创建用户

  -u UID: [UID_MIN, UID_MAX], 定义在/etc/login.defs

  -g GID:指明用户所属基本组,可为组名,也可以 GID

  -c "COMMENT": 用户的注释信息

  -d /PATH/TO/HOME_DIR: 以指定的路径为家目录

  -s SHELL: 指明用户的默认 shell 程序,可用列表在/etc/shells 文件中

  -G GROUP1[,GROUP2,...[,GROUPN]]]: 为用户指明附加组; 组必须事先存在

  -r 创建系统用户,不会为用户创建家目录,默认shell/sbin/nologin

  -D 创建用户时并改变默认值设定: /etc/default/useradd

  -m 创建用户时, 强制给用户创建家目录

  -M 创建用户, 但不创建家目录;

[root@mylinux ~]# useradd abc  -c 'test user'    #创建用户abc   
[root@mylinux ~]# cat /etc/passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...
[root@mylinux ~]# cat /etc/shadow                #查看用户密码
root:$1$aRbkAvfC$zoFwPeuviOTZIZCrHQ0z51:16429:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
...
abc:x:501:501:test user:/home/abc:/bin/bash     #abc用户密码段为'!!'用户此时没有密码
[root@mylinux ~]# passwd abc                    #为用户生成密码
更改用户 abc 的密码 。
新的 密码:
无效的密码: 过于简单化/系统化
无效的密码: 过于简单
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
[root@mylinux ~]# cat /etc/shadow              #abc用户密码已经生成              
root:$1$aRbkAvfC$zoFwPeuviOTZIZCrHQ0z51:16429:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
...
abc:$6$3O5koICf$prZGFRXOL8h8LdyibypFxf/2jgxxWe0AVE2Znp477hi7KlmJZdZs.BnZRnQsFeqZSTg6PyLwnnu9fr0Yfm9AG.:17235:0:99999:7:::

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

[root@mylinux ~]# ls /home/          #当前用户家目录
abc  dir1  mylinux  python_web  samba  shell
[root@mylinux ~]# userdel mylinux   #删除用户mylinux
[root@mylinux ~]# userdel -r abc    #删除用户abc,同时删除家目录
[root@mylinux ~]# ls /home/         
dir1  mylinux  python_web  samba  shell

passwd [OPTIONS] UserName: 修改指定用户的密码,仅root用户拥有权限使用此命令

passwd: 修改自己的密码

  -l: 锁定指定用户 

  -u: 解锁指定用户

  -n mindays:  指定最短使用期限 

  -x maxdays: 最大使用期限

  -w warndays:提前多少天开始警告 

  -i inactivedays: 非活动期限;

  --stdin: 从标准输入接收用户密码;
    如:
echo "PASSWORD" | passwd --stdin USERNAME
[root@mylinux ~]# passwd  -l abc1
锁定用户 abc1 的密码 。
passwd: 操作成功
[root@mylinux ~]# su abc1  #锁定用户对root无效,还是可以切换至被锁定用户
bash-4.1$ whoami
abc1
bash-4.1$ su abc1          #普通用户无法切换至锁定用户
密码:
su: 密码不正确
bash-4.1$ whoami
abc2
bash-4.1$ 
[root@mylinux ~]# passwd -u abc1 #解锁此用户
解锁用户 abc1 的密码 。
passwd: 操作成功
bash-4.1$ whoami
abc2
bash-4.1$ su abc1               #解锁用户abc1后,普通用户可以切换至此用户
密码:
bash-4.1$ whoami
abc1
[root@mylinux ~]# for i in `seq 10`; do useradd abcd$i ;echo '123456'|passwd --stdin abcd$i;done   #批量创建用户,为用户添加密码
更改用户 abcd1 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 abcd2 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 abcd3 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 abcd4 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 abcd5 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 abcd6 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 abcd7 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 abcd8 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 abcd9 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
更改用户 abcd10 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
[root@mylinux ~]# cat /etc/passwd
...
abcd1:x:503:503::/home/abcd1:/bin/bash
abcd2:x:504:504::/home/abcd2:/bin/bash
abcd3:x:505:505::/home/abcd3:/bin/bash
abcd4:x:506:506::/home/abcd4:/bin/bash
abcd5:x:507:507::/home/abcd5:/bin/bash
abcd6:x:508:508::/home/abcd6:/bin/bash
abcd7:x:509:509::/home/abcd7:/bin/bash
abcd8:x:510:510::/home/abcd8:/bin/bash
abcd9:x:511:511::/home/abcd9:/bin/bash
abcd10:x:512:512::/home/abcd10:/bin/bash
[root@mylinux ~]# for i in `seq 10`; do userdel abcd$i;done  #批量删除用户               
[root@mylinux ~]# cat /etc/passwd
...
hacluster:x:495:496:heartbeat user:/var/lib/heartbeat/cores/hacluster:/sbin/nologin
abc1:x:500:500::/home/abc1:/bin/bash
abc2:x:501:501::/home/abc2:/bin/bash
abc3:x:502:502::/home/abc3:/bin/bash

chage [options] [LOGIN]修改用户密码属性 

  -d 最近一次修改密码的时间 

  -E, --expiredate 过期时间

  -I, --inactive 失效时间

  -m, --mindays  最短使用期限

  -M, --maxdays  最长使用期限

  -W, --warndays 警告时间

四、修改用户属性 usermod/chsh/chfn

chsh:修改用户默认 shell

chfn:修改用户注释

usermod [OPTION] login  修改用户属性

  -u UID: 新 UID 

  -g GID: 新基本组 

  -s SHELL:新的默认SHELL

  -c 'COMMENT':新的注释信息 

  -l login_name: 新的用户名字

  -L: 锁定用户 

  -U: 解锁用户

  -e YYYY-MM-DD: 指明用户账号过期日期;
  -f INACTIVE: 设定非活动期限;
  -d HOME:新的家目录;原有家目录中的文件不会同时移动至新的家目录;若要移动则同时使用-m选项
  -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项

五、查看用户相关信息与切换用户 id/finger/pwck/su

finger: 查看用户账号信息

[root@mylinux ~]# finger abc1
Login: abc1                             Name: 
Directory: /home/abc1                   Shell: /bin/bash
Never logged in.
No mail.
No Plan.

pwck: 检查用户完整性

[root@mylinux ~]# pwck /etc/passwd
用户“adm”:目录 /var/adm 不存在
用户“uucp”:目录 /var/spool/uucp 不存在
用户“gopher”:目录 /var/gopher 不存在
用户“ftp”:目录 /var/ftp 不存在
用户“abrt”:目录 /etc/abrt 不存在
用户“saslauth”:目录 /var/empty/saslauth 不存在
用户“mysql”:目录 /application/mydata 不存在

id [OPTION]... [USER] 查看用户ID

-u: 显示 UID, 跟-n 一起使用则显示用户名
-g: 显示基本组 ID, 跟-n 一起使用则显示基本组名
-G: 显示所有组 ID, 跟-n 一起使用则显示所有组名
[root@mylinux ~]# id root
uid=0(root) gid=0(root) 组=0(root)
[root@mylinux ~]# id -u root
0
[root@mylinux ~]# id -g root
0
[root@mylinux ~]# id -G root
0

su [options...] [-] [user [args...]] 用户切换

-:使用指定用户的环境变量,不带此参数使老用户环境变量
-c:执行指定用户操作,但不切换用户
[root@mylinux ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@mylinux ~]# su abc1  #带环境变量切换
bash-4.1$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@mylinux ~]# su - abc1
-bash-4.1$ echo $PATH     #不带环境变量切换
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
[root@mylinux ~]# su -c whoami abc1    #使用abc1用户执行命令,但不登陆此用户
abc1
[root@mylinux ~]# su -c 'ls -l /home' abc1     
总用量 72
drwx------ 2 abc1 abc1 4096 3月  10 10:37 abc1
drwx------ 2 abc2 abc2 4096 3月  10 10:52 abc2
drwx------ 2 abc3 abc3 4096 3月  10 10:36 abc3
drwx------ 2  503  503 4096 3月  10 10:49 abcd1
drwx------ 2  512  512 4096 3月  10 10:49 abcd10
drwx------ 2  504  504 4096 3月  10 10:49 abcd2
drwx------ 2  505  505 4096 3月  10 10:49 abcd3
drwx------ 2  506  506 4096 3月  10 10:49 abcd4
drwx------ 2  507  507 4096 3月  10 10:49 abcd5
drwx------ 2  508  508 4096 3月  10 10:49 abcd6
drwx------ 2  509  509 4096 3月  10 10:49 abcd7
drwx------ 2  510  510 4096 3月  10 10:49 abcd8
drwx------ 2  511  511 4096 3月  10 10:49 abcd9
drwxr-xr-x 3 root root 4096 3月   6 19:27 dir1
drwx------ 2 abc1 abc1 4096 3月   8 16:09 mylinux
drwxr-xr-x 3 root root 4096 2月  21 19:11 python_web
drw-r--r-x 2 abc1 abc1 4096 4月  29 2016 samba
drwxr-xr-x 2 root root 4096 9月   3 2016 shell

六、用户组相关命令 groupadd/groupdel/groupmod/gpasswd/newgrp

newgrp: 临时切换基本组

  如果用户本不属于此组,则需要组密码

groupadd [OPTION]... group_name 创建用户组

-g GID: 指明GID号;[GID_MIN, GID_MAX]
-r: 
创建系统组;
[root@mylinux home]# groupadd abcd1
[root@mylinux home]# cat /etc/group
root:x:0:
bin:x:1:bin,daemon
...
haclient:x:496:
abc1:x:500:
abc2:x:501:
abc3:x:502:
abcd1:x:4002:   #新建的用户组
[root@mylinux home]# groupadd -g 4500 abcd2  #创建指定GID用户组
[root@mylinux home]# cat /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
...
abc2:x:501:
abc3:x:502:
abcd1:x:4002:
abcd2:x:45000

groupdel: 删除用户组

groupmod [OPTION]... group 用户组属性更改

-n group_name: 新的组名 

-g GID: 新的 GID

[root@mylinux home]# groupmod -g 4501 abcd2  #修改用户组GID
[root@mylinux home]# cat /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
...
abc1:x:500:
abc2:x:501:
abc3:x:502:
abcd1:x:4002:
abcd2:x:4501:

gpasswd [OPTION] GROUP     用户组密码设置

-a user: 将 user 添加至指定组中;
-d user: 将用户user从指定附加组中移除
-A user1,user2,...: 设置有管理权限的用户列表
[root@mylinux home]# gpasswd -a abc1 abcd2   #将用户组abcd2添加用户
正在将用户“abc1”加入到“abcd2”组中
[root@mylinux home]# gpasswd -a abc2 abcd2
正在将用户“abc2”加入到“abcd2”组中
[root@mylinux home]# cat /etc/gshadow     
root:::
bin:::bin,daemon
daemon:::bin,daemon
sys:::bin,adm
...
abc1:!::
abc2:!::
abc3:!::
abcd1:!::
abcd2:!::abc1,abc2
[root@mylinux home]# cat /etc/passwd   #passwd文件中只显示基本组GID,没有显示附加组
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
...
abc1:x:500:500::/home/abc1:/bin/bash
abc2:x:501:501::/home/abc2:/bin/bash
abc3:x:502:502::/home/abc3:/bin/bash
[root@mylinux home]# id abc1
uid=500(abc1) gid=500(abc1) 组=500(abc1),4501(abcd2)
[root@mylinux home]# gpasswd -d abc1 abcd2  #将用户abc1从abcd2用户组中移除
正在将用户“abc1”从“abcd2”组中删除
[root@mylinux home]# id abc1
uid=500(abc1) gid=500(abc1) 组=500(abc1)