将文件访问限制为仅附加

将文件访问限制为仅附加

我有一个包含日志文件的目录,我将用户启动的脚本中的日志放入其中。在这种情况下,使用 syslog 进行记录似乎是不可能的。 (非守护进程 rsync)

我希望用户对日志文件只有写权限。问题是,必须进一步限制写入权限,以便用户(脚本)可以仅附加到该文件。底层文件系统是XFS。

以下不起作用:

# chattr +a test.log
chattr: Inappropriate ioctl for device while reading flags on test.log

对此还有其他解决方案吗?谢谢你的提示。

答案1

chattr实用程序是为 ext2/ext3/ext4 文件系统编写的。它发出读写控制在文件上,因此由底层文件系统决定如何处理它们。较新的 Linux 内核中的 XFS 驱动程序支持FS_IOC_SETFLAGS与 ext[234] 相同的 ioctl 来控制仅附加等标志,但您可能正在运行不支持的旧内核(CentOS?)。尝试使用xfs_io实用程序代替:

echo chattr +a | xfs_io test.log

请注意,对于像 ext[234] 这样的 XFS,只有 root 可以更改仅追加标志(更准确地说,您需要该CAP_LINUX_IMMUTABLE功能)。

答案2

您有权限这样做吗?从man 1 chattr

设置了“a”属性的文件只能以附加模式打开进行写入。只有超级用户或拥有 CAP_LINUX_IMMUTABLE 能力的进程才能设置或清除该属性。

答案3

或者,您可以使用以下方法实现相同的目的SELinux,如果您使用的是 Red Hat 兼容发行版,那么它很可能已启用并正在运行。这适用于每个文件系统,SELinux 会阻止进程执行不允许的操作。

不幸的是,您需要为应用程序编写一个策略,以允许访问所有系统资源,但附加到特定文件除外。如果您是第一次这样做,这可能会有点困难,但这样做有一个好处 - 增加了一层安全性。

我在本次演讲中有一个如何编写仅附加文件规则的示例:https://www.youtube.com/watch?v=zQcYXJkwTns

相关内容