将文件访问限制为仅追加


11

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

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

以下内容不起作用:

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

还有其他解决方案吗?谢谢您的提示。


您确定它是XFS吗?chattr +a在这里为我工作(3.2内核)。请注意,您必须是root用户才能使用chattr$提示提示非超级用户),但是如果chattr +a受支持并且您不是root 用户,则会收到其他错误消息。
斯特凡Chazelas


分区上的安装选项是什么?它可能使用xattr来存储它,可能需要相关的挂载选项?(有关XFS的文件也没有提及太多……)
Gert van den Berg

它在SF上关闭了,因此我在这里将其保留
Michael Mrozek

Answers:


8

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

echo chattr +a | xfs_io test.log

请注意,对于像ext [234]一样的XFS,只有root才能更改仅附加标志(更确切地说,您需要此CAP_LINUX_IMMUTABLE功能)。


1

您有权这样做吗?来自man 1 chattr

设置为'a'属性的文件只能在追加模式下打开以进行写入。只有超级用户或具有CAP_LINUX_IMMUTABLE功能的进程才能设置或清除此属性。


0

另外,您可以使用SELinux实现相同的功能,如果您使用的是Red Hat兼容发行版,则有可能启用并运行它。这适用于每个文件系统,SELinux阻止进程执行不允许的操作。

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.