Linux 文件的安全控制

877 阅读2分钟

Linux 系统的安全模型

  • 用户登录系统时必须提供用户名和密码。 (用户是由root用户创建的,最初的密码也是root用户设定的)
  • 使用用户群组来控制使用者访问文件和其他资源的权限
  • 系统上的每一个文件都一定属于一个用户(一般该用户就是文件的创建者)并一个群组相关
  • 每一个进程都会一个用户和群组关联。可以通过在所有的文件和资源上设定权限来只允许该文件的所有者或者某个群组的成员访问它们。

Linux 文件的三类权限:

  • (u)所有者::文件的所有者的权限
  • (g)同组用户::与所有者同一群组的其他用户的权限
  • (o)其他用户::非所有者也不同群的用户的权限

(root用户不受权限限制,可以访问Linux上的任何资源)

权限的表示

字母表示数字表示含义对文件的权限对目录的权限
r4Read可阅读文件使用ls列出目录内容
w2Write可编辑文件编辑目录(在其中创建、删除等)
x1eXecute可执行程序(可执行文件)使用cd进入目录,用ls -l查看目录详情
- (连字符)0no没用相应的权限(同位的r|w|x)没用相应的权限(同位的r|w|x)

查看文件的权限

用 ls -l 命令:显示结果中的第1列(10个字符)表示文件的mode:

IMG_1065

其中第1个字符表示文件的类型:

  • 如果是d就表示是目录
  • 如果是-就表示是文件

紧接其后的9个字符是这个文件或命令的权限:

IMG_1062

Linux 的安全检测流程

IMG_1060

设定文件权限

设定文件或目录上的权限要用chmod命令:

chmod [-R] mode 文件或目录名
        -R:递归的,设置同时应用于目录中的子目录和所有文件,只有root可用。
        mode: 详见👇

mode 可以由表达式或数字表示。

a+x: 用表达式表示权限

{who}  {operator}  {permission} 表示 mode:

IMG_1061

权限状态可以分成3个部分:

  • 第1部分,表示要设定的状态:

    • u:所有者的权限。
    • g:群组内成员的权限。
    • o:既不是 owner 也不与 owner 在同一个 group 的其他用户的权限。
    • a:所有以上 3 组,也就是所有用户的权限。
  • 第2部分,运算符(操作符)

    • +加入权限。
    • -去掉权限。
    • =设定权限。
  • 第3部分,权限(permission)

    • r:read权限。
    • w:write权限。
    • x:execute权限。

e.g. 在tastingFile文件上添加上所有者和同组用户的可执行权限:

$ chmod ug+x tastingFile    

777: 用数字表示:

用  一组三位数  表示 mode:

(1)第1个数字  代表  所有者      (own user)    的权限   (u)

(2)第2个数字  代表  群组       (group)       的权限   (g)

(3)第3个数字  代表  其他用户(other)        的权限   (o)

这组3位数中的每一位数字都是由以下表示资源权限状态的数字(即4、2、1和0)相加而获得的总和:

        4:100(2):表示具有    read       权限。

        2:010(2):表示具有    write      权限。

        1:001(2):表示具有  execute   权限。

        0:000(2):表示 没有相应的权限。

即:

IMG_1064

e.g.

e.g. 对 owner (foo) 开放家目录的 bar 子目录和其中所有文件的一切权限,但是对同组用户开放读和执行权限而对其他用户只开放读权限:

# chmod -R 754 /home/foo/bar     

特殊权限(第4组权限)

第4组权限包括suid、sgid 和 sticky 三种权限。

其中,

  • suid  :100:4:借用 u 的可执行权限位,并以 s 来表示;

  • sgid  :  10:2:借用 g 的可执行权限位,并以 s 来表示;

  • sticky :    1:1:借用 o 的可执行权限位,并以 t 来表示;

当在一个文件上加入 suid|sgid|sticky 特殊权限时:

  • 如果原来的文件的 u|g|o 具有 x 权限,就使用小写的 s|s|t 来代替 x
  • 如果原来没有 x,就用大写的 S|S|T 来代替;

特殊权限的作用

将 suid 和 sgid 设定在可执行文件上:

  • 运行有 suid 特殊权限的可执行文件时:是以可执行文件的所有者权限来运行这一可执行文件的,而不是以执行者的权限来运行该命令。
  • sgid 特殊权限与 suid 类似,是以命令的群组的权限来运行这一命令的。

将 sgid 和 sticky 设定在目录上:

  • 一个目录上设置了 sticky 权限,就只有文件的所有者和 root 用户才可以删除该目录中的文件,而 Linux 系统不会理会 group 或 other 的写权限。
  • 一个目录上设置了 sgid 权限,只要是同一群组的成员,都可以在这个目录中创建文件。
  • 通常会对目录同时设置 sticky 和 sgid 这两个特殊权限以方便项目的管理(将同一个项目的文件都放到这一个目录中以方便同一项目的成员之间共享信息)。

设置特殊权限

字符式:

$ chmod [u|g|o][+,-,=][s|s|t] file

数字式:

$ chmod [0-7][0-7][0-7][0-7] file   # 第四组表示特殊权限