列出文件和文件夹权限
权限的分类:
- r(读): 可以读取文件的内容(可以列出目录的内容)
- w(写):可以更改文件的内容(可以创建或删除目录中的文件)
- x(执行):可以作为命令执行的文件(可以访问目录的内容)
查看文件权限的方法: - 文件
ls -l文件名 - 目录
ls -ld目录名
我们可以用一个例子来加深理解:
我们在Test目录内使用ls -l命令列出所有文件
可以看到所有文件都以长格式的形式展示出来
对于所有文件而言
最前面存在着10个字符
拿 1.txt 举例子
该文件的前面10个字符是:-rw-rw-r--
我们在前面的Linux入门博客内说过
第一个字符代表着该文件的类型
那么后面9个字符又代表着什么呢?
这9个字符所代表的是不同的用户与组的权限
我们需要把9个字符分为3组
分别对应着 本工作用户 工作用户所在组 其他用户 的权限
对于1.txt文件而言
本工作用户所拥有的权限便是读和写
工作用户所在组的权限便是读和写
其他用户的权限便是只读
没有权限则用-作为占位符
stat查询
我们也可以使用stat + 文件名命令来进行文件信息查看
还是使用1.txt文件来举例子
可以看到,使用stat命令来进行信息查询所展示出来的信息更加详细
权限数字表示
权限除了可以用字母表示之外
还可以使用数字来进行表示
- r(读)数字表示为4
- w(写)数字表示为2
- x(执行)数字表示为1
对于1.txt文件而言,由于权限是3个为一组
那么他的权限使用数字来表示便是 '6(4+2+0)' '6(4+2+0)' '4(4+0+0)'
用下面一张图可以表示清楚~
更改文件权限
我们可以通过chmod命令来修改文件对于某类用户(组)的操作权限
他的格式如下:
chmod + who + what + which + FILE
- who(设置权限的对象):u(用户)、g(组)、o(其他人)、a(所有人)
- what(属性操作符):+(增加权限)、-(减少权限)、=(精确设置)
- which(权限内容):r(读)、w(写)、x(执行)
- FILE:目标操作文件
我们在下面举个例子来加深理解:
我们使用root用户在Test文件夹中添加了一个root.txt的文件
随后使用stat命令查看他的信息,可以发现它的权限是-rw-r--r--
随后我们使用chmod a=rwx root.txt命令将这个文件的全部权限修改为-rwxrwxrwx
再次查看发现已被修改
随后我们使用kiosk普通用户进行文件查看,可以发现权限和root所看到的一样
所以文件的权限修改成功
但是当我们尝试使用kiosk用户去修改这个由root所创建的文件
会有这样的报错
我们只能通过sudo命令进行提权操作才能对这个文件进行修改
我们也可以通过chmod + NNN + FILE命令的方式进行修改权限,如上
更改文件所属主和组
我们可以使用chown + OWNER[:GROUP] + FILE...命令来进行更改
这里将原来属于root的文件root.txt所属主更改为kiosk的所属
可以看到Uid从原来的0(root)变为了1000(kiosk)
特殊权限
在文件和目录中存在着两个特殊的权限
-
SUID权限(对于用户来说,权限字符为's'):
- 当一个可执行文件具有SUID权限时,执行该文件的用户将暂时拥有该文件的所有者的权限
- 也就是说,无论是哪个用户执行这个文件,该用户在执行过程中都会临时获得该文件所有者的权限
- SUID权限对于一些需要在非特权用户下执行特权操作的程序非常有用
-
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的值从而修改默认的文件与文件夹权限