当前位置:   article > 正文

万字详解Linux权限管理(用户管理+用户组管理+文权限管理)_linux文件夹权限分配用户及用户组

linux文件夹权限分配用户及用户组


Linux权限的概念

用户:指的是Linux操作系统中用于管理系统或者服务的

一问:管理系统到底在管理什么

答:Linux下一切皆文件,所以用户管理的是相应的文件

二问:如何管理文件呢?

答:

  1. 文件基本管理,比如文件的创建、删除、复制、查找、打包压缩等;文件的权限增加、减少等;
  2. 文件高级管理,比如程序文件的安装、卸载、配置等。终极目的是对外提供稳定的服务。

Linux下有两种用户:

  1. 超级用户(#)
  2. 普通用户($)
  • 超级用户可以在Linux系统下做任何事情,没有限制
  • 普通用户:在Linux下只能做有限事情

用户切换
语法:su [用户名]

从普通用户切换到root用户直接输入 su 命令(root 可以省略),再输入密码就好了

在这里插入图片描述

从root用户切换到普通用户,输入命令 su 用户名

在这里插入图片描述

sudo命令

语法:sudo [想要提升权限的命令]
功能:如果我们单纯想提升当前命令的权限,可以给指令带上sudo

比如我们作为一个普通用户要修改另外一个普通用户的密码(肯定是修改不了的)

在这里插入图片描述

(1)在root用户下,打开 /etc下的 sudoers文件

在这里插入图片描述

(2)在文件中找到 %wheel这一行,在当前行下面添加要提升当前命令权限的用户名

在这里插入图片描述
(3)添加成功后保存突出,那么当前用户就可以使用 sudo命令提升当前指令权限了
在这里插入图片描述
测试sodo

通过dudo命令修改其它用户的密码
注意:sudo命令每隔一段时间都需要输入当前用户的密码才能执行
在这里插入图片描述

一、用户管理

1. 用户类别

  1. root超级管理员:在Linux系统中拥有最高权限
  2. 系统用户:在 CentOS7中UID从1~999号是系统账号,系统账号默认不允许登录(一般提供给一些应用使用,比如apache)
  3. 普通用户:大部分是由root管理员创建的,UID的取值范围:CentOS7=> 1000 ~ 60000

2. 用户信息

在这里插入图片描述

root:x:0:0:root:/root:/bin/bash

第1列:用户名称
第2列:用户密码,使用一个x占位符,真实密码存储在/etc/shadow文件中
第3列:用户的编号UID,01-9991000 ~ 600004列:用户的主组编号GID
第5列:用户的备注信息(扩展,可以使用-c进行指定) useradd -c "mysql" mysql
第6列:用户的家目录,/root,超级管理员的家/home,普通账号的家
第7列:用户的Shell文件,常见/bin/bash或/sbin/nologin=>/bin/false
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

1. 添加用户(useradd )

语法:useradd [选项 选项的值] 新用户名称
常用选项:

  • -u 指定用户uid,唯一标识,必须唯一
  • -g 指定用户的默认组(主组)
  • -G 指定用户附加组(一个用户可以加入多个组,但是默认组只有一个)
  • -d 指定用户家目录(每个用户都有一个自己的家,并且默认在/home/xxx)
  • -s 指定用户默认shell,常见/bin/bash或/sbin/nologin
  • -r:指定用户为系统用户,如

示例1:当用户创建后在哪查看
第一种:通过命令查看tail /etc/passwd文件
第二种:使用 id [用户名]命令查看信息

在这里插入图片描述
在这里插入图片描述
示例2:创建一个zhangsan用户,指定用户根目录为/my_home

默认用户的根目录都在,/home目录下

先创建my_home目录
命令:useradd -d /myhome/zhangsan zhangsan
注意:创建目录要加/
在这里插入图片描述
示例3:创建一个test账号,真实存在的,但是其不允许登录操作系统

命令:useradd -s /sbin/nolog test

/sbin/nolog:这个shell是表示不能登录

在这里插入图片描述

示例4:在Linux系统中创建一个mysql系统账号,要求真实存在,但是不允许登录操作系统

命令:useradd -r -s /sbin/nologin mysql

2. 删除用户(userdel )

语法:userdel [选项] [用户名]

常用选项:

  • -r:删除用户的同时,删除用户的家目录
  • -f:强制删除用户(即使用户处于登录状态)

3. 修改用户信息(usermod

语法:usermod [选项 选项的值] [用户名]
常用选项

  • -g:修改指定的用户组,选项的值可以是用户组的id,也可以是组名
  • -G:表示指定用户的用户附加组,选项的值可以是用户组的ID,也
    可以是组名
  • -u:uid,用户的id(用户的标识符),系统默认会从1000 之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义
  • -d 指定用户家目录(每个用户都有一个自己的家,并且默认在/home/xxx)
  • -L:锁定用户(锁定后无法登录系统)
  • -U:解锁用户

1)修改用户的主组

用户组信息文件:/etc/group
示例:修改lisi用户的主组为hhy

命令:usermod -g 用户名

通过用户的GID修改

在这里插入图片描述
或者通过用户的名字修改

命令:usermid -g 目标用户 要修改的用户

在这里插入图片描述

2)修改用户附加组

示例1:修改lisi账号的附加组,将其添加到hhy中

命令:usermod -G hhy用户UID lisi

在这里插入图片描述
或者用命令:usermod -G hhy lisi

在这里插入图片描述

示例2:创建一个java组,在创建一个zhangsan的账号,修改wangwu的附加组为lisi与hhy

命令:usermod -G hhy,lisi zhangsan
在这里插入图片描述

在这里插入图片描述

通过id命令查看多个用户组

在这里插入图片描述

3)修改用户的默认根目录

注意:/home/也是包含在目录名的!
示例1:修改zhangsan的家目录为 /myhome/zhangsan(默认的为/home/zhangsan

命令:usermod -d /myhome/zhangsan zhangsan

在这里插入图片描述

出现用户名显示问题原因:我们在移动用户根目录的时候,并没有移动根目录中的配置文件

  • 解决方案1:把/etc/skel中的文件,拷贝到新的根目录中
    命令:cp -a /etc/skel/. /myhome/zhangsan/

    -a:all所有,复制时,保留文件的原有属性在这里插入图片描述

3)禁止用户登录

当创建了一个用户,不想让这个用户登录系统就可以用命令
命令:usermod -s /sbin/nologin [用户名称]

4)修改用户密码

命令:passwd

在这里插入图片描述
如果是root用户,就可以修改所有用户密码
命令:passwd [用户名]

5)修改用户账号信息(chage)

# chage --help
-l:列出用户的详细密码状态;
-d 日期:修改 /etc/shadow 文件中指定用户密码信息的第3个字段,也就是最后一次修改密码的日期,格式为 YYYY-MM-DD;
-m 天数:修改密码最短保留的天数,也就是 /etc/shadow 文件中的第4个字段;
注:几天后才能修改一次密码
-M 天数:修改密码的有效期,也就是 /etc/shadow 文件中的第5个字段;
注:每隔多少天更新一次密码
-W 天数:修改密码到期前的警告天数,也就是 /etc/shadow 文件中的第6个字段;
-i 天数:修改密码过期后的宽限天数,也就是 /etc/shadow 文件中的第7个字段;
注:过期后还可以使用的天数,达到这个天数后,账号失效

-E 日期:修改账号失效日期,格式为 YYYY-MM-DD,也就是 /etc/shadow 文件中的第8个字段;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
获取用户密码详情
  • -l:列出用户的详细密码状态
    在这里插入图片描述
    示例1:新创建一个账号cat,设置初始化密码为123456。要求用户第一次登陆后必须强制修改用户的密码
    实现思路:把密码的最后修改事假重置为0(回到1970-01-01)

命令:chage -d 0 cat

在这里插入图片描述
登录要设置新密码

在这里插入图片描述

设置账号过期时间

示例1:设置cat账号的过期时间为2018-01-08
命令:chage -E "2018-01-08" cat

在这里插入图片描述
示例2:设置cat账号10天后过期
命令:chage -E $(date +%F -d '+10 days') cat

在这里插入图片描述
示例3:设置cat用户40天后密码过期,至少3天后才能修改密码,密码过期前7天开始收到告警信息

命令:chage -M 40 -m 3 -W 4 cat

在这里插入图片描述

二、文件权限管理

1. 文件拓展名

我们都知道,Windows是依赖文件的拓展名来区分文件的,比如 “.txt是文本文件”,“.exe是可执行文件”,但Linux不是通过拓展名来区分文件类型的,Linux的拓展名只是为了更好的区分文件类型

2. 文件类型

常见的文件类型主要是普通文件和目录

  • -:普通文件(文本、可执行程序、库)
  • d:目录
  • c:字符文件、显示器、键盘
  • p:管道文件
  • l:链接文件(类似Windows快捷方式)
  • s:套接口文件(socket)
  • b:块设备文件(比如硬盘)

3. 常见的系统文件目录

  • /bin/:存放系统命令,普通用户和root都可以执行(比如 ls、pwd)
  • /boot/:系统启动目录,保存与系统启动相关的文件,入内核文件和启动引导程序
  • /dev:设备文件保存位置
  • /etc/:配置文件保存位置,系统内所有采用默认安装方式(rpm安装)的服务配置文件全部保存在此目录中,比如用户信息、服务的启动脚本、常用服务的配置文件等
  • /home/:存放普通用户的根目录(每个用户都有一个根目录)
  • /lib/:系统调用的函数库保存位置
  • /media/:挂载目录。系统用来挂载媒体设备,如软盘和光盘
  • mnt:挂载目录,早期的Linux中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如U盘、移动硬盘和其它操作系统分区
  • misc:挂载目录,系统建议采用来挂载NFS服务的共享目录,虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的
  • opt第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中,不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件
  • /root/:root的主目录,普通用户主目录在/home/下,root主目录直接在 “/” 下
  • sbin:保存系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看
  • srv:服务数据目录,一些系统服务启动后,可以在这个目录中保存所需要的数据
  • /tmp:临时目录,系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。这个目录不建议保存重要数据,最后定期清楚tmp目录的数据
  • lost+found/:当系统意外崩溃或意外关机时,产生的一些文件碎片会存放在这里。在系统启动的过程中,fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如,/lost+found 就是根分区的备份恢复目录,/boot/lost+found 就是 /boot 分区的备份恢复目录
  • proc:虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如 /proc/cpuinfo 是保存 CPU 信息的,/proc/devices 是保存设备驱动的列表的,/proc/filesystems 是保存文件系统列表的,/proc/net 是保存网络协议信息的
  • sys:虚拟文件系统。和 /proc/ 目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息

4. 文件访问者的分类(人)

对对Linux的用户权限分类,可以分为三类

  1. 文件拥有者(就是创建文件的人)
  2. 文件所属组(文件属于哪个组)
  3. 其它人(other)(不是文件拥有者也不属于文件所属组的人)

解释:
对于一个用户,无论是root还是普通用户都能充当 拥有者和所属组或者是其它

文件所属组就是文件属于哪个组,每个文件在创建时默认都是属于创建人的那个小组。

举个列子
比如一台Linux服务器上有两个组,A组不想让B组的人看见A组的代码或文件,就可以通过文件所属组的权限来让自己小组的人能看见,让组外的其它人开不见。
这样的分组,可以灵活分配让大家的团队意识更强,如果没有所属组这个分类的话就会非常乱。
所以所属组就是为了更灵活的进行权限配置,满足团队协作

在这里插入图片描述
通过查看文件详细信息可以看到,文件所属组和文件拥有者

在这里插入图片描述

5. 文件类型和权限

在这里插入图片描述

在这里插入图片描述

在Linux当中文件类型是和拓展名没有关系的
文件信息的前一段由10个字符组成,分别表示不同的意思

第一个字符:文件类型
后续9个三个为一组,分别表示你

  • 文件所属者权限
  • 文件所属组权限
  • 其它人的权限

在这里插入图片描述

文件权限表示

权限属性

  • r:读取
  • w:写入
  • x:可执行
  • -:无权限

r读权限:

  • 对于目录:一个目录拥有r权限,说明可以查看该目录里的内容
  • 一个普通文件拥有r权限,说明可以查看该文件的内容(cat/head/tail/less/more等命令查看)
  • 读权限r(read)用数字表示是4

w写权限:

  • 对于目录:一个目录拥有w权限,说明可以在该目录里创建、删除、重命名等操作(mkdir/touch/mv/rm等)
  • 对于普通文件:一个普通文件拥有w权限,说明可以修改该文件的内容(vi/vim编辑器编辑文件)
  • 写权限w(write)用数字表示是2

x可执行权限:

  • 对于目录:一个目录拥有x权限,说明可以进入或切换到该目录里(cd命令)
  • 对于普通文件:个普通文件拥有x权限,说明可以执行该文件(一般程序文件、脚本文件、命令都需要执行权限)
  • 执行权限x(execute)用数字表示是1
(1)字符表示法
符号表示权限
r - -只读权限
- w -只写权限
- - x仅可执行权限
r w -可读可写权限
- w x可写可执行权限
r - x可读可执行权限
r w x可读可写可执行权限
(2)八进制表示法

假如把三个权限位看成三个比特位,1代表有权限0代表没有权限,那么三个比特位最大能表示的数字是7,刚好够表示所有情况。
比如:1 1 1 表示可读可写可执行,1 0 0 表示只有读权限,0 0 0 表示没有任何权限

在这里插入图片描述
如果用8进制表示这三个比特位就刚好表示从0到7的所有情况

符号表示二进制表示八进制表示权限
- - -0 0 00无任何权限
- - x0 0 11仅可执行权限
- w -0 1 02只写权限
- w x0 1 13可写可执行权限
r - -1 0 04只读权限
r - x1 0 15可读可执行权限
r w -1 1 06可读可写权限
r w x1 1 17可读可写可执行权限

设置文件权限

chmod命令

功能:设置文件的访问权限
语法:chmod [参数] [权限] [文件名]
注意:只有文件的拥有者和root才可以修改文件的权限
选项可以用字符也可以用3位8进制

用户表示符+、-、=

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限

用户符号

  • u:文件拥有者
  • g:拥有者同组用户
  • o:其它用户
  • a:所有用户
字符选项示例

取消文件所属者的读取和写入权限

在这里插入图片描述
取消用户所属组的所有权限
在这里插入图片描述
给其他用户添加写权限
在这里插入图片描述
取消所有用户的写权限

在这里插入图片描述
如果要同时设置不同的用户权限可以用 逗号隔开

在这里插入图片描述
=示例
可以直接用 =给对应用户赋予对应的权限

在这里插入图片描述

八进制选项示例
符号表示二进制表示八进制表示权限
- - -0 0 00无任何权限
- - x0 0 11仅可执行权限
- w -0 1 02只写权限
- w x0 1 13可写可执行权限
r - -1 0 04只读权限
r - x1 0 15可读可执行权限
r w -1 1 06可读可写权限
r w x1 1 17可读可写可执行权限

在这里插入图片描述
-R 递归修改权限

-R递归修改文件权限
在这里插入图片描述

6. 设置文件拥有者(chown)

语法:chown [参数] [用户名] [文件名]
功能:修改文件拥有者
常用选项:-R递归修改文件拥有者

注意:修改文件拥有者需要root用户,或者用sudo命令提升权限

在这里插入图片描述
使用sudo命令提升权限

sudo命令使用教程

在这里插入图片描述

7. 设置文件所属组(chgrp命令)

语法:chgrp [参数] [要修改新用户组名]
功能:修改文件所属组
常用选项:-R递归修改文件或者目录的所属组

注意:chgrp也需要 sudo命令提升权限
在这里插入图片描述

8. 同时修改文件所属者和所属组

语法:sudo chown [用户名]:[用户名] [文件名]

在这里插入图片描述

9. umask命令

基本使用

语法:umask
功能:查看或修改文件掩码
为什么创建的普通文件,或者对应都有一个默认权限,默认权限为何又是当前的样子?

  • 新建的文件默认权限是·0666
  • 新建的目录默认权限是 0777
    这两默认的权限位只要关注后面三位即可,文件权限上面讲了使用八进制位标识

我们发现文件和目录的默认权限,和我们创建出来的文件和目录和默认权限不一样。
这是为什么呢?

在这里插入图片描述

其实真正的权限位是通过计算得来的
计算方法为,先将umask按位取反再按位与上默认的文件或者目录权限值
(~umask)&[文件或者目录的权限值]

在这里插入图片描述

如果我们将文件掩码修改成 777
那么默认的文件权限就是 不可读、不可写也不可执行

在这里插入图片描述
就可以理解为凡是在 umask中出现的权限位,都不应该在 最终 权限位中出现
最终权限 = 默认权限&(~umask)
在这里插入图片描述

永久设置umask值

修改配置文件

全局配置文件(针对所有用户所有进程) =>  针对所有用户有效
/etc/profile
系统和用户的环境变量信息,当用户第一次登录时,该文件被读取
/etc/bashrc
每个运行的bash信息(系统别名、函数及默认权限的定义),当bash被打开时,该文件被读取

局部配置文件(针对某个特定用户以及用户的所有进程)	=>  针对当前用户有效
~/.bashrc
当前用户的bash信息,当用户登录和每次打开新的shell时该文件被读取
~/.bash_profile
当前用户的环境变量,当用户登录时,该文件被读取
~/.bash_history
保存当前用户历史命令的文件
~/.bash_logout
当用户退出bash或者终端时,会首先执行该文件里的代码,然后再退出
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

10. 目录权限

  • 可执行权限:如果没有可执行权限,就无法cd到目录中
  • 可读权限:如果没有可读权限,则无法用ls等其它查看命令查看目录中的文件内容
  • 可写权限:如果目录没有可写权限,就无法在目录中创建文件,也无法在目录中上删除文件

那么问题来了。
文件权限只有读写和可执行,并没有删除权限,那么就是说只要某个用户只要有写目录的权限,用户就可以删除目录中的文件,而不用管这个用户是否有这个文件的写权限

我们发现hhy 用户也可以删除root用户的文件
在这里插入图片描述

四、ACL访问控制

ACL,是Access Control List(访问控制列表)的缩写,在Linux系统中,ACL可实现对单一用户设定访问文件的权限

1. getfacl命令

语法:getfacl [文件或目录]
作用:查看文件的ACL策略以及权限

在这里插入图片描述

2. setfacl命令

语法:setfacl [选项] [文件或目录名称]
作用:给某个文件设置ACL权限
常用选项:

  • -m:修改 acl策略
  • -x:去掉某个用户或者某个组的权限
  • -b:删除所有的acl策略
  • -R:递归目录

kefu用户对/data/kefu目录拥有读写执行权限

命令:setfacl -R -m u:kefu:rwx /data/kefu
在这里插入图片描述

五、高级权限

1. 粘滞位

注意:粘滞位一般用于公开的目录上,也就是其它用户有权,读写执行
语法:chmod +t [目录名]
只要给目录加上粘滞位,其它用户就无法删除你的文件了

注意:如果这个目录本身就是你自己的那么你想怎么删就怎么删,加粘滞位也没用

在这里插入图片描述

在这里插入图片描述

2. 冒险位

命令:chmod u+s [文件名]
冒险位(u+s):S

  • 冒险位,指文件操作者(用户)临时拥有文件拥有者的权限
  • 冒险位,一般针对的是命令或者脚本文件
  • 冒险位,用字母表示是s或S;数字表示是4

如/usr/bin/passwd文件,因为用户会自己修改密码,就需要修改这个文件,当这个文件又是root的,就需要设置为冒险位,临时拥有root的权限来更新密码

在这里插入图片描述
在这里插入图片描述

3. 强制位

命令:chmod g+s [文件名]

  • 强制位一般针对的是目录(如果一个目录拥有强制位,那么任何用户在该目录里所创建的任何文件的属组都会继承该目录的属组。)
  • 强制位,用字母表示是s或S;数字表示是2
    在这里插入图片描述

六、用户和用户组管理

针对不同用户分配不同的权限,不同权限可以限制用户可以访问到的
系统资源
可以提高系统的安全性
帮助系统管理员对使用系统的用户进行跟踪

用户组的管理包括用户组的添加、删除和修改

常用文件信息

  • /etc/passwd :用户配置文件,存储用户的基本信息
  • /etc/group:存储用户组的信息
  • /etc/shadow:存储用户的密码信息

用户组管理

用组添加(groupadd )

语法:groupadd [参数 选项值] [用户组名]
作用:添加用户组
常用选项:

  • -g:设置用户组id数字,如果不指定,则默认从1000之后递增(0~999都是系统的id),创建用户组时指定用户组编号GID,0代表超级管理员root组,1-999代表系统用户组,1000以后代表普通用户组

用户组的信息文件 /etc/group

用户名 : 密码(占位符):用户组id:这个组所包含的用户(附属组)
注意:附属组只显示其它用户设置当前组为附属组才会显示,如果当前用户的主组就是自己则不会显示
比如 hhy就不会出现在自己的附属组里

在这里插入图片描述
如何判断用户组是否创建成功
命令:tail -1 /etc/group

在这里插入图片描述

用户组修改(groupmod )

语法:groupmod [选项 选项值] 用户组名
常用选项:

  • -g :gid 缩写,设置一个自定义的用户组id数字
  • -n:name的缩写,设置新的用户组的名称

示例:修改 test用户组,将组id改为1100,组名改为 my_test

在这里插入图片描述
在这里插入图片描述

用户组删除

语法:groupdel [用户组名]
注意:如果该用户组是某个用户的主组则无法删除
在这里插入图片描述

附属组管理(gpasswd)

设置组密码:gpasswd 组名
移除组密码:gpasswd -r 名称
命令:gpasswd [选项 选项的值] 用户组的名称

  • -a :添加用户到组,append追加
  • -d :从组中删除成员,delete移除
  • -A :指定管理员,Admin管理员
  • -M :指定组成员,可以批量添加用户到组中

-a-M的区别

  • -a一次只能追加一个用户到附属组中(-a,append,追加的形式,原有用户不覆盖)
  • -M一次可以追加多个用户到附属组中(覆盖追加,先把原有用户删除,然后添加我们的用户)
1)添加用户到附属组

示例1:创建三个用户user1~uesr3,将user1添加到mytest组里(附属组里)

命令:usermod -G test user1

在这里插入图片描述
或者用命令:gpasswd -a user1 mytest

在这里插入图片描述
示例2:把user1和user2添加到mytest组中

命令:gpasswd -M user2,user3 mytest

在这里插入图片描述

2)从附属组中移除某个账号

命令:gpasswd -d [移除的用户名称] [附属组名称]

在这里插入图片描述


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/542250
推荐阅读
相关标签
  

闽ICP备14008679号