![由管理员用户运行的桌面应用程序(但未明确使用 sudo)获取共享文件的文件所有权](https://linux22.com/image/39843/%E7%94%B1%E7%AE%A1%E7%90%86%E5%91%98%E7%94%A8%E6%88%B7%E8%BF%90%E8%A1%8C%E7%9A%84%E6%A1%8C%E9%9D%A2%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%EF%BC%88%E4%BD%86%E6%9C%AA%E6%98%8E%E7%A1%AE%E4%BD%BF%E7%94%A8%20sudo%EF%BC%89%E8%8E%B7%E5%8F%96%E5%85%B1%E4%BA%AB%E6%96%87%E4%BB%B6%E7%9A%84%E6%96%87%E4%BB%B6%E6%89%80%E6%9C%89%E6%9D%83.png)
如同https://stackoverflow.com/questions/15143614/file-ownership-changes-to-root-after- saving-from-a-program-in-ubuntu但我无法使用答案,因为我没有将命令行应用程序作为 sudo 运行。我正在 Mint 16 32 位上的共享文件上运行桌面应用程序(本地共享,即仅在具有 777 权限和无人:用户所有权的本地驱动器上),然后其他用户无法覆盖该文件去使用它,因为它变成了adminuser:adminuser和644。
如何在用户之间共享此文件,并在主管理员用户使用它时防止其切换所有权/权限?
答案1
如果没有能力使用,sudo
你的选项基本上就会被限制为 2 个。
方法#1
您可以将用户放入同一 Unix 组 ( /etc/group
),以便他们能够访问相同的文件和目录。
例子
$ more /etc/group
somegroup:x:1001:adminuser,nobody
然后,您需要设置包含该文件的父目录,如下所示:
$ chgrp somegroup parentdir
$ chmod g+rwxs parentdir
此方法将强制在下面创建的任何文件或目录parentdir
将组设置为somegroup
.总的来说,这种方法工作得相当好,但如果parentdir
的权限或所有权被搞乱的话,可能会有点脆弱。此外,如果文件和/或目录从其他位置移动到目录中,则此方法不起作用。
方法#2
更可靠的方法是使用命令 来对感兴趣的文件或目录使用访问控制列表 (ACL) setfacl
。
$ setfacl -Rdm g:somegroup:rx somedir
$ ll -d somedir/
drwxrwxr-x+ 2 saml saml 4096 Feb 17 20:46 somedir/
然后,您可以使用 确认 ACL 已应用getfacl
。
$ getfacl somedir/
# file: somedir/
# owner: saml
# group: saml
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:somegroup:r-x
default:mask::rwx
default:other::r-x
在父目录上设置上述权限将强制将默认 ACL 应用于somedir
.