允许非 root 用户更改文件权限

允许非 root 用户更改文件权限

我们正在开发一个应用程序,可以更改用户创建的某些文件的文件权限。

例如,用户“Bob”在 /srv/share/ 中创建一个文件,那么 bob 就是他创建的文件的所有者,并且只有他和 root 能够设置适当的权限。

现在,由于一些安全问题,我们不喜欢以 root 身份运行我们的应用程序。那么在 Linux 中是否可以说用户“应用程序”能够修改另一个用户在目录 /srv/share 中创建的文件的权限?而且只有那里?否则,用户“应用程序”将能够更改某些系统文件并能够使自己成为 root 用户,这当然不是有意的。

假设 Bob 在 /srv/share/ 中创建了一个文件“test.txt”,权限如下所示: UserOwner: Bob GroupOwner: AGroupName Permissions: 755

现在假设我们的应用程序想要将文件“test.txt”的权限更改为 770。只有当应用程序以 root 身份运行时才可能实现。我知道可以更改 umask 或使用默认 ACL,以便新创建的文件的默认权限会更改,但我们还有另一个用例,需要动态更改特定文件的权限。

目前我们正在运行带有内核 4.9.0-6 的 Debian Stretch 9.3。

那么有人知道如何做到这一点吗?或者这根本不可能?

编辑:// 澄清一些事情。我们不想允许某个组访问 Bob 的文件或写入目录。我们想要更改文件权限,仅允许用户本身 (Bob) 和另一个非 root 用户的 root,仅在该特定目录中。

答案1

您可以尝试“协作文件夹”。例如,我希望组“项目”有权访问文件夹,并且组项目(因此该组的所有成员)都可以修改文件。最重要的是 chmod 2770,这意味着 2(sgid,文件是由组所有者创建的),770 是 uid 和 gid 的读写访问权限。

mkdir /projectfolder
groupadd project
chmod 2770 /projectfolder

如果您想要小组项目使用文件夹但不删除小组其他成员的文件,请使用 sgid+sticky

mkdir /projectfolder
groupadd project
chmod 3770 /projectfolder

当然将 bob 添加到小组项目中

如果这不起作用,唯一的解决方案(据我所知)是 sudo,可以分配组和特定命令,例如,使用 visudo 编辑

User_Alias    PROJECT = bob
Cmnd_Alias    BOBCMD = /sbin/chmod

bob ALL= BOBCMD

如果您只需要在特定文件夹上使用 chmod,您可以制作一个 bash 脚本并将其用作 sudo 命令。该脚本必须控制用户是否正常、目录是否正常,然后运行 ​​chmod 命令。

相关内容