查看文件权限的方法
# 在某个有文件存在的目录下输入以下命令
ll
drwxr-xr-x 7 root root 4096 May 7 00:50 app
-rw------- 1 root root 1679 Jun 24 22:57 github
-rw-r--r-- 1 root root 1376 Jul 20 2019 index.html
类型 权限 所属用户和组 文件名
文件类型
类型第一个字符表示文件的类型,常用的有 - 普通文件,d 目录文件- -:普通文件
- d:目录文件
- b:块特殊文件
- c:字符特殊文件
- l:富豪链接
- f:命名管道
- s:套接字文件
文件权限的表示方法
- 字符权限表示方法 - r 读 - w 写 - x 执行
- 数字权限的表示方法(二进制) - r = 4 - w = 2 - x = 1
-rw-r-xr-- 1 username groupname mtime filename
- rw-:文件属主的权限
- r-x:文件属组的权限
- r—:其他用户的权限
目录权限的表示方法
- x:进入目录
- rw:显示目录内的文件名, 读取修改文件内容
- wx:修改目录内的文件名, 修改文件内容
特殊权限
- SUID:用于二进制可执行文件,执行命令时取得文件属主权限,如 /usr/bin/passwd
- SGID:用于目录,在该目录下创建新的文件和目录,权限自动更改为该目录的属组
- SBIT:用于目录,该目录下新建的文件和目录,仅 root 和自己可以删除,如 /tmp
允许 | 在文件上 | 在目录上 |
---|---|---|
SUID | 用户以文件所有者的权限执行文件 | - |
SGID | 用户在组所有者的许可下执行文件。 | 在目录中创建的文件获得相同的组所有者。 |
sticky | - | 阻止用户删除其他用户的文件。 |
SUID
具有 SUID 的文件始终以拥有该文件的用户身份运行,无论用户传递的命令是什么,如果文件所有者没有权限,那么这里使用大写的 S
我们以 /usr/bin/passwd 举例,默认情况下,该文件具有 SUID 权限集
[tcarrigan@server ~]$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 33544 Dec 13 2019 /usr/bin/passwd
group + s (SGID)
这个特殊权限具有几个功能
- 在文件上设置,它允许文件
作为用户改文件的组执行
- 在目录上设置,则在目录中创建的任何文件都将其
组所有权设置为目录所有者的组所有权
如果所属组没有执行权限,则使用大写 S
[tcarrigan@server article_submissions]$ ls -l
total 0
drwxrws---. 2 tcarrigan tcarrigan 69 Apr 7 11:31 my_articles
other + t (sticky )
这个权限不影响单个文件,但是在目录级别限制文件删除,只有文件所有者和 root 可以删除该目录中文件,一个场景的例子是 /tmp 目录
[tcarrigan@server article_submissions]$ ls -ld /tmp/
drwxrwxrwt. 15 root root 4096 Sep 22 15:28 /tmp/
设置命令
- SUID = 4
- SGID = 2
- sticky = 1
# 语法, X 是特殊权限数字
[tcarrigan@server ~]$ chmod X### file | directory
# 举例
[tcarrigan@server article_submissions]$ chmod 2770 community_content/
[tcarrigan@server article_submissions]$ ls -ld community_content/
drwxrws---. 2 tcarrigan tcarrigan 113 Apr 7 11:32 community_content/