0

I have a synology NAS server which runs linux. I use it to back up files. I want to make it very difficult for someone to accidentally delete files. The permission model is just read / write. I need to grant write access so that users can back up files. But, I'd like to have something like when they tried to delete a file they had to enter a password or something.

Any ideas?

4

4 回答 4

7

使用别名 rm="rm -i",这将在删除文件之前提示用户。

于 2013-03-06T18:10:16.347 回答
3

免责声明:我对 Synology 产品不熟悉,所以我只能回答一般的 Linux。

您所问的通常是不可能的;在具有创建/写入访问权限的 Linux 系统上,意味着也具有删除功能 - 没有单独的删除权限位。进一步来说:

  • 对目录具有写访问权意味着您可以创建和删除文件,而不管文件本身的权限如何。

  • 对文件具有写访问权意味着您可以修改其内容,包括将其截断为零长度,但并不意味着您可以完全删除文件本身。

通常,备份应用程序需要对其执行备份的目标目录进行完全递归写入访问。因此,我希望任何可以在您的设备上存储文件的用户也能够删除它们。

如果您希望您的用户存储文件而不能够轻松删除它们,那么通常必须在您的设备用于提供对其文件系统的远程访问的任何服务器进程中实现此类功能。一种可能的方法是让服务器进程在备份文件和目录后自动删除文件和目录的写入权限,以便用户在删除之前必须重置它,从而提供一层防止意外删除的保护。

另一种可能更强大的方法是chown在创建文件后让服务器将文件提供给不同的用户,因此要求某人在删除它们之前以不同的帐户登录。这可能意味着使用不同的密码,而不必跳过各种远程访问协议不是为之设计的。

如果您无法让服务器进程提供此功能,则可以通过cron更改备份目录中的所有权和权限的作业(例如每隔一小时左右)来实现类似的效果。或者,如果您具有 shell 访问权限,则可以编写一个基于 shell 的守护程序,用于inotify在创建文件后立即执行操作。

在旁注中,如果您的设备正在为其磁盘使用文件系统,您可能需要考虑将文件系统用于ext3备份目录 - 只要设置了 append-only ( ) 标志,就可以创建文件但不删除文件。此外,将使目标文件不可变,防止删除和/或修改。使用所施加的限制对包括用户在内的所有用户均具有约束力。ext4chattr +aachattr +ichattrroot

于 2013-03-06T18:55:53.967 回答
1

如果他们有完整的 shell 访问权限,那就不简单了。您可以编写一个名为 'rm' 的 shell 脚本来做一些不同的事情,然后将它放在用户PATH之前/bin。它会拦截任何在没有明确路径的情况下运行“rm”的尝试。如果真正需要 rm 命令的用户需要运行任何脚本,这可能会导致问题。或者您可以编写一个 shell 函数来执行类似的操作,这也将具有优先权。

于 2013-03-06T18:46:33.610 回答
0

最简单的选择是

alias rm='rm -iv'

它会要求用户按下'y'<ENTER>确认。可以使用\rmrm -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命令行来覆盖/绕过。

于 2014-02-27T14:40:51.960 回答