用户和组

一、Linux用户及用户组的基本概念

用户:用户是实现能够将有限的资源在多个使用者之间进行分配;、

用户组:用户组是指多个用户的集合,方便对一类需要同样权限的用户授权

Linux是多用户、多任务的操作系统。

    多用户指:多人同时使用系统资源;多任务:同时运行多个进程

Linux内核(2.6.x)已经可以支持到2^32 - 1 个标识符。

  • root : 0
  • 普通用户: 1 - 65535
    • 系统用户: 1-499(CentOS 6) ;  1-999(CentOS 7)
    • 登录用户: 500 - 60000(CentOS 6) ; 1000 - 60000 (CentOS 7)

3、 用户配置文件

用户和组

(1) 用户信息库: /etc/passwd

用户帐号    用户密码    用户ID    用户组ID    用户名全称    用户主目录    用户所使用的shell

  root            x                  0             0                root              /root                /bin/bash
 
  由于passwd不再保存密码信息,所以用x占位代表。
  若要使某个用户账户不能登录linux,只需设置该用户所使用的shell为/sbin/nologin即可。比如,对于FTP 账户,一般只允许登录和访问FTP服务器,不允许登录linux操作系统。若要让某用户没有telnet权限,即不允许该用户利用telnet远程登录和 访问linux操作系统,则设置该用户所使用的shell为/bin/true即可。若要让用户没有telnet和ftp登录权限,则可设置该用户的 shell为/bin/false。
  在/etc/shells文件中,若没有/bin/true或/bin/false,则需要手动添加:
[[email protected] ~]# echo "/bin/false">>/etc/shells
[[email protected] ~]# echo "/bin/true">>/etc/shells

格式(七段):account:password:UID:GID:GECOS:directory:shell
account: 用户名
password:占位符x;
UID:用户的ID号
GID:用户所属的主组的ID号;
GECOS:注释信息
directory:用户的家目录;
shell:用户的默认shell,登录时默认shell程序;

(2)密码存储位置: /etc/shadow
格式(九段):用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期宽限时间:账号失效日期:保留字段

  • login name:用户名
  • encrypted password:经过编码的密码
  • date of last password change:密码最近一次修改密码的时间
  • minimum password age:密码最短使用期限
  • maximum password age:密码最长使用期限:表示两次修改密码的最长间隔。
  • password warning period:警告时间:表示在密码快要过期之前的多少天开始警告用户修改密码。
  • password inactivity period:过期宽限时间:表示在密码过期以后,还允许用户登录的时间,只不过在这段时间里登录系统以后就必须要修改密码才能使用系统。
  • account expiration date:账号失效日期,该账号被禁用
  • reserved field:保留字段

(3)创建新用户默认属性: /etc/default/useradd
# useradd defaults file
GROUP=100                # 创建组
HOME=/home              # 默认家目录
INACTIVE=-1             
EXPIRE=
SHELL=/bin/bash          # 默认shell
SKEL=/etc/skel          # 默认家目录的文件
CREATE_MAIL_SPOOL=yes    # 自动创建mail

二、用户组
1. 用户组(用户容器)的分类
组标识:GroupID, GID
16bits二进制数字:0-65535
 (1)系统视角:管理员用户组&普通用户组
    管理员组:0
    普通用户组:1-65635
            系统用户组:1-499(CentOS6), 1-999(CentOS7)
            登录用户组:500-60000(CentOS6), 1000-60000(CentOS7)       
(2)用户视角:基本组&附加组
    用户的基本组:用户本身所属组
    用户的附加组:用户额外所支持的组



三、权限的生效机制

进程的运行者:

    是否与文件的属主相同,如果是,则以文件属主的身份来访问此文件;否则

    是否属于文件的属组,如果是,则以文件属组的身份来访问此文件;否则

    以文件的其它用户的身份来访问此文件;

用户和组

管理账户:useradd ,usermod,userdel等常见命令使用

useradd命令:添加用户  最后为用户名

    useradd  [选项]  登录名

    -c, --comment COMMENT:注释信息,一般为Full Name;

    -d, --home  /PATH/TO/HOME_DIR:家目录路径;目标路径不能事先存在,否则会有警告,不会复制skel相关的文件给用户;

    -g, --gid GROUP:用户的基本组组名或GID;

    -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:用户所属的附加组列表,彼此间用逗号隔开,中间没有空格;

1
2
3
# useradd -c "testuser" -d /home/testuser -g testgrp -G testgrp1 testuser
# id testuser
uid=5011(testuser) gid=5011(testgrp) groups=5011(testgrp),985(testgrp1)

    -m, --create-home:强制创建家目录;

            一般指当CREATE_HOME变量为设置时必须使用此参数 

    -M:不创建用户主目录,即使系统在 /etc/login.defs 中的设置 (CREATE_HOME) 为 yes;   

1
2
3
4
# useradd -M testuser2
# ls /home/
centos  gentoo   nologin    test1  test3
fedora  mageedu  slackware  test2  testuser

        -r, --system:创建一个系统账户

    创建系统用的UID在0-999之内。且不创建家目录

1
2
3
4
5
6
# useradd -r testuser3
# id testuser3
uid=990(testuser3) gid=984(testuser3) groups=984(testuser3)
# ls /home/
centos  gentoo   nologin    test1  test3
fedora  mageedu  slackware  test2  testuser

    -s, --shell SHELL:用户的登录 shell 名,默认为留空,让系统根据 /etc/default/useradd 中的 SHELL 变量选择默认的登录shell;

    -u, --uid UID:用户 ID 的数字值。此值必须为唯一的,除非使用了 -o 选项。此值必须非负,默认使用大于等于UID_MIN,且大于任何其他用户 ID 最小值。

1
2
3
4
5
6
7
8
9
10
11
12
# cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
# useradd -s /bin/bash -u 3001 testuser4
# grep "testuser4\>" /etc/passwd
testuser4:x:3001:3001::/home/testuser4:/bin/bash

注意:创建登录用户时,为其自定义的shell程序必须为可登录shell,且要位于/etc/shells文件中;

        useradd -D:显示创建用户时的默认设置;

useradd -D  选项:设置某默认选项;

    -e, --expiredate  EXPIRE_DATE:用户账号的过期期限;过期后会被锁定;日期以 YYYY-MM-DD 格式指定

    -f, --inactive INACTIVE:密码过期后,账户被彻底禁用之前的天数。0 表示立即禁用,-1 表示禁用这个功能。

1
2
3
4
5
6
7
8
9
10
# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
# useradd -e 2020-03-08 testuser5
# useradd -f 3 testuser6

    为用户提供默认配置的配置文件:

/etc/login.defs, /etc/default/useradd

影子口令文件:/etc/shadow

/etc/shadow每个字段的意思:

            登录名:密码:最近一次的修改时间:密码的最短使用期限:密码最长使用期限:提前警告的天数:非活动期限:账号的禁用日期:保留字段


usermod命令:修改账号信息

    -c, --comment  COMMENT

    -d, --home  HOME_DIR:修改家目录为新的位置,但一般应该同时使用-m选项以保证原家目录中的文件会移动到新目录中;

    -g, --gid GROUP

    -G, --groups  GRO    UP1[,GROUP2,...[,GROUPN]]]:修改时会覆盖原有的附加组;一同使用-a选项,表示为用户添加新的附加组;

    -l, --login  NEW_LOGIN:修改当前用户的用户名;

    -s, --shell  SHELL

    -u, --uid  UID

1
2
3
4
5
6
7
# grep "mageedu" /etc/passwd
mageedu:x:5015:5015:mageedu:/home/mageedu:/bin/bash
# usermod -c "this is mageedu" -m -d /opt/mageedu -g 5000 -G 6000 -l mageedugood -u 3000 mageedu
# grep "mageedu" /etc/passwd
mageedugood:x:3000:5000:this is mageedu:/opt/mageedu:/bin/bash
# id mageedugood
uid=3000(mageedugood) gid=5000(mage) groups=5000(mage),6000(xueba)

    -L, --lock:锁定用户的密码。这会在用户加密的密码之前放置一个“!”

    -U, --unlock:解锁用户的密码。这将移除加密的密码之前的“!”

1
2
3
4
5
6
7
8
# grep "mageedu" /etc/shadow
mageedugood:$6$MKpxQ.kL$o6IBhP9uXHlccwXLUubV.Xp.k4KVJ5mTEtPtDeyoz4O38FRq1wuiyH1vyYlHEy9uqRt7a1Mzzf0bCnCKrtxHL/:16868:0:99999:7:::
# usermod -L mageedugood
# grep "mageedu" /etc/shadow   #此处可以看到锁定后在密码前面有一个!号
mageedugood:!$6$MKpxQ.kL$o6IBhP9uXHlccwXLUubV.Xp.k4KVJ5mTEtPtDeyoz4O38FRq1wuiyH1vyYlHEy9uqRt7a1Mzzf0bCnCKrtxHL/:16868:0:99999:7:::
# usermod -U mageedugood
# grep "mageedu" /etc/shadow
mageedugood:$6$MKpxQ.kL$o6IBhP9uXHlccwXLUubV.Xp.k4KVJ5mTEtPtDeyoz4O38FRq1wuiyH1vyYlHEy9uqRt7a1Mzzf0bCnCKrtxHL/:16868:0:99999:7:::

userdel命令:删除用户账号

    userdel [选项]  登录名

    -r, --remove:用户主目录中的文件将随用户主目录和用户邮箱一起删除

1
2
3
4
5
6
7
8
9
10
11
12
# userdel -r mageedugood
# id mageedugood
id: mageedugood: no such user
# ls /home/  #加上-r选项后同时删除用户的家目录以及用户邮箱
centos  gentoo   slackware  test2  testuser   testuser5
fedora  nologin  test1      test3  testuser4  testuser6
# userdel test1
# ls /home/   #未加-r可以找到test1用户的家目录
centos  gentoo   slackware  test2  testuser   testuser5
fedora  nologin  test1      test3  testuser4  testuser6
# id test1
id: test1: no such user

passwd命令:密码管理命令

(1) passwd:修改自己的密码;

(2) passwd  username:修改其它用户的密码,仅root有此权限;

密码复杂度:

    (1) 不能少于8个字符;

    (2) 不能使用与过去的密码太相似的密码;

    (3) 应该使用四类字符中的至少三类;

1
2
3
4
5
6
# passwd test2
Changing password for user test2.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

选项:

    -l:锁定密码

    -u:解锁解密

    -d:清除密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# grep "test2" /etc/shadow
test2:$6$9E3j7rHK$XBRQVO0SVqivKXi7gHTadSjAkjpZz72YsGa60xHK.uUQlnHhsD8w4ttT466ADR9AuXz8KrBWhxRfnGHeFGXiZ/:16868:0:99999:7:::
# passwd -l test2
Locking password for user test2.
passwd: Success
# grep "test2" /etc/shadow
test2:!!$6$9E3j7rHK$XBRQVO0SVqivKXi7gHTadSjAkjpZz72YsGa60xHK.uUQlnHhsD8w4ttT466ADR9AuXz8KrBWhxRfnGHeFGXiZ/:16868:0:99999:7:::
# passwd -u test2
Unlocking password for user test2.
passwd: Success
# grep "test2" /etc/shadow
test2:$6$9E3j7rHK$XBRQVO0SVqivKXi7gHTadSjAkjpZz72YsGa60xHK.uUQlnHhsD8w4ttT466ADR9AuXz8KrBWhxRfnGHeFGXiZ/:16868:0:99999:7:::
# passwd -d test2
Removing password for user test2.
passwd: Success
# grep "test2" /etc/shadow
test2::16868:0:99999:7:::

    与usermod不同的是,passwd在锁定时密码前面有两个!!号

特殊用法:可以避免交互式

    --stdin:从标准输入接收密码;

echo "PASSWORD" | passwd  --stdin  USERNAME

1
2
3
# echo "mageedu"|passwd --stdin test2
Changing password for user test2.
passwd: all authentication tokens updated successfully.

组管理操作:groupadd,groupmod,groupdel常见命令

groupadd命令:添加组

    groupadd [options] group

    -g  GID:指明GID;

1
2
3
# groupadd -g 2000 testgrp
# grep "testgrp" /etc/group
testgrp:x:2000:

    -r, --system:系统组;

1
2
3
# groupadd -r testgrp1
# grep "testgrp1" /etc/group
testgrp1:x:985:


groupmod命令:修改组信息

    groupmod [选项] GROUP

    -g  GID 

    -n NEW_NAME:修改组名;

1
2
3
4
5
# grep "testgrp\>" /etc/group
testgrp:x:2000:
# groupmod -g 300 -n grptest testgrp
# grep "grptest" /etc/group
grptest:x:300:


groupdel命令:删除组

    groupdel [选项] GROUP

1
2
3
4
# grep "grptest" /etc/group
grptest:x:300:
# groupdel grptest
# grep "grptest" /etc/group

gpasswd命令:为组添加密码

    组密码文件:/etc/gshadow

gpasswd [选项] group

    -a USERNAME:把用户添加至组中;

    -d USERNAME:从此组中移除此用户;

1
2
3
4
5
6
7
8
# gpasswd -a test3 xueba
Adding user test3 to group xueba
# grep "xueba" /etc/gshadow
xueba:$6$bxtP5/lZt$umET9D6NeQrdWDGNG0LfpUQiJ5Poq8Xa0GoaDQqJFvqLVm3GWrCxOtDnCXbGjZngS4S7lumQE9hW18DgWPBrm.::test2,test3
# gpasswd -d test2 xueba
Removing user test2 from group xueba
# grep "xueba" /etc/gshadow
xueba:$6$bxtP5/lZt$umET9D6NeQrdWDGNG0LfpUQiJ5Poq8Xa0GoaDQqJFvqLVm3GWrCxOtDnCXbGjZngS4S7lu

 切换用户:

su  username

如果继续使用自己的环境变量和配置文件()

如果使用新用户的环境:

su - username

sudo(superuser do)    :sudo -l   列出sudo 运行的所有命令

用户和组信息查询: who

who命令用于显示谁登录了系统(show who is logged on),who am i与之相同。另外一个叫whoami的命令,只输出用户账号。而who或者who am i不仅显示账号,还显示终端文件名、时间、来源IP等。 

常用方式

格式:who

格式:who am i

简单显示当前登录系统用户的信息,可以轻松的获取当前登录系统的用户列表,包含使用终端登录。 

格式:who -a

格式:who -aH

显示所有用户的所有信息(The -a argument of the who command lists all available output for each user on your system.)

-H参数表明显示表头(显示列标题)。 

使用示例

示例一

[[email protected] root]# who
root     pts/7        Apr  8 20:37 (124.15.246.23)(分别是:登录名 终端 登陆时间 运城主机或x显示 这个是远程主机)
[[email protected] root]# who am i
root     pts/7        Apr  8 20:37 (124.15.246.23)
[[email protected] root]# whoami
root            (只输出用户账号
[[email protected] root]# who -m
root     pts/7        Apr  8 20:37 (124.15.246.23)
[[email protected] root]#  

示例二

who -a或who -aH的输出信息,没有-H参数不输出表头。

USER   用户登陆
LINE    用户登陆使用终端
TIME   用户登陆时间
LDIE    用户空闲时间,即至进行操作的时间
PID     用户登陆shell的进程ID

[[email protected] root]# who -aH
NAME       LINE         TIME         IDLE          PID COMMENT  EXIT        
                        Sep 10 16:45                14 id=si    term=0 exit=0
           system boot  Sep 10 16:45                           
           run-level 3  Sep 10 16:45                   last=S  
                        Sep 10 16:46              1591 id=l3    term=0 exit=0
LOGIN      tty3         Jun 23 12:53             29564 id=3    


id    显示登陆的用户以及组的相关信息

 groups 显示用户或所属的组