我有一个运行linux的synology NAS服务器。我用它来备份文件。我想让某人不小心删除文件很困难。权限模型只是读/写。我需要授予写访问权限,以便用户可以备份文件。但是,我想要有类似的东西,当他们试图删除他们必须输入密码的文件时。
有什么想法吗?
答案 0 :(得分:7)
使用别名rm =“rm -i”,这将在删除文件之前提示用户。
答案 1 :(得分:3)
免责声明:我对Synology产品并不熟悉,因此我只能回答有关Linux的问题。
你所要求的通常是不可能的;在具有创建/写入访问权限的Linux系统上,还意味着具有删除功能 - 没有单独的权限位可供删除。更具体地说:
拥有对目录的写入权限意味着您可以创建和删除文件,而不管文件本身的权限。
对文件具有写入权限意味着您可以修改其内容,包括将其截断为零长度,但不能完全删除文件本身。
通常,备份应用程序需要对目标目录执行备份的完全递归写入访问。因此,我希望任何能够存储文件的用户都能够删除它们。
如果您希望用户存储文件而不能轻易删除它们,则通常必须将此功能实施到您的设备用于提供对其文件系统的远程访问的任何服务器进程中。一种可能的方法是服务器进程在备份后自动从文件和目录中删除写入权限,以便用户在删除之前必须重置它,从而提供一层防止意外删除的保护。
另一种可能更强大的方法是在创建后将服务器chown
文件发送给不同的用户,因此需要有人在删除之前以其他帐户登录。这可能意味着使用不同的密码,而不必跳过各种远程访问协议的设计。
如果您无法让服务器进程提供此功能,您可能能够实现与cron
作业类似的更改备份目录中所有权和权限的作业,例如每小时左右。或者,如果您具有shell访问权限,则可以编写基于shell的守护程序,该守护程序使用inotify
在创建文件后立即执行操作。
在旁注中,如果您的设备使用ext3
或ext4
文件系统作为其磁盘,您可能需要考虑将chattr +a
用于备份目录 - 允许文件为只要设置了追加(a
)标志,就会创建但不会删除。此外,chattr +i
将使目标文件不可变,从而阻止删除和/或修改。使用chattr
所施加的限制对所有用户都具有约束力,包括root
用户。
答案 2 :(得分:1)
如果他们有完整的shell访问权限,那就不简单了。你可以编写一个名为'rm'的shell脚本,它做了不同的事情,然后在PATH
之前将它放在用户/bin
中。它将拦截任何没有显式路径运行'rm'的尝试。如果真正需要rm命令的用户需要运行任何脚本,这可能会导致问题。或者您可以编写一个shell函数来执行类似的操作,这也是优先考虑的事情。
答案 3 :(得分:0)
最简单的选项是
alias rm='rm -iv'
会要求用户按'y'<ENTER>
进行确认。可以使用\rm
或rm -f
代替rm
在命令行覆盖/绕过它。
这通常足以防止此类事故发生。
如果您想强制用户使用其他内容进行确认,请以大写字母表示字符串YES
,您可以创建名为rm
的函数
function rm(){
local REPLY
echo you are about to execute rm command with below arguments: >&2
echo "$@" >&2
read -p "Enter YES to continue" REPLY
[ "$REPLY" == "YES" ] && /bin/rm -v "$@"
}
如果用户更改PATH变量,则不会受到影响
在命令行中使用command rm
或/bin/rm
代替rm
可以覆盖/绕过此内容。