用户类型

Linux用户类型分为三类:超级用户、系统用户和普通用户

超级用户

用户名未root或者USER ID(UID)为0的账号,具有一切权限,可以操作系统中的所有资源。root可以进行基础的文件操作及特殊的系统管理,还可以进行网络管理,可以修改系统中的所有文件。
日常中应该避免使用此类账号,错误的操作可能带来不可估量的损失,只有必要时才能用root登录操作

系统用户

正常运行系统中使用的账户。每个进程运行再系统里都有一个相应的属主,eg:某个进程以何种身份运行,这些身份就是系统里对应的用户账户。
ps:系统账户时不能用来登录的,eg:bin,daemon,mail

普通用户

普通使用者能使用Linux的大部分资源,一些特定的权限受到控制。用户只对自己的目录有写权限,读写权限受一定的限制,从而有效保证了Linux的系统安全,大部分用户属于此类。

linux用户

  • 管理用户: root 0
  • 普通用户:1-65535
    • 系统用户:1-499/1-999
    • 登录用户:500+/1000+

linux组

  • 管理组:root 0 (UID)
  • 普通组:
    1. - 系统组:1-499/1-999
    2. - 用户组:500+/1000+
  • 组类系:
    - 基本组:主组,通常情况下,和用户名同名,如果仅包含一个用户,还称之为私有组
    - 附加组:额外组,一个用户可以属于多个组
    

    用户管理机制

    用户和组相关的配置文件:
    /etc/passwd:用户及属性信息(用户名称、用户id、基本组id等等)
    /etc/group/:组及属性信息
    /etc/shadow/:用户密码及属性信息
    /etc/gshadow/:组密码及属性信息

    1.用户账号文件/etc/passwd

    每一行对应一个用户的信息,每行的字段之间使用“:”分隔,共7个字段
    [root@tenor ~]# 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
    
    用户名称:用户密码:USER ID : GROUP ID:相关注释:主目录:使用的shell
    
    (1)用户名称:在linux中使用唯一的字符串区分不同的用户,用户名可以使用字母、数字和下划线组成。
    ps:在linux中对字母大小写是敏感的,lhuan和LHUAN属于不同的用户
    (2)用户密码:在用户登陆时校验用户的合法性。
    超级用户root可以更改系统中所有用户的密码
    普通用户登录后使用passwd修改自己的密码
    在/etc/passwd中该字段一般为x,这是因为处于安全考虑该字段加密后的密码数据已经移动到/etc/shadow中
    ps:/etc/shadow文件是不能被普通用户读取的,只有超级用户root才能读取
    (3)用户标识(UERT ID ,UID)是一个数值,用于唯一标识Linux系统中的用户来区别不同的用户。
    在Linux系统中最多可以使用65535个用户名,用户名和UID都可以用于标识用户。
    相同UID的用户可以认为是同一个用户,同时它们具有相同的权限。
    (4)组标识(GROUP ID GID)当前用户所属的默认用户组标识
    当添加用户的时候,系统默认会建立一个和用户名一样的用户组,多个用户可以属于相同的用户组。
    用户的组标识号存在/etc/passwd文件中
    用户可以同时属于多个组,每个组也可以有多个用户,除了在/etc/passwd文件中指定其归属的基本组之外,/etc/group文件中也指明一个组所包含的用户
    (5)相关注释:用于存放用户的一些其他信息,eg:用户含义说明、用户地址等信息
    (6)主目录:定义用户主目录,登录后shell将该目录作为用户的工作目录。
    登录系统后可以使用pwd命令查看。超级用户root的工作目录为/root。
    每个用户都有自己的主目录,默认会在/home下建立与用户名一致的目录,同时建立用户时可以指定其他目录作为用户的子目录
    (7)使用的shell:shell是当用户登陆系统时运行的程序名称,通常是/bin/bash。
    用户可以自己指定shell,eg:tsh**

    2.用户密码文件/etc/shadow

    这个文件只有超级用户才能读取,普通用户没有权限读取。
    通过把加密后的密码移动到shadow文件中并限制只有超级用户root才能读取,可以保证Linux用户密码的安全性
    shadow文件由9个字段组成。
    [root@tenor ~]# cat /etc/shadow
    root:$1$zKGqAeSJ$3xxOaVEdF8XzpRDbbgzdk/:18297:0:99999:7:::
    bin:*:17632:0:99999:7:::
    daemon:*:17632:0:99999:7:::
    adm:*:17632:0:99999:7:::
    lp:*:17632:0:99999:7:::
    sync:*:17632:0:99999:7:::
    shutdown:*:17632:0:99999:7:::
    
    用户名:密码:上次修改密码的时间:两次修改密码间隔的最少天数:两次修改密码间隔的最多天数:提前多少天
    警告用户密码过期:在密码过期多少天后禁用此用户:用户过期时间:保留字段
    
    (1)用户名
    与/etc/passwdd中相同,每一行是一一对应的,这样就把passwd和shadow中的用户记录联系在一起
    (2)密码
    这个字段是经过加密的,如果有些用户的开头是“!”,就表示这个用户已经被禁用,不能再登录系统
    (3)上次修改密码的时间
    表示从1970年1月1号起到最近一次修改密码的时间间隔,以天数为单位
    (4)两次修改密码间隔的最少天数
    如果该字段为0,表示此功能被禁用
    如果该字段是不为0的整数,表示用户必须经过多少天需要修改密码
    (5)两次修改密码间隔的最多天数
    主要是管理用户密码的有效期,增强系统的安全性
    如果为99999,表示密码基本不需要修改
    (6)提前多少天警告用户密码过期
    在快超出有效期的时候,当用户登录系统之后,程序会提醒用户密码将要作废,以便及时修改
    (7)在密码过期多少天后禁用此用户
    表示用户密码作废后多少天系统会禁用此用户
    (8)用户过期时间
    指明用户作废的天数,从1970年1月1日开始的天数,如果这个字段为空,就表示该账号永久可用
    (9)保留字段
    目前为空,将来有用

    3. 用户组文件/etc/group/**

    用户保存用户组的所有信息
    用户组与用户之间属于多对多的关系,一个用户可以属于多个用户组,一个用户组也可以包含多个用户。
    用户登录是默认的组存放在/etc/passwd中
    文件由4个字段组成
    [root@tenor ~]# cat /etc/group
    root:x:0:
    bin:x:1:
    daemon:x:2:
    sys:x:3:
    adm:x:4:
    
    用户组名:用户组密码:用户组标识号:组内用户列表
    
    (1)用户组名
    可以由字母、数字、下划线组成,用户组名是唯一的,和用户名一样。
    (2)用户组密码
    存放的是用户组加密后的密码字。
    一般而言,linux系统的用户组都没有密码,即这个字段为空
    (3)用户组标识号
    GROUP ID ,GID和用户标识UID类似,也是一个整数,用户唯一标识一个用户组
    (4)组内用户列表
    属于这个组的所有用户的列表,不同用户之间用逗号分割,不能有空格。这个用户组可能是用户的主组,也可能是附加组

    4.组密码文件/etc/gshadow/

    [root@localhost ~]# cat /etc/gshadow
    root:::
    组名:组密码:密码禁用时间:过期时间
    

    用户管理命令

    useradd 添加用户

    | 参数 | 说明 | | —- | —- | | -d | 指定用户登录时的起始目录。如果不指定,使用系统默认值,一般为/home | | -g | 指定用户所属的群组,可以跟多个组 | | -G | 指定用户所属的附加群组,可以定义用户属于多个群组,每个群组使用“,”分割,不允许有空格 | | -m | 自动建立用户的主目录,如果目录不存在则自动建立 | | -s | 指定用户登录后使用的shell。默认是/bin/shel
    [root@tenor ~]# cat /etc/shells
    /bin/sh
    /bin/bash
    /sbin/nologin #系统用户,不允许登录
    /usr/bin/sh
    /usr/bin/bash
    /usr/sbin/nologin
    /bin/tcsh
    /bin/csh | | -u | 指定用户UID,UID不可以重复,但使用-o参数时多个用户可以使用相同的UID,手动建立用户时系统默认使用1000以上的数字作为用户标识 | | -r | 指定为系统用户 | | -c | 指定用户注释信息 | | -p | 指定用户密码 | | -e —expiredate EXPIRE_DATE | 用户有效天数,也就是设置过期日期 | | -f —inactive INACTIVE | 缓冲天数,非活动天数 |
创建用户的默认配置
[root@localhost ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1  
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

usermod 更改用户

参数 说明
-d 修改用户登录时的主目录,使用此参数对应的用户目录是不会自动建立的,需要手动建立
-e 修改账号的有效期限
-f 修改在密码过期后多少天即关闭该账号
-g 修改用户所属的群组
-G 修改用户所属的附加组
将用户添加到附加组中
[root@tenor ~]# usermod ccy -a -G root
[root@tenor ~]# id ccy -G
1002 0
[root@tenor ~]# id ccy -g
1002
-l 修改用户账号名称
-L 锁定用户密码,使密码无效
-s 修改用户登录后使用的shell
-u 修改用户ID
-U 解除密码锁定
解锁用户
[root@tenor ~]# usermod -L ccy
[root@tenor ~]# usermod -U ccy
usermod: unlocking the user’s password would result in a passwordless account.
You should set a password with usermod -p to unlock this user’s password.
如果解锁的用户没有密码,需要先使用usermod -p+密码 来设置密码,之后再解锁用户
[root@tenor ~]# usermod -p 13456 ccy
[root@tenor ~]# usermod -U ccy

userdel 删除用户

参数 说明
-r 删除用户主目录以及目录下的所有文件,并删除用户的其他信息,eg:设置的crontab定时服务等
eg:创建系统用户lj密码为zhangsan家目录为/home/eagles/zhangsan,注释信息'his '
附加组为root,shell为/sbin/nologin ,最后删除该用户及其家目录
[root@tenor ~]#  useradd -p zhangsan -d /home/eagles -c his  -s /sbin/nologin  -G root lj
[root@tenor ~]# userdel lj -r

passwd 更改或设置用户密码

超级用户root可以修改任何用户的密码,普通用户只能修改自己的密码

-n mindays 指定最短使用期限
-x maxdays 指定最大使用期限
-w warndays 提前多少前开始报警
-i Inactivedays 非活动期限
-g 修改组密码, gpasswd的等效命令
—stdin 从标准输出中接送用户密码
[root@tenor ~]# echo “1111111” | passwd —stdin zhangsan
zhangsan:$1$UADt1OI9$jOtDpueVyCFJZFKXhMSPz/:18299:0:99999:7:::
-S/—status 查看某个用户密码的状态
[root@tenor ~]# passwd ccy -S
ccy PS 2020-02-07 12 58 58 -1 (Alternate authentication scheme in use.)
第一列:返回值mino为用户名

第二列:LK 用户被锁住或者用户没有密码 PS用户有密码且没有被锁住
第三列:该用户密码的最后修改时间

第四列:最小时间,密码最小的生存期(天)

第五列:最大时间,密码最大的生存期(天)

第六列:警告时间,在密码失效前多少天用户开始收到警告提示

第七列:失效时间,密码的失效时间(-1表示没有失效时间)
eg:创建用户lisi,修改密码为passwd,指定最短试用期限3,最大使用期限7,提前2
[root@tenor ~]# useradd lisi 
[root@tenor ~]# passwd lisi
Changing password for user lisi.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@tenor ~]# passwd lisi -n 3 -x 1 -w 2
Adjusting aging data for user lisi.
passwd: Success

用户组管理命令

用户组就是具有相同特征的用户集合。
每个用户都有一个用户组,系统能对一个用户组中的所有用户进行集中管理,可以把相同属性的用户定义到同一个用户组中,并赋予该用户组一定的操作权限,这样用户组下的用户对该文件或目录就具备了相同的权限。
一个用户可以属于多个组,/etc/passwd中定义用户组为基本组,用户所属的组有基本组和附加组。如果一个用户属于多个组,该用户拥有的权限是它所在组的权限之和。

groupadd 添加用户组

参数 说明
-g 强制把某个ID分配给已经存在的用户组,该ID必须是非负且唯一的
-o 允许多个不同的用户组使用相同的用户组ID
-p 指定用户组密码
-r 创建一个系统组
groups + [username] 查看用户属于哪个组
[root@tenor ~]# groups ccy
ccy : ccy root


groupmod 修改用户组

参数 说明
-g 修改GID
-o 允许多个不同的用户组使用相同的用户组ID
-n 修改组名称
-R, —root CHROOT_DIR directory to chroot into chroot目录
-P, —prefix PREFIX_DIR prefix directory where are located the /etc/ files
/etc/
文件所在的前缀目录

groupdel 删除用户组

如果该群组中仍包括某些用户,则必须先删除这些用户后才能删除群组。
当有用户存在的时候,该用户组是不可以被删除的,删除属于该组的用户之后,用户组就可以被删除了。

gpasswd 修改组密码

[root@tenor ~]# gpasswd -h
Usage: gpasswd [option] GROUP

-a 添加用户到组中
-d 移除组中用户
-h —help
-Q 更改组的chroot目录
-r 删除组密码
-R restrict access to GROUP to its members
将对组的访问限制为其成员
-M 为组批量添加用户,设置组列表
-A 设置组管理员

id 查看用户所在的用户组

-g 输出gid(主组)
-G 输出gids(主组+附加组)
-u 输出uid
-n 输出name代替id
[root@tenor ~]# id ccy -n -u
ccy
[root@tenor ~]# id ccy -n -G
ccy root mxh
[root@tenor ~]# id ccy -n -g
ccy
-Z 只输入当前用户的安全上下文
d:—context(-Z)只在启用SELinux的内核上工作
-r 输出真实ID号
[root@tenor ~]# id ccy -r -u
1002

su 切换用户

su [username] 切换用户,但不读取用户配置信息
su - [username] 切换用户,读取用户配置信息(完全切换)
su - [uername] -c “command” 切换用户执行命令
[ccy@tenor ~]$ su -c root -c “cat /etc/shadow”
Password:
root:$1$HNfgpDBu$iMq3JCQof5Jjoq4yoyhBU0:18300:0:99999:7:::
ccy:19980117:18300:0:99999:7:::
[ccy@tenor ~]$
只是切换用户执行了一条命令,用户并没有切换
[root@localhost ~]# su lh
[lh@localhost root]$ su root
Password: 
#之后就切换为root

sudo

系统管理者的身份执行指令

命令 说明
sudo command 切换为root用户去执行命令
sudo -L 显示sudo设置
sudo -l 列出目前的权限
sudo !! 以 root用户执行上一条命令
sudo -u uggc vi ~www/index.html 以 uggc 用户身份编辑 home 目录下www目录中的 index.html 文件

[sudo] password for ccy:
ccy is not in the sudoers file. This incident will be reported. 解决??
image.png
image.png

1.切换到root用户
2.添加sudo文件的写权限  chmod u+w /etc/sudoers
3.编辑/etc/sudoers


youuser            ALL=(ALL)                ALL
%youuser           ALL=(ALL)                ALL
youuser            ALL=(ALL)                NOPASSWD: ALL
%youuser           ALL=(ALL)                NOPASSWD: ALL

第一行:允许用户youuser执行sudo命令(需要输入密码).
第二行:允许用户组youuser里面的用户执行sudo命令(需要输入密码).
第三行:允许用户youuser执行sudo命令,并且在执行的时候不输入密码.
第四行:允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码.


4. 撤销文件的写权限  chmod u-w /etc/sudoers


[root@localhost ~]# su ccy
[ccy@localhost root]$ sudo ls /root
[sudo] password for ccy: 
Sorry, try again.
[sudo] password for ccy: 
anaconda-ks.cfg