查看文件权限的方法
  1. # 在某个有文件存在的目录下输入以下命令
  2. ll
  3. drwxr-xr-x 7 root root 4096 May 7 00:50 app
  4. -rw------- 1 root root 1679 Jun 24 22:57 github
  5. -rw-r--r-- 1 root root 1376 Jul 20 2019 index.html
  6. 类型 权限 所属用户和组 文件名

文件类型

类型第一个字符表示文件的类型,常用的有 - 普通文件,d 目录文件
  • -:普通文件
  • d:目录文件
  • b:块特殊文件
  • c:字符特殊文件
  • l:富豪链接
  • f:命名管道
  • s:套接字文件
不同的文件类型,文件权限对应不同的功能。

文件权限的表示方法

  • 字符权限表示方法 - r - w - x 执行
  • 数字权限的表示方法(二进制) - r = 4 - w = 2 - x = 1
  1. -rw-r-xr-- 1 username groupname mtime filename
  • rw-:文件属主的权限
  • r-x:文件属组的权限
  • r—:其他用户的权限
创建新文件有默认权限,根据 umask 值计算,属主和属组根据当前进程的用户来设定。

目录权限的表示方法

  • x:进入目录
  • rw:显示目录内的文件名, 读取修改文件内容
  • wx:修改目录内的文件名, 修改文件内容

特殊权限

  • SUID:用于二进制可执行文件,执行命令时取得文件属主权限,如 /usr/bin/passwd
  • SGID:用于目录,在该目录下创建新的文件和目录,权限自动更改为该目录的属组
  • SBIT:用于目录,该目录下新建的文件和目录,仅 root 和自己可以删除,如 /tmp

文件权限 - 图1

允许 在文件上 在目录上
SUID 用户以文件所有者的权限执行文件 -
SGID 用户在组所有者的许可下执行文件。 在目录中创建的文件获得相同的组所有者。
sticky - 阻止用户删除其他用户的文件。

SUID

具有 SUID 的文件始终以拥有该文件的用户身份运行,无论用户传递的命令是什么,如果文件所有者没有权限,那么这里使用大写的 S

我们以 /usr/bin/passwd 举例,默认情况下,该文件具有 SUID 权限集

  1. [tcarrigan@server ~]$ ls -l /usr/bin/passwd
  2. -rwsr-xr-x. 1 root root 33544 Dec 13 2019 /usr/bin/passwd

group + s (SGID)

这个特殊权限具有几个功能

  • 在文件上设置,它允许文件作为用户改文件的组执行
  • 在目录上设置,则在目录中创建的任何文件都将其组所有权设置为目录所有者的组所有权

如果所属组没有执行权限,则使用大写 S

  1. [tcarrigan@server article_submissions]$ ls -l
  2. total 0
  3. drwxrws---. 2 tcarrigan tcarrigan 69 Apr 7 11:31 my_articles

other + t (sticky )

这个权限不影响单个文件,但是在目录级别限制文件删除,只有文件所有者和 root 可以删除该目录中文件,一个场景的例子是 /tmp 目录

  1. [tcarrigan@server article_submissions]$ ls -ld /tmp/
  2. drwxrwxrwt. 15 root root 4096 Sep 22 15:28 /tmp/

设置命令

  • SUID = 4
  • SGID = 2
  • sticky = 1
  1. # 语法, X 是特殊权限数字
  2. [tcarrigan@server ~]$ chmod X### file | directory
  3. # 举例
  4. [tcarrigan@server article_submissions]$ chmod 2770 community_content/
  5. [tcarrigan@server article_submissions]$ ls -ld community_content/
  6. drwxrws---. 2 tcarrigan tcarrigan 113 Apr 7 11:32 community_content/