Linux控制文件访问

188 阅读5分钟

列出文件和文件夹权限

权限的分类:

  • r(读): 可以读取文件的内容(可以列出目录的内容)
  • w(写):可以更改文件的内容(可以创建或删除目录中的文件)
  • x(执行):可以作为命令执行的文件(可以访问目录的内容)
    查看文件权限的方法:
  • 文件
    ls -l 文件名
  • 目录
    ls -ld 目录名
    我们可以用一个例子来加深理解:
    image.png
    我们在Test目录内使用ls -l命令列出所有文件
    可以看到所有文件都以长格式的形式展示出来
    对于所有文件而言
    最前面存在着10个字符
    拿 1.txt 举例子
    该文件的前面10个字符是:-rw-rw-r--
    我们在前面的Linux入门博客内说过
    第一个字符代表着该文件的类型
    那么后面9个字符又代表着什么呢?

这9个字符所代表的是不同的用户与组的权限
我们需要把9个字符分为3组
分别对应着 本工作用户 工作用户所在组 其他用户 的权限
对于1.txt文件而言
本工作用户所拥有的权限便是读和写
工作用户所在组的权限便是读和写
其他用户的权限便是只读

没有权限则用-作为占位符

stat查询

我们也可以使用stat + 文件名命令来进行文件信息查看
还是使用1.txt文件来举例子
image.png
可以看到,使用stat命令来进行信息查询所展示出来的信息更加详细

权限数字表示

权限除了可以用字母表示之外
还可以使用数字来进行表示

  • r(读)数字表示为4
  • w(写)数字表示为2
  • x(执行)数字表示为1

对于1.txt文件而言,由于权限是3个为一组
那么他的权限使用数字来表示便是 '6(4+2+0)' '6(4+2+0)' '4(4+0+0)'

用下面一张图可以表示清楚~ image.png

更改文件权限

我们可以通过chmod命令来修改文件对于某类用户(组)的操作权限
他的格式如下:
chmod + who + what + which + FILE

  • who(设置权限的对象):u(用户)、g(组)、o(其他人)、a(所有人)
  • what(属性操作符):+(增加权限)、-(减少权限)、=(精确设置)
  • which(权限内容):r(读)、w(写)、x(执行)
  • FILE:目标操作文件
    我们在下面举个例子来加深理解:
    image.png 我们使用root用户在Test文件夹中添加了一个root.txt的文件
    随后使用stat命令查看他的信息,可以发现它的权限是-rw-r--r--
    随后我们使用chmod a=rwx root.txt命令将这个文件的全部权限修改为-rwxrwxrwx
    再次查看发现已被修改 image.png
    随后我们使用kiosk普通用户进行文件查看,可以发现权限和root所看到的一样
    所以文件的权限修改成功
    image.png
    但是当我们尝试使用kiosk用户去修改这个由root所创建的文件
    会有这样的报错
    image.png
    我们只能通过sudo命令进行提权操作才能对这个文件进行修改 image.png
    我们也可以通过chmod + NNN + FILE命令的方式进行修改权限,如上

更改文件所属主和组

我们可以使用chown + OWNER[:GROUP] + FILE...命令来进行更改
image.png
这里将原来属于root的文件root.txt所属主更改为kiosk的所属
可以看到Uid从原来的0(root)变为了1000(kiosk)

特殊权限

在文件和目录中存在着两个特殊的权限

  1. SUID权限(对于用户来说,权限字符为's'):

    • 当一个可执行文件具有SUID权限时,执行该文件的用户将暂时拥有该文件的所有者的权限
    • 也就是说,无论是哪个用户执行这个文件,该用户在执行过程中都会临时获得该文件所有者的权限
    • SUID权限对于一些需要在非特权用户下执行特权操作的程序非常有用
  2. SGID权限(对于组来说,权限字符为's'):

    • 当一个可执行文件具有SGID权限时,执行该文件的组将变为该文件的所属组
    • 与SUID不同,SGID权限作用于组而不是个人用户,它会将执行者组的权限临时切换为该文件的所属组的权限
    • SGID权限常用于共享目录或文件夹,确保在该目录下的文件由该目录的所属组来管理

在文件权限中,SUID和SGID权限可以通过以下方式设置:

  • SUID权限:

    • 对于文件:chmod u+s filename 或 chmod 4xxx filename(其中 “x” 代表权限位)
    • 对于目录:chmod u+s directory 或 chmod 2xxx directory(数值第四位)
  • SGID权限:

    • 对于文件:chmod g+s filename 或 chmod 2xxx filename(数值第四位)
    • 对于目录:chmod g+s directory 或 chmod 4xxx directory(数值第四位)

控制默认权限

我们创建文件的时候,默认权限是6 4 4
创建文件夹的时候,默认权限是7 5 5
这是因为默认权限umask所带来的影响

文件默认权限

默认情况下,通常的 umask 值为 0022。这个 umask 值会屏蔽掉组写和其他用户写的权限
而这个0022加上6 4 4 和7 5 5之后的值分别是 0 6 6 6 和 0 7 7 7
那么问题来了,为什么文件的权限总是比文件夹少1呢
这是因为1对应的权限是x(操作),文件夹需要有访问操作权限,不然无法访问其中的文件
而这个0是前面所说的特殊权限所占的位置,默认是0
我们可以通过修改umask的值从而修改默认的文件与文件夹权限