限制文件访问只能追加

met*_*ead 13 linux logs permissions rsync xfs

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

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

以下不起作用:

# chattr +a test.log
chattr: Inappropriate ioctl for device while reading flags on test.log
Run Code Online (Sandbox Code Playgroud)

有没有其他解决方案?谢谢你的提示。

Gil*_*il' 9

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

echo chattr +a | xfs_io test.log
Run Code Online (Sandbox Code Playgroud)

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