用户和用户组管理
Linux用户分类:
超级管理员:root用户,拥有最大的权限,可以对系统进行任何的操作(修改网络配置、服务配置、甚至删除/)
系统用户:为服务而生,专门运行服务的
普通用户:root用户手动创建
为什么要用户?
- 登录系统,操作系统的资源,执行命令
- 每个用户都能管理应用服务,保证系统的安全,每一个用户都可以运行自己的服务,提高系统的运行效率
每个用户都会有一个UID,一个用户对应一个UID
UID:类似于个人身份证。叫做用户的身份标识符
系统识别用户通过UID识别,个人识别用户通过用户名
用户的分类通过UID范围进行分类:
超级管理员的UID是0,root用户的UID刚好是0,所以root用户才是超级管理员
系统用户的UID范围0-999
普通用户的UID范围1000<x<60000
(可以通过修改/etc/login.defs这个文件,修改UID的上限)
用户和UID对应关系的文件(用户信息文件)
/etc/passwd 每一行是一个用户
root : x : 0 : 0 : root : /root : /bin/bash
root:用户名
x:密码占位符(表示此用户登录系统是否需要验证密码,有x表示登录系统需要验证密码)
0:用户的UID
0:用户组的GID(组ID)
root:用户的描述信息
(在图形化的登录页面展现;只有普通用户才可以显示,并且需要给普通用户设置密码)
/root:用户的家目录,用户登录默认的所在目录
/bin/bash:用户的登录shell(指的是用户登录系统运行的第一个程序,称之为shell程序。会给用户分配一个可以和系统交互的shell程序;如果是/bin/bash,则表示用户可以进行登录;如果是/sbin/nologin,表示用户无法登录)
误区:用户不能登录不代表不能使用
用户组
每一个用户都会属于一个用户组;用户组的作用是为了更好的管理用户,一个用户组里面可以有多个用户,也可以只有一个用户,在同一个用户组下的用户,会继承用户组的权限
用户组的分类:
私有组(属组),在创建用户的时候同时会创建一个同名的私有组,用户必须属于一个私有组,有且只有一个私有组
附加组(公共组),用户可以加入其他的用户组,这个组就叫做用户的附加组;用户加入附加组的目的就是为了获得附加组的权限
用户组和GID的对应关系(用户组信息文件)
/etc/group 每一行是一个用户组
root:x:0:
root:组名
x:密码占位符(有x表示登录组需要密码验证)
0:表示组ID
:用户组的成员
user2:x:1001:
用户组user2为什么组内成员没有user2?
这是因为用户组user2是用户user2的私有组,当某一个用户组是用户的私有组的时候,在/etc/group里面是不会显示这个用户的
用户密码文件
/etc/shadow
user : $6$BNN3mnZYElcKxB8C$151EIQ1xYP : 19707 : 0 : 99999 : 7: 2:20707 :
第一栏位:用户名
第二栏位:加密后的密码
$6$ 加密类型 6 sha512 5 sha216 1 md5
!! * 代表此用户没有密码
openssl passwd -6/-5/-1 密码 对密码进行加密
第三栏位:19707(天数),表示上一次修改密码的时间(从1970-01-01 开始计算,经过19707天)
第四栏位:0,代表密码的最短期限(如果是0,代表无限期)
第五栏位:99999,代表密码的最长期限(如果是99999,代表无限期)
8:9
第六栏位:7,代表密码过期前的警告时间(提前7天发送警告信息)
第七栏位:账户的锁定日期;2,代表在密码过期后的2天账号被锁定了
锁定的原理:就是在/etc/shaodw文件中,把第二个栏位前面加上!号
第八栏位:账号的失效日期(从1970-01-01 开始计算,经过20707天)
chage 修改密码期限
-m 密码最短期限
-M 密码最长期限
-W 密码警告日期
-E 账号的失效日期
修改user4用户的密码信息。最短期限是5天,最长期限是10天,提前2天告警,账号在2026-12-12失效
强制用户登录修改密码--->chage -d 0 user4
修改默认的密码策略:/etc/login.defs
用户管理
创建用户
useradd 用户(每次创建用户,用户的UID=/etc/passwd中最大的UID数+1)
useradd -u 1010 用户名
useradd -g 私有组 用户名
useradd -c 描述信息 用户名
useradd -d 家目录 用户名(不要提前创建用户家目录)
useradd -s 登录shell(/bin/bash 或 /sbin/nolgin) 用户名
删除用户
userdel 用户名
(创建用户的时候,会同时在/home创建一个同名的目录作为用户的家目录。并且在/var/spool/mail下面也会创建一个同名的文件作为用户的邮箱文件)
手动删除/home/username和/var/spool/mail/username
userdel -r 用户,完全的删除用户(删除用户家目录和邮箱文件)
修改用户的信息
usermod 修改已经存在的用户信息
-c 修改用户描述信息
-u 指定uid
-g 指定gid
-s 指定登录shell
-md 修改用户家目录,-m是移动家目录,-d是指定家目录(不要提前创建)
-l 修改用户名
-aG 添加附加组
-G 修改附加组(会覆盖掉之前的所有附加组;如果用户没有附加组,则会添加一个附加组)
-L 锁定密码 -U 解锁密码 (原理:在/etc/shadow中,在加密密码的栏位前面加上一个!)
用户组的管理
goupadd 创建组
-g 指定gid
-o 重复使用gid
groupdel 删除组
groupmod 修改组信息
-n eg:groupmod -n 新组名 旧组名
-g 修改组的ID(GID)
-o 重复使用组ID
gpasswd 修改组密码/管理组的成员
gpasswd -d B用户 A组名 从A组中删除B用户(删除B用户的附加组A)
gpasswd -a B用户 A组名 从A组中添加B用户(添加B用户的附加组A)
gpasswd 组名 给组修改密码 / newgrp 组名 登录到组 / exit 退出组
gpasswd -A A用户 B组名 将A用户设置为B组的管理员
设置组的管理员的作用:可以给这个组添加成员或者删除成员
groupmems 管理组的成员(root用户使用)
groupmems -g group2 -l 查看group2组内的成员
groupmems -g group2 -a user 将user用户添加到group2组内
groupmems -g group2 -d user 将user用户从gruop2组里面删除掉
groupmems -g group2 -p 清空group2组的所有用户
管理用户的密码和管理用户组的密码:passwd / gpasswd
用户组的密码文件
/etc/gshadow
group2 : $6$1bRzPBLX4ThrzqHdV2Wr0H.ceYD8mX85za6Ee0 : user2 : user3
group2:组名
$6$xxxx:加密后的组密码
user2:组的管理员
user3:组内的用户
文件权限管理
在系统中,每一个文件都有UID和GID(哪个用户创建文件和目录,文件和目录就会继承用户的UID和GID),通过UID和GID决定文件的访问权限
我们用户访问文件或者目录提示权限拒绝,表面上是用户访问,实则是用户启动的进程访问,只不过进程会继承用户的UID和GID;例如使用user用户 通过vim访问/etc/shadow这个文件的时候,实则是进程访问文件
user用户的UID和GID都是1000,那么程序所继承的UID和GID也是1000
比如用户去访问文件(进程访问文件)
假如进程的UID和文件的UID匹配,则使用UID权限访问
假如进程的GID和文件的GID匹配,则使用GID权限访问
如果进程的UID和GID都不匹配,则以其他人的权限访问
为什么需要文件权限?
如果没有文件权限,所有人都可以访问文件,如果文件比较私密(比如/etc/shadow)或者比较重要,那么对文件对系统来说是不安全,所以通过文件的权限来限制用户进行访问;
三种访问权限:
拥有人
拥有组
其他人
每个文件都有UID和GID
文件的UID就是文件的拥有人(user)
文件的GID就是文件的拥有组(group)
还有一种访问的权限,UID和GID都没有匹配上,则是其他人的身份进行匹配(other)
文件访问的优先级
当一个文件被访问的时候,会经历以下的步骤:
一个用户访问一个文件,实则是进程访问文件(进程会进程用户的UID和GID),通过用户的UID和GID进程访问
如果用户的UID和文件的UID匹配,则使用UID权限访问;
如果用户的GID和文件的GID匹配,则使用GID权限访问;
如果都不匹配,则使用其他人的权限匹配
查看文件和目录的权限
ls -l / ls –ld 文件/目录
- rw- r-- r--. 1 root root 10240 Dec 16 12:01 aa
第一个栏位 -:文件的类型 普通文件 d 表示目录 b表示块设备 …
第二个栏位:rw- 表示拥有人的权限(UID)
第三个栏位:r-- 表示拥有组的权限(GID)
第四个栏位:r-- 表示其他人的权限(other)
第五个栏位:. 表示aa文件是受到Selinux的保护
第六个栏位:1 表示文件的硬链接数(类似于系统中有几个副本,当硬链接数0的时候才是完全的删除)
第七个栏位:root 表示文件的UID(表示文件的拥有人)
第八个栏位:root 表示文件的GID(表示文件的拥有组)
第九个栏位:1020 表示文件的大小
第十个栏位:Dec 16 12:01 表示文件最后一个被修改的时间
stat
第十一个栏位:aa 文件名
系统中有3个权限
r:读
w:写
x:可执行(类似于一个命令的执行,可以当作一个命令执行)
-:无权限
rwx对于文件的意义:
r 表明可以读取文件的内容
w 表示可以编辑文件的内容
x 表示可以像Linux命令一样执行
如果文件没有任何的权限,文件的拥有人依旧可以进行强制保存
root用户可以随意修改其他人的文件
rwx对于目录的意义:
r 表示可以查看列出目录下的内容
w 表示可以修改目录的内容(创建和删除)
x 表示可以进入到该目录(和rx连着使用)
一个目录要想有意义。必须要有rx的权限
修改文件和目录的权限
chmod: /dir/: new permissions are -------w-, not ---------
chmod命令修改
字符修改权限
r w x
拥有人:u
拥有组:g
其他人:o
所有人=u+g+o=a
chmod u+x root
chmod g-rwx root
chmod u+rw,g+rwx,o-r root
使用 +- 进行赋权,是在原有的基础权限上进行修改
chmod u=rx root
chmod u=rx,g=rwx,o=r root
使用 = 直接赋权,会覆盖掉原有的文件权限
chmod a+x root
chmod -x root
chmod -R o+x /dir 递归修改权限,目录以及目录下的文件和子目录
通过数字方式修改权限
计算机世界只识别0和1,0代表无权限,1代表有权限
r w x ---> 4 2 1
1 0 0 4
0 1 0 2
0 0 1 1
所以文件和目录最大的权限是rwx--->7
rwx rwx rwx
7 7 7
小案例:
- -w- r-x ---. 1 root root 0 Dec 17 11:04 root
增加文件属主(拥有人)的执行权限
字符:chmod u+x root
数子:chmod 350 root
chown 修改用有人和拥有组
chown user root 修改root文件的拥有人为user
chown .user/:user root 修改root文件的拥有组为user
chown root:root root 修改root文件的拥有人和拥有组为root
chown -R … …. 递归修改拥有人、拥有组
P:root用户可以修改所有文件和目录的拥有人和拥有组;
文件的拥有人只能将文件的拥有组修改为自己的,无法修改文件的拥有人。
eg:-rwxr-----. 1 user root 10 Dec 17 11:44 root
[user@rhel9 dir]$ chmod :user root