具有权限的文件 ---S--l---

具有权限的文件 ---S--l---

有人可以解释一下这些属性的含义吗:---S--l---

何时以及为何需要设置此属性?为了什么?

$ ls -ltr
---S--l---   1 root     root          0 Mar 10 04:25/opt/sm/OP/Tor/kur/ll3/tur_lock

答案1

我相信您熟悉基本-rwxrwxrwx符号。您可能知道 set-user-ID 可以帮助您-rwsrwxrwx ,而 set-group-ID 可以帮助您-rwxrwsrwx。但是,如果没有进一步澄清,这些形式是含糊不清的。如果您看到-rws------,您可能会认为模式是 04700(设置用户 ID + 用户读取 + 写入 + 执行),但是当x不显示 时,您如何知道执行位已打开?答案是模式 04600(设置用户 ID + 用户读 + 写,但不执行)显示为-rwS------。同样,02060(设置组 ID + 组读取 + 写入,但不执行)显示为---rwS---

现在,事实l证明这方面的文档很难找到。幸运的是,我已经在这里呆了一段时间,我知道一些尸体埋在哪里。我找到了这个fcntl(2)页面上写着,

(非 POSIX。)……记录锁可以是建议性的,也可以是强制的,并且默认情况下是建议性的。咨询锁不强制执行,仅在协作进程之间有用。

对所有进程强制执行强制锁。如果进程尝试执行不兼容的访问(例如,阅读(2) 或者写(2))在具有不兼容强制锁的文件区域上,那么结果取决于O_非阻塞对其打开的文件描述启用标志。如果O_非阻塞标志未启用,则系统调用将被阻止,直到锁被移除或转换为与访问兼容的模式。如果O_非阻塞启用标志,然后系统调用失败并出现错误伊加恩

要使用强制锁定,必须在包含要锁定的文件的文件系统和文件本身上启用强制锁定。使用“ -o mand”选项在文件系统上启用强制锁定安装(8), 或者MS_MANDLOCK标志为安装(2)。通过禁用文件的组执行权限并启用 set-group-ID 权限位,可以对文件启用强制锁定(请参阅修改(1)修改(2))。

Linux 的强制锁定实现是不可靠的。请参阅下面的错误。

长话短说

在某些(非 POSIX?)*nix 系统上,打开 set-group-ID 模式位,同时关闭组执行位,可以强制锁定该文件(如果在文件系统中启用了该功能)。因此,ls其中一些系统上的程序在模式文本表示的第七个位置显示l(而不是),以指示强制S锁定已启用。因此,您的tur_lock文件的模式为 06000。

长话短说2

  • 第四个位置中的S表示设置用户 ID (04000) 模式位已设置,但用户(所有者)执行许可 (00100) 模式位已关闭。
  • 第七位中的AnS或 anl表示设置组 ID (02000) 模式位已设置,但组执行许可 (00010) 模式位已关闭。
  • 是否在第七位ls显示 anS或 an l(当设置了 set-group-ID 模式位但组执行权限模式位关闭时)由没有明确记录的规则确定;但看起来l如果您的操作系统和文件系统支持强制文件锁定,您就会得到。 thenl表示对该文件启用了强制文件锁定。

您可以使用以下命令查看目录树中所有文件和其他内容的数字模式(或者至少是用户控制下的模式位)

寻找目录-printf“%.5m %p\n”

find接受以数字方式(八进制)报告模式的-printf格式。 %m(用于%M象征性地报告模式,就像这样ls做一样。)当然,您可以指定多个目录find,或使用 或 等选项,-mindepth或、、和/或-maxdepth等测试来缩小搜索范围,或修改格式。-mtime-name-iname-size-printf

您可以使用以下命令查看所选文件的数字模式

统计-c“%a%n”文件 …

stat的报告格式(用-c或指定--format)用于%a以数字(八进制)报告模式(“访问权限”)。 (用于%A象征性地报告模式,就像这样ls做一样。)

以上两者仅显示用户控制下的模式位。查看全部模式位(包括指定文件/索引节点类型的位),使用

统计-c“%f%n”文件 …

不幸的是,这以十六进制显示。


...是否有任何选项可以识别带有“S”的文件...?

S您可以查找第四个位置有 的文件

寻找目录-烫发-4000! -烫发-100

这与英语语法最接近find:查找设置了“权限”(模式)位 04000 但未设置模式位 0100 的文件。

同样,您可以使用以下命令查找第七个位置有 anS或 an 的文件l

寻找目录-烫发-2000! -烫发-010

查找满足上述任一条件的文件有点混乱:

寻找目录“(”“(”-perm -4000!-perm -100“)”-o“(”-perm -2000!-perm -010“)”“)”

答案2

这可以通过 Linux 中的命令进行设置chattr

chattr是 Linux 操作系统中的命令,允许用户对驻留在 Linux 文件系统上的文件设置某些属性。

它也称为不可变位。

Linux 中存在许多可应用于文件的属性。在上面的问题中,S和I是一些属性。下面是属性S和I的描述。

S- 更改同步写入磁盘;这相当于应用于文件子集的“sync”安装选项。

I- htree 代码使用它来指示目录位于使用散列树进行索引的后面。

要将不可变位设置为任何文件,语法如下。

chattr +(attribute) (file name)

要删除任何文件的不可变位,语法如下。

chattr -(attribute) (file name)

要检查哪个文件设置了属性,请使用lsattr命令。

欲了解更多信息,请阅读chattr手册页。手册页中提到了所有属性及其特征。

相关内容