我尝试使用 /etc/fstab 中的以下行在标准 Ubuntu 12.04.2 LTS 中安装 cifs 驱动器:
//server-name/share-name /mnt/archive cifs uid=1002,file_mode=0440,credentials=/etc/.smbcredentials,iocharset=utf8,sec=ntlmi 0 0
该挂载将用于存储备份,因此我想以创建文件的权限挂载它,但不能删除它们。一切似乎都按其应有的方式工作,除了我可以进入并删除,除了警告之外什么都没有。
myuser@localhost:/mnt/archive$ ls -l
-r--r----- 0 myuser root 51 Sep 19 17:56 deleteThis.txt
-r--r----- 0 myuser root 51 Sep 19 17:31 deleteThis.txt.bak
myuser@localhost:/mnt/archive$ rm deleteThis.txt.bak
rm: remove write-protected regular file `deleteThis.txt.bak'? y
myuser@localhost:/mnt/archive$ ls -l
-r--r----- 0 myuser root 51 Sep 19 17:56 deleteThis.txt
为什么我的文件权限没有得到尊重?这是 Ubuntu 的东西吗?
有没有办法通过 cifs 挂载网络共享而不会使文件被删除?
答案1
Linux 并不将删除文件的权限与创建文件的权限分开管理。在这两种情况下,重要的是您是否具有对该目录的写权限。由于您保留了目录的默认模式,因此 myuser 可以写入/mnt/archive
并因此可以删除其中的文件以及创建它们。
rm
当您尝试删除只读文件时会提示您确认,但这并不意味着您没有删除它的权限:这意味着您做有权删除它,但rm
认为这样做可能是个坏主意。
您可以阻止用户删除文件他们不拥有的通过在目录 ( chmod +t
) 上设置“粘滞位”,就像对/tmp
.使用安装选项dir_mode=1755
。
您无法阻止用户删除自己的文件,除非不授予他们在该目录中创建文件的权限。
允许用户创建他们无法删除的文件是很奇怪的。如果您确实想要这样做,您将需要比经典 unix 文件权限或 Solaris/Linux ACL 更灵活的东西(我认为您可以使用 OSX ACL 来做到这一点)。