![SAMBA 共享 - 防止用户删除文件](https://linux22.com/image/2983/SAMBA%20%E5%85%B1%E4%BA%AB%20-%20%E9%98%B2%E6%AD%A2%E7%94%A8%E6%88%B7%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6.png)
我正在创建一个隐藏的“访问日志”.txt
文件,供员工访问我创建的程序,并且需要知道如何制作该文件,以便无法删除该文件。
原因是,该程序有助于自动化我们在工作站上执行的许多任务,但它也可能造成很多损害。因此,我需要跟踪谁访问了它,以防万一出现问题。
重申这个问题,如何防止任何人删除该文件,同时仍然能够写入它。
答案1
我猜想您的用户每次启动应用程序时,该应用程序都会通过在所有工作站均可访问的 samba 共享中的文件中写入一些信息来跟踪谁启动了它。由于您指的是“访问日志”,我也猜测您只需要附加到文件而不修改其内容。
如果该文件位于服务器端的 ext2/3/4 文件系统上,请确保 samba 用户对其目录没有写入权限。这将避免意外或故意删除。然后使用 启用仅附加属性chattr +a <filename>
,因此只能添加信息而不能删除/修改/截断信息。该文件仍然可以对每个人具有写入权限,因此即使具有用户权限,应用程序也可以向该文件追加内容。
注意:chattr
也可能适用于其他文件系统,例如。 xfs。我没有确切的清单。
答案2
本质上,您在这里所做的是日志记录,因此您可能更喜欢使用像 rsyslogd 这样的远程日志守护进程来进行日志记录,而不是破解 samba 共享中的文件。
也就是说,删除文件就是更改目录包含文件,而不是文件。因此,如果您删除用户对该目录的写权限,则无法删除该文件。当然,它仍然可能被操纵或意外截断。
答案3
能够写入文件并允许一组用户只读访问的目标可以通过文件所有权和权限来实现。假设所有需要此类访问权限的用户都在“用户”组和您单独可以访问根该系统上的帐户。然后做(如根):
touch /var/log/AccessLog
chown root:users /var/log/AccessLog
chmod 640 /var/log/AccessLog
从现在开始,只有 root 才能修改该文件,但所有用户都可以修改该文件用户将能够阅读它。
相反,如果您希望允许用户写入文件,但需要跟踪谁(以及何时)修改了它,您可以使用 FAM (文件更改监视器)。除此之外,为了保留文件的所有先前版本的记录,您可以放置版本控制系统(例如胃肠道例如)) - 您可以使其与 FAM 合作,以便每个文件修改都会触发对本地存储库的提交。可能有更简单的方法可以做到这一点,但我没有想到(至少没有任何可以在文件系统之上工作的方法)。
答案4
如果您的文件仅在创建 crontab 接下来的前几分钟修改:
find /somedir -type f -user sambauser -mtime +3m -exec chown root:users {} \; -exec chmod 640 {} \;
将查找距离上次修改时间超过 3 分钟的所有文件并更改所有者/权限。