如何为“ rm”命令设置密码?


29

我的朋友不断使用终端删除我的文件。因此,请通过解释如何为rm命令设置密码来帮助我。


50
您将需要用密码保护用户帐户,以便那些“朋友”首先不要访问它。
Andrea Lazzarotto

14
您应该真正尝试学习系统的工作原理并使用其功能。
AlexP

13
您的朋友很可能在无人看管的情况下通过拧紧计算机来试图“教您一个教训”。通过保护您的帐户并禁止来宾访问,或以减少的权限为来宾访问提供经验教训。
肯·威廉姆斯

4
还请记住该unlink命令。关于该mv命令,因为您可以使用它有效地覆盖文件。还...
科斯

17
和这些需要敌人的朋友一起吗?
kasperd

Answers:


46

没有一种简单的方法可以在rm命令本身上设置这样的密码,除非没有大量的代码破解,否则这些密码破解可能会破坏诸如apt-get安装软件包和删除文件的工作,使您必须输入密码一千次,否则可能会破坏密码。访问命令,以谁的人需要它(喜欢你,删除自己的文件)。您可以通过具有多个用户帐户和多个访问权限集,并限制对数据的不同部分(例如您的主目录)的访问来做到这一点,以使他们无法访问它。

(另一个选项是每个用户的个人用户帐户,然后是访问控制列表,如Videonauth发布的另一个答案所述

这是核心问题-您要让您的朋友使用您的系统。这具有许多安全隐患-“任何具有对箱体的物理访问权的人都将能够控制系统并执行任何任务”的概念是IT安全性的口头禅,这就是为什么您不“共享”物理系统访问权限的原因除非有受信任的授权人员。


这样做的唯一真正理智的方法是不让您的朋友访问您的计算机,而是给他们一个他们可以使用的“专用“访客”系统”,而您实际上并不关心文件上的内容。这是确保文件安全的最“安全”方法。


当然,如果不是这样,那么唯一安全的选择是配置多个用户帐户,每个用户帐户一个,并使用不同的主文件夹,并且不允许他们访问您自己的主目录或任何其他用户的主目录目录。然后将您不希望他们接触的所有内容保存在您的主目录中,并且不要给他们sudo访问权限,root密码或与他们共享您的密码。

这是您的操作方式:

假设我的名字是“ Foo”,我希望用户“ Bar”(一个朋友)使用我的系统,但不访问我的文件。第一步是拒绝访问除我以外的任何人到我的主目录。这是为了允许其他用户删除您的文件,但也防止其他用户窥探您的主目录并查看您的主目录中包含哪些类型的东西:

chmod 750 /home/Foo

第二步是为“ Bar”创建一个用户帐户(请勿在下面的括号中键入内容,仅用于提供信息)。这样,我们可以确保他拥有自己的独立访问权限集:

sudo adduser --create-home --user-group --shell /bin/bash Bar
sudo passwd Bar
(set a temporary password - you will not see characters as you type though)

第三步,然后限制他们的主目录也因此没有人可以窥探到他们的文件不管。这只是使事情平等。

sudo chmod 750 /home/Bar

洗手,将其冲洗干净,然后对系统上的许多用户重复这些步骤。他们将无法访问您的文件,并且由于您不打算授予他们管理员权限,因此他们无法删除文件而无需尝试sudo这样做-因为您不允许这样做,所以他们不能触摸你的东西。如果不成为超级用户,他们也将无法查看您的文件,在这里不会发生这种情况。


永远记住:通过授予某人对计算机的物理访问权限或一般访问权限,您将使文件和数据面临风险。这是IT安全领域广为接受的事实,并且这一事实继续存在。让您的朋友访问您的计算机将始终使您的数据处于危险之中,因此,要么给他们自己的系统带来麻烦,要么就是不让他们访问您的计算机。


只是有关磁盘加密的说明

虽然磁盘加密可以很好地保护您的数据免遭第三方的攻击,但存在局限性。

  1. 如果系统已打开,则磁盘已被解密,因此存在风险。
  2. 一些系统坏了磁盘加密方法。例如,某些Acer系统使用您的密码仅授权加密/解密并使用硬编码密码,或使用容易破解的弱加密。
  3. 总是有一些方法可以破解“键”,或者尝试在系统关闭后但RAM数据“消失”或损坏之前从内存中提取它们。(我不会深入探讨这些,但是确实存在这些风险)。
  4. 对计算机的物理访问(无论系统是否经过加密)始终会使您的数据处于危险之中。不要将物理访问权限(或远程网络访问权限)授予不想让您完全授予系统访问权限的人员。

尽管“磁盘加密”不能解决这些问题,但它给威胁参与者带来了额外的麻烦。如果是加密的,则是坏人可能会放弃,或者可能折磨您(必须执行XKCD Security漫画)。

因此,如果您的系统是加密的,但又让其他用户使用它,则他们要么拥有要解密的密码,要么让笔记本电脑解密,以便他们可以SSH进入或具有物理访问权限。在这两种情况下,这都是不好的。

就是说,如果您的系统未加密,则本节与您无关。


我的笔记本电脑有一个加密的硬盘。允许其他人访问仍然有风险吗?
蒂姆(Tim)

2
@Tim是,如果系统已开机并已解密。即使关闭,使用正确的技术,时间和奉献精神,仍然有可能找到可能仍存储在RAM中的解密密钥。磁盘加密不是 100%的保护-有很多解决方法,而更多的问题是“坏人是否愿意为此付出很多时间和精力”。从OP的问题来看,他们的系统已打开且未加密(全部或部分加密),因此存在删除风险。
托马斯·沃德

3
@Tim要补充托马斯的答案,某些笔记本电脑的磁盘加密实现已损坏(如果您依赖硬件FDE)。AFAIR Acer笔记本电脑并未真正使用您的密码进行加密,而是仅使用它来授权使用硬编码密码进行加密/解密。
gronostaj

如果不受信任的人可以访问系统(无论是否加密),数据始终处于危险之中
Sergiy Kolodyazhnyy 2016年

1
@LightnessRacesinOrbit apt-get运行dpkg,它运行经常使用的脚本rm。在我的Xenial框上,cd /var/lib/dpkg/info; grep -P '\brm\b' *inst输出344行,其中333行看起来像是rm命令的真实用法-仅在安装脚本中。grep -P '\brm\b' *rm在删除脚本中显示的更多(删除配置文件,而不是软件包文件)。
伊利亚·卡根

19

这可能与rm命令无关,因为有简单的方法可以删除文件而不使用它。如果问题是您的朋友无意间滥用了该rm命令,那么专门限制该命令的使用或导致该命令以不同方式工作的解决方案可能会有所帮助。相反,如果问题是您的朋友故意以您不想要的方式处理数据,则您需要实施实际的安全措施,并且没有解决方案着眼于rm命令本身(或任何离散的命令集)将使您安全。

您需要控制访问权限,还是只是防止诚实的错误?

假设您的朋友知道您不希望他们删除文件,则有两种可能性:

  1. 他们可能是故意这样做的。在这种情况下,您的朋友有意删除您的文件,您甚至不能信任他们尝试遵守您对使用计算机时如何处理数据的要求。正如托马斯·沃德(Thomas Ward)详细解释的那样,解决此问题的唯一方法是使用实际有效的安全措施。通常,最好的措施是阻止他们使用您的计算机。但是让他们使用自己的用户帐户可以提供一定的保护。

  2. 他们可能会错误地这样做。在这种情况下,您的朋友极容易发生意外,并且他们继续运行rm他们本来希望没有的命令。他们想尊重您和您的数据,但实际上在实践中却很糟糕,因为他们会继续运行错误的命令,删除错误的文件……之类的东西。尽管最好相信这是正在发生的事情,但我告诫您不要假设那些在您告诉他们停止数据后继续删除您的数据的人没有恶意地在工作。

    此外,即使他们的意图很好,给他们一个单独的用户帐户仍然是防止他们删除文件的最简单的方法,除了不允许他们使用您的计算机。

如果情况确实是#2-您的朋友不是在尝试删除您的文件,而是需要帮助,不要意外删除它们,而他们意外删除它们的唯一方法是无意间滥用了少量命令(例如rm)他们在正确使用上有特别的麻烦-那么Videonauth答案中的技术可能有用。但是您必须了解它们不是安全措施,因为rm命令只是删除文件的许多简便方法之一。有关详情,请参见下文。

我建议您问自己:“我的情况与我(而不是其他使用我的计算机的人)使用rm错误的情况基本相同吗?”

如果答案为,则这是信息安全问题,您需要阻止朋友使用您的用户帐户。如果答案是肯定的,那么你可以使用同样的方法,如果你想使用是我的唯一滥用rm

  • 教育。您的朋友需要知道他们在做什么以及如何避免。
  • 界面更改。在不丧失删除文件的实际能力(需要单独的用户帐户)的情况下,您可以通过使其仅自行运行而不进行任何进一步的操作来立即删除它,从而使意外删除文件变得更加困难。Videonauth的答案为此提供了一种方法。在这个答案中,我提出另一个。rm filefile

但是,即使您的朋友没有尝试做任何错误的事情,仍然应该考虑让他们使用自己的单独用户帐户。这仍将解决问题-保护数据免遭故意破坏的相同安全措施也将保护其免受意外破坏。即使没有恶意的意图,如果某人继续做您不希望他们做的事情,那么您也不能相信他们会拒绝这样做。

制作rm之前缺失可以帮助提示防止一些错误。

为了帮助人们避免意外删除文件rm,可以设置rm一个实际运行的shell别名rm -i。将-i标志传递给rm导致它在删除每个文件之前提示用户(请参阅参考资料man rm)。

您可以通过添加alias rm='rm -i'.bash_aliases.bashrc文件中(针对您的用户帐户)执行此操作。有关详细信息请参见此问题该问题。这将对您新打开的bash shell生效。

没有提供任何实际的安全性,并且在防止错误方面也不是万无一失的,因为:

  • 出现提示时,他们可以选择继续删除。
  • 他们可以通过多种方式绕过别名,包括通过运行/bin/rm或取消别名(unalias rm)。
  • 在许多情况下不会发生别名扩展,并且在这些情况下rm将不会使用别名扩展-i
  • 他们仍然可以通过使用不需要的任何技术来删除文件rm(就像Videonauth的方法一样 -见下文)。
  • 他们仍然可以在不删除任何文件的情况下损坏数据,例如通过覆盖它们或以其他方式更改其内容(Videonauth的方法也是如此)。

但是,如果您不需要实际的安全性(请参见上文),那么这可能是可行的方法。与防止您的朋友使用系统提供的rm命令的方法相比:

  • 别名化rmrm -i防止错误的效果不佳-直到他们继续使用其他技术来删除文件为止。到那时rm,即使他们没有尝试做任何错误,阻止他们使用也将完全无效,因为大概他们将以unlink相同的粗心大意来使用(或其他无数个删除文件的命令)。

  • 另一方面,由于别名扩展仅在某些情况下发生-粗略地说,是对shell的常规交互式使用-您的朋友可能会认为,在未真正提示时会提示他们(因为该命令位于例如脚本,或从其他外壳发布)。Videonauth的方式不存在此问题,这是该方法相对于的客观优势alias rm='rm -i'

  • 运行脚本时,除非故意编写脚本以使用别名,否则不会在其中扩展别名。这意味着混叠rmrm -i是不太可能打破任何东西。这是的客观优势alias rm='rm -i'

rm 不能做任何其他完美的普通程序不能做的事情。

真的没有什么特别的rm。这是一种方便且自文档记录的删除文件的方式,因此限制对其的访问可能会破坏许多依赖该文件的脚本。但这不是删除文件的唯一方法,它只是一个普通程序。

一些命令执行某些任务,如果不运行这些命令,受限用户(非root用户)将无法执行这些命令。例如,sudo在确保您被允许进行检查之后,允许您以其他用户身份运行程序。passwd编辑存储用户密码的数据库,但只能让您更改自己的密码(除非您是root用户,在这种情况下,您可以更改任何人的密码)。

/usr/bin/sudo/usr/bin/passwd可以这样做,因为它们设置了setuid位,如s在运行时显示在最左列中的所示ls -l

ek@Io:~$ type -a sudo passwd rm
sudo is /usr/bin/sudo
passwd is /usr/bin/passwd
rm is /bin/rm
ek@Io:~$ ls -l /usr/bin/sudo /usr/bin/passwd /bin/rm
-rwxr-xr-x 1 root root  60272 Feb 18  2016 /bin/rm
-rwsr-xr-x 1 root root  54256 Mar 29  2016 /usr/bin/passwd
-rwsr-xr-x 1 root root 136808 Aug 17 09:20 /usr/bin/sudo

请注意,/bin/rm有没有s:它的权限-rwxr-xr-x,而/usr/bin/passwd/usr/bin/so-rwsr-xr-x代替。这样,无论谁运行passwdsudo,它实际上都以root用户身份运行,因为root是可执行文件的所有者。(还有一个setgid位,设置该位后,将使可执行文件以其组所有者而​​不是调用者的组身份运行。)

除了那些没有被发现(或已经发现但尚未被修补)的任何安全漏洞,sudo并且passwd是安全的,因为工具都是非常精心编写的,使他们只能做的事情,调用者应该允许去做。

/bin/rm这样行不通。它不是setuid的,因为它不需要。目录权限有时是文件权限)控制用户可以删除哪些文件,而无需成为root用户即可删除。只是为了清楚起见,请永远不要将setuid位设置为onrm。从那时起,安全隐患将是灾难性的,从那时起,无论由谁运行rm,就好像是root在运行它!(实用程序喜欢sudopasswd检查谁真正在运行它们,并在执行某项操作之前先检查是否已允许;rm请勿执行此类操作。)

检查是否在可执行文件上设置了setuid(或setgid)位将告诉您是否限制谁可以运行它可以提高安全性。不是setuid(或setgid)的可执行文件没有任何特殊状态,任何人都可以简单地复制它们并运行该副本,从另一台计算机上带来他们自己的副本,编写执行相同操作的脚本或程序,或使用另一个程序来做。

不删除文件 rm

rm使用Ubuntu 删除文件的一种明显方法是导航到图形文件浏览器中的位置(如果使用的是Unity或GNOME Shell,则为Nautilus)并删除文件。还有许多命令可用于从终端删除文件,而无需使用rm

例如,要删除foo.txt当前目录中的文件,可以在Ubuntu上直接使用且不需要访问的以下命令即可rm实现。(可以肯定的是,我在16.04最低系统上进行测试删除后仅安装了标准系统实用程序/bin/rm。)

  • unlink foo.txt
  • busybox rm foo.txt
  • perl -e 'unlink("foo.txt")'
  • python3 -c 'import os; os.remove("foo.txt")'python而不是python3在较早的版本中)

当然,这个清单还远远不够完整。无法提供此类命令的完整列表。防止文件删除是单独的用户帐户以及存在要实现的文件和目录权限的事情之一。他们很好地防止了这种情况。相反,更改rm命令(使其要求输入密码或以任何其他方式)或限制访问rm根本不会阻止它。


2
对于实际使用,我喜欢GNU rm-I选项。它仅提示您删除4个或更多文件,或者提示您进行递归删除。因此,您不会养成始终使用的习惯-f\rm以避免别名扩展或在y不阅读的情况下进行输入。但这仍然可以避免您遇到错别字,使您错失良机,否则您可能无法匹配很多文件。
彼得·科德斯

2
取消链接的另一种有趣方式:mv foo.txt /tmp/.gone然后重新启动,丢弃正在备份的tmpfs /tmp。或仅用于mv将多个文件重命名为相同的名称,因此只剩下最后一个。或者只是通过使用晦涩的名称重命名文件来隐藏文件。正如该答案的第一部分所指出的那样,如果您要防御恶意而不是无能,则只需将人们拒之门外。
彼得·科德斯

16

您可以/bin/rm通过以下行更改命令的权限,这将阻止该命令在没有sudo访问的情况下执行:

sudo chmod 750 /bin/rm

这特别阻止了他们使用rm系统提供的命令。您应该注意,这不会阻止他们以其他方式删除文件。

为了防止用户使用rmdir命令(这是删除目录的常用方法),可以在其可执行路径上以相同的方式设置权限:

sudo chmod 750 /bin/rmdir

提醒您也只能使用具有sudo权限的此命令。

要把它改回来,如果你不喜欢它或其他问题而使用755chmod


正如@muru指出的那样,以上内容是非常粗糙的解决方案,甚至可能破坏不在帐户上运行的系统服务。因此,我在这里添加了另一个使用ACL(访问控制列表)的选项,它可以做同样的事情并且可能更安全(也很好读,并且可以跳过启用部分,因为ACL现在通常安装在Ubuntu系统上):

因此,仅针对您要阻止的用户执行与上述相同的操作,

sudo setfacl -m u:<user-name>:- /bin/rm /bin/rmdir

只需替换<user-name>为要防止使用文件的实际用户名即可。

与一样chmodsetfacl -m用于阻止特定用户运行,rm并且rmdir仅应用于系统提供的命令。它不会阻止它们删除Nautilus中的文件和文件夹或使用其他终端命令删除它们。

说明:

  • -m标志表示修改文件ACL。
  • 变更的第一部分,u代表用户。u对于用户,g组和o所有其他用户,它可以具有以下值
  • 中间部分<user-name>可以根据您要更改的内容暂停实际的用户名或组名。要设置整体更改,请将其留空。
  • 第三部分包含您要设置的权限类型。在此示例中,我们根本不希望设置任何权限,因此我们放置了-,它还可以包含以下字母分别r表示读取权限,w写入权限和x执行权限。

4
最好使用ACL而不是删除其他用户的执行权限-现在,所有不能以root用户身份运行的系统服务都受到了限制。
muru

2
sudo setfacl -m u:<username>:- /bin/rm /bin/rmdir,IIRC。您可以通过getfacl /bin/rm /bin/rmdir
muru

2
像这样的ACL唯一的缺点是长期维持这些是邪恶的/棘手的。如果每个使用该系统的人的系统上没有个人用户,则无法维护。否则,这是一个好主意。
托马斯·沃德

4
@DavidFoerster是的。没有,实际上有无数种删除文件的方法rm。Videonauth在此提供的解决方案是一种帮助容易发生事故的用户停止删除内容的可能方法,但它没有提供任何实际的安全性(如果OP的朋友不是故意破坏OP的意愿,这可能是可以的) 。Videonauth:我建议编辑这篇文章,以便它清楚地说明它实际上并没有阻止人们删除文件,因为他们不需要rm命令来删除它。(我不想自己编辑它,以防您不想这么说。)
Eliah Kagan

1
不要忘记Perl,Python和系统上的所有编译器也允许其他用户删除文件。防止人们删除文件不仅仅需要更改rm命令权限。
乔纳森·莱夫勒

8

这是一个非常简单的答案,它将在不提供密码的情况下随便使用rm命令阻止某人。这不是一个安全的解决方案,您应该在其他答案中暗含一些其他建议。

但是,您可以使用别名来更改rm命令的行为方式。尝试:

alias rm="sudo -l >/dev/null && rm"

这是当有人输入rm命令时,它运行sudo -l命令。该命令强制用户输入密码。如果他们做对了,它将列出他们的特权(我们将放弃此输出),并以状态0退出,如果他们做错了,则存在错误。

然后,我们在sudo命令后加上“ &&”,这将退出以下命令-在本例中,仅当前一个命令以状态0退出时才退出“ rm”-即他们输入了正确的密码。

要使其永久存在,请在中包含alias命令~/.bashrc

请注意,这很容易被击败(例如,他们可以简单地键入/bin/rm


5

有时候不是我们的朋友,我们是我们自己最大的敌人

我已经编写了一个脚本来rm像要求的OP那样进行密码保护,但是还进行了编辑以防止您意外删除:

  • /
  • /家
  • /箱

编辑: 2017年3月5日-更改检查是否在终端中运行的方法。


创建脚本

gksu gedit /usr/local/bin/rm在以下行中使用和复制:

#!/bin/bash

tty -s;
if [ "0" == "$?" ]; then Terminal="Y"; else Terminal="N"; fi

if [ $Terminal == "Y" ] ; then
    # Running from terminal don't allow delete of / or /toplevel directory even if sudo
    for i in ${@:1}
    do
        # Skip options -i -r -v -d 
        if [[ ${i:0:1} != "-" ]] ; then
            # if parameter doesn't begin with '-' it's file or directory, so get real path.
            fullname=$(realpath "$i" 2>&1) # No error messages if file doens't exist
            # We must have at least two `/` in the full path
            levels=$(echo "$fullname" | tr -cd '/' | wc -c)
            if (( $levels == 1 )); then # Test for 1, will be zero when file doesn't exist.
                echo "Attempting to remove top level directory '$fullname'"
                echo "Use 'sudo /bin/rm $@' instead."
                exit 1 # error
            fi
        fi
    done
fi


if [[ $(id -u) != 0 ]]; then # Only non-root processes enter password (ie "sudo rm ..." is ok)
  if [ $Terminal == "Y" ] ; then
  # Only running from a terminal needs password (ie not cron)

    # log rm usage to /var/log/syslog
    PARENT_COMMAND="$(ps -o comm= $PPID)"   
    logger "$PARENT_COMMAND"" - rm command was used on file: ""$fullname"

    # Get password
    Password=$(zenity --password --title="Password for rm")
    encryptPassword=$(echo -n "$Password" | md5sum)

echo "md5sum: $encryptPassword" # Comment out after viewing one time and updating line below.

    if [[ "$encryptPassword" != "d2c30dc65e59558c852ea30b7338abbe  -" ]]; then
        echo "Invalid password!"
        exit 1
    fi
  fi # non-terminals can't enter password.
fi # root doesn't need to enter password.

# Call REAL rm command with parameters passed to this wrapper sript
/bin/rm "$@"

exit 0

将密码“ WE2U”更改为所需的任意名称,然后保存文件。

将新rm脚本标记为可执行

rm使用以下命令将新脚本标记为可执行文件:

sudo chmod +x /usr/local/bin/rm

怎么运行的

rm密码

除非密码是WE2U,第一次运行脚本时,您将获得“无效密码”,并显示输入密码的加密密钥。从终端复制此加密密钥并将其粘贴到脚本中。然后在回显行中注释掉在终端上显示加密密钥的行。

因为/usr/local/bin列表上的路径比调用/bin我们的命令的路径高rm。获取有效密码后,它将调用/bin/rm以进行真正的删除。

正如托马斯·沃德(Thomas Ward)在另一个答案中指出的那样,如果sudo apt-get install ...要进行密码输入,则可能会要求您输入密码1000次。该脚本检查是否sudo已使用,并且不要求输入密码。此外,如果rm从GUI应用程序中调用,则不需要密码。

logger每次rm使用终端手动调用脚本来记录的时间。命令用法记录到中/var/log/syslog


1
您可以通过在脚本中仅包含密码的哈希版本来掩盖该密码,然后只要用户输入密码,就可以对该密码进行哈希并将其与硬编码哈希进行对照。
InitializeSahib

@InitializeSahib哈希密码支持(加密)已添加到脚本中。
WinEunuuchs2Unix

3

另一种选择是在非root用户无权访问的目录中创建任何重要文件的备份副本。您可以使用rsyncunison自动同步它们,只需确保备份目标路径中的至少一个目录归root和mode 700所有。尽管如此,这将导致所有文件具有两个副本。仅创建一个访客用户供他们使用会更安全,除非您确实需要记住始终锁定或注销,然后再给他们计算机或使其无人看管。


3
您可能要指出如何避免删除被传播?理想情况下是一种将其关闭和打开的方式,以便当用户执行需要永久删除的操作时,它是永久的。
ostergaard

@ajostergaard我的想法是,每当他从朋友那里取回计算机时,他都会手动检查是否丢失任何东西并恢复所有内容。但是我自己喜欢的工具是在GUI交互模式下统一使用,这使得查看(和反向)删除变得容易。
Random832

2

不是您要寻找的问题的直接答案,而是:

如果您的朋友正在使用该rm命令删除文件,那么您的朋友要么不称职,混蛋,要么是BOFH的想方,他们正试图教您不要让会话保持登录状态且无人看管。在所有情况下,解决方案都是相同的:不要让您的会话处于登录状态且无人值守

这样做的好处是,每次升级或获取新系统时,都不必记住要对系统进行特殊更改,并且还可以防止依赖预期行为的脚本和其他所使用的东西以无法预测的方式失败。

它还具有阻止“朋友”继续进行下一步的优势。mv如果当他们发现简单的删除操作无法满足您的要求时,如果他们决定将文件移至/ dev / null,您是否还希望对命令进行“密码保护” ?当您在这样的游戏中时,唯一的制胜法宝就是不要玩。


1

我有计划的类似可能性。在文件服务器上,如果照片的主要存储空间是可写的,那么家庭中的某人(出于技术原因或偶然)可能删除了某些内容,不小心拖动了会移动目录的gui或使用了已编辑的版本覆盖了原件,而不是重命名。

我意识到我可以防止这种情况发生,而不会导致其他所有人的权限都无法写。ZFS会进行定期快照,因此可以撤消任何意外的删除或覆盖。(与备份不同,快照是轻量级的,并且可以写时复制,因此不会增加存储使用量。)

ZFS是FreeBSD固有的。Linux有btrfs,也有快照。


0

一个非常愚蠢的问题的非常愚蠢的解决方法。

如果您不想使用chmod rm,,rmdirmv(用于mv filename /dev/null)或使用ACL,则可以创建一个虚拟用户,其密码为nobody,但您知道并sudo [user]为每个命令添加别名,然后为您的朋友不知道的每个命令创建别名。这样,当您的朋友键入内容时rm,系统会提示他们输入密码(但是猜错密码将记录失败的尝试),您仍然可以键入rmalias或选择任何实际删除文件的方式。

或者,您可以创建一个无法访问您的主目录的访客帐户。


听起来您在正确的轨道上。您可以通过详细说明如何设置别名来改善您的答案,sudo [user]以及dummy user
WinEunuuchs2Unix

0

如果要对rm进行密码保护,一种解决方案是为rm封装一个需要root特权的包装程序,否则要求输入密码。(注意:当更新或重新安装coreutils软件包时,此包装程序可能会消失。)此外,请注意,这仅能保护rm,仍然有许多其他删除文件的方法。


打开一个终端并成为root。然后运行sudo mv /bin/rm /bin/rmold移动老RM到另一个地方。

现在运行 sudo nano /bin/rm以创建包装器。

在Nano中,键入以下内容:

#!/bin/bash
/bin/rmold "$@"
exit "$?"

然后按住CTRL,然后按X退出。Y出现提示时按,然后按ENTER以保存文件。

最后,我们需要为此授予适当的权限:

sudo chmod a+x /bin/rm

然后你去。


1
除非您有很好的理由,否则应始终将脚本变量用引号引起来:$@=> "$@"。在这里,您建议的是原始版本和安全版本的非常危险的版本rm:如果有一个名为foo -i -r *-i添加以保护无辜用户的文件)怎么办?
xhienne

除了使用"@xhienne $@所说的以外,我敦促您明确警告读者,由于有多种删除文件的方法,因此根本不提供安全性。一种是致电rmold,但还有许多其他方式,如其他答案和评论中所讨论。(即便如此,这将有问题rm感觉像它删除文件作为当前用户-这就是所谓的没有sudo,正常rm运行作为来电! -但这样做的根源。如果他们最近sudo编着,他们赢得了”请注意,即使他们知道更改也可能会删除系统文件。)
Eliah Kagan
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.