我需要运行docker-compose up -d --build
命令来运行项目。某些容器会将文件写入该卷,该卷将安装到我的主文件夹中的子文件夹中。
我想稍后用我的technical
用户删除这个文件夹,但是如果没有“sudo”命令就不可能删除这些文件夹,因为 docker 将使用我不认识或我的系统上没有的不同用户创建子文件夹:
technical@mysystem $ ls -l ~
drwxr-xr-x. 5 polkitd root 4096 Apr 21 16:18 data_1
drwxr-xr-x. 5 33 tape 4096 Apr 21 16:18 data_2
例如:33
对我的系统来说是一个未知用户,tape
组是一个未知组(我假设它们被 docker 使用)
technical@mysystem $ groups
technical wheel docker
technical@mysystem $ awk -F':' '{ print $1}' /etc/passwd | paste -sd " "
root bin daemon adm lp sync shutdown halt mail operator games ftp nobody systemd-network dbus polkitd sshd postfix technical
我尝试在文件夹上使用setuid
orsetgid
位,但结果是相同的:当我尝试删除这些内容为 docker 的文件夹时,我收到错误,如果没有 sudo 权限,我将无法执行此操作:
technical@mysystem $ rm -R data_1/
rm: cannot remove ‘data_1/myfile’: Permission denied
问题:
- 处理这些文件夹的正确方法是什么?
technical
我怎样才能用我的用户(没有权限)删除这些文件夹(由docker编写)的内容sudo
?- 应该对文件夹设置什么权限才能实现此目的?
- Linux 文件系统中这些文件/项目应该放在哪里?
- 在这种情况下我应该遵循哪些最佳实践和模式?
答案1
不幸的是,由于 Linux 处理系统权限的方式,您将无法以当前用户和组的身份修改这些文件,因为您只设置了读取和执行权限。要按原样修复问题需要 root 访问权限。一旦您成为 root 用户,您可以通过发出命令来更改文件或文件夹的所有权chown technical:technical data1
现在假设以上不是一个选项,您可以创建自己的文件夹并设置权限。为了创建一个可供技术组的用户使用的文件夹,您可以以技术用户身份发出以下命令。mkdir data3
这将创建一个名为 data3 的文件夹,并且运行时用户和组都应为“技术”ls -l data3
文件夹和文件的放置由您决定,通常最好遵循系统上已有的数据流(如果有)。就我个人而言,我会将这样的文件放在 /home/technical/Documents 中,以便于记住和访问,特别是如果您不是唯一访问组中文件的人。
就最佳实践而言,我只是确保技术组拥有的任何文件仅包含给该组的成员。您可以通过对包含该组将使用的文件的文件夹设置权限来执行此操作,该文件夹将setfacl -d -m g:technical:rw /home/technical/Docmuents
仅对在指定文件夹中创建的新文件强制执行读写权限。当然,您可以添加写访问权限rwx
,或者删除您不希望该组拥有的权限。
不幸的是,我没有 docker 经验,但它听起来像其他服务,它会有一个配置文件,指定新文件的创建位置以及谁拥有它们。如果这是您的服务器,您应该能够通过一些额外的研究来更改这些内容。