使在Linux中意外删除文件变得更加困难

使在Linux中意外删除文件变得更加困难,linux,synology,Linux,Synology,我有一个运行linux的synology NAS服务器。我用它来备份文件。我想让某人很难不小心删除文件。权限模型只是读/写。我需要授予写访问权限,以便用户可以备份文件。但是,我希望他们在试图删除一个文件时,必须输入密码之类的东西 有什么想法吗 使用别名rm=“rm-i”,这将在删除文件之前提示用户 如果他们拥有完整的shell访问权限,这并不简单。您可以编写一个名为“rm”的shell脚本,它执行不同的操作,并将其放在用户路径之前的/bin中。它将拦截在没有显式路径的情况下运行“rm”的任何尝试

我有一个运行linux的synology NAS服务器。我用它来备份文件。我想让某人很难不小心删除文件。权限模型只是读/写。我需要授予写访问权限,以便用户可以备份文件。但是,我希望他们在试图删除一个文件时,必须输入密码之类的东西


有什么想法吗

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

如果他们拥有完整的shell访问权限,这并不简单。您可以编写一个名为“rm”的shell脚本,它执行不同的操作,并将其放在用户
路径
之前的
/bin
中。它将拦截在没有显式路径的情况下运行“rm”的任何尝试。如果任何脚本需要由真正需要rm命令的用户运行,这可能会导致问题。或者您可以编写一个shell函数来执行类似的操作,这也将优先考虑。

免责声明:我不熟悉Synology产品,因此我只能回答Linux的一般问题

你所要求的通常是不可能的;在具有创建/写入访问权限的Linux系统上,也意味着具有删除功能-没有单独的删除权限位。更具体地说:

  • 拥有对目录的写访问权意味着您可以创建和删除文件,而不考虑对文件本身的权限

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

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

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

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

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


在SeNeNoT中,如果您的设备使用其磁盘的<代码> Ext3或<代码> Ext4 CtTrf+As/Cuth>”来备份目录——允许只创建文件但不删除,只要设置了只附加(<代码> A/COD> >标志)。此外,

chattr+i
将使目标文件不可变,从而防止删除和/或修改。使用
chattr
施加的限制对所有用户都有约束力,包括
root
用户。

最简单的选项是

alias rm='rm -iv'
它会要求用户按
'y'
确认。可以使用命令行中的
\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 "$@"
}
如果用户更改路径变量,则不会影响此操作。

这可以通过在命令行中使用
命令rm
/bin/rm
代替
命令rm
来覆盖/绕过。

您可以为人们购买咖啡。使用
\rm
是否也可以轻松克服这一问题?
\rm
仍会在shell路径中调用
rm
的第一个实例(至少在bash中)
/bin/rm
仍然可以工作,因此任何知道自己在做什么的人都没有用。有没有办法确保路径不能被修改?