如何处理用户权限问题?

如何处理用户权限问题?

我们使用创建了一个资产管理应用程序 Web 应用程序php。该应用程序允许用户浏览、上传、重命名、替换资产(图像和 3D 模型等二进制文件)

我们在 Windows 环境中开发,一切工作正常,但是当我们托管在 Linux 服务器(joyent)中时,我们在某些情况下运行时遇到权限问题。下面是环境设置

我们的公共网络根文件夹位于home/jill/web/public(webroot) 。所有资产都位于home/jill/web/public/assets(资产根目录)下以及子文件夹中

以下是我们处理资产管理方式的用例 -

  1. 使用 ftp 程序和 ftp 用户 (ftpuser) 批量上传所有资产
  2. 使用 webadmin 用户 (jill) 批量上传所有资产,该用户是home/jill/web/public
  3. 使用 Web 应用程序上传资源(默认 Web 用户是 www)

在上述所有用例中,我们还使用最新修改的文​​件覆盖资产。现在,webroot 中托管了一个 Flash 应用程序(游戏),它可以访问所有这些资源并在应用程序中加载。

现在,当我们尝试使用与最初由不同用户创建的用户 ID 不同的用户 ID 来覆盖/更新文件时,我们会遇到权限错误。

例子:尝试使用最初使用 ftp 用户上传的 Web 应用程序覆盖文件,反之亦然

我们可以如何处理这种情况,以便任何用户在 webroot\assets 下创建的任何文件或目录都可以由任何用户修改?

我是一名不熟悉 unix/linux 的开发人员,但我认为这与处理组和组权限有关,但我不确定如何设置?

答案1

尝试以下操作。 (这个已经在Lubuntu上测试过)

家/吉尔/网络/公共并做: ls -la

它将向您显示那里的文件和文件夹的详细信息。其中之一是资产(这只是一个例子,您的资产详细信息会有所不同):

-rw-r----- 1 user group 9275204 Jun 13 15:27 assets

这个想法是创建一个新组并使其成为资产的所有者,然后将所有用户添加到该组。

在服务器上创建一个新组。

groupadd assetgroup

将用户添加到新组:

usermod -a -G assetgroup ftpuser
usermod -a -G assetgroup jill
usermod -a -G assetgroup www

并改变所有权资产文件夹到资产组。 (-R表示递归改变)

sudo chgrp -R assetgroup assets/

答案2

这基本上有两件事:

1)对已经存在的文件和目录的权限:

艾伦的回答主要涵盖了这一点:创建一个特殊组,向其中添加可能需要的所有用户文件。确保目录你上传的地方就是它本身可写对于该组:chmod 0775 path/to/the/directory.任何现有文件都需要chmod 0664.

“神奇”数字是八进制的,代表三元组:setuid、所有者权限、组权限、世界权限。您对 setuid 不感兴趣,保留它0。对于其他的,八进制数(0-7)告诉您权限:如果第 0 位打开,则文件/目录是可执行的(对于目录,这意味着可以输入它),如果第 1 位打开,则文件/目录是可写的,第二位是管理可读性 - 例如0754意味着所有者拥有所有权限,组成员可以读取和执行,而世界其他人只能读取它。您可以使用助记符编写相同的内容,如下所示:chmod u=rwx,g=rx,o=r。请参阅man chmodLinux 系统以获得深入的解释。

2)新建文件的权限:

umask在上传时查找设置。这说明了创建新文件的权限。再次man umask在 Linux/UNIX 系统上看到,其想法是,您设置的任何位umask(与chmod上面解释的符号相同)都是排除从新创建的文件的权限 - 例如,如果您设置umask0023,您的文件将被创建为具有所有权限,您的默认组不可写入,其他任何人都不可写入或可执行。在这里设置第 0 位通常是个坏主意,因为在创建目录时,它会使其不可执行,从而完全阻止进入目录(对于设置了该位的用户集,在0023“任何其他人”的示例中) )。

除此之外,如果底层文件系统支持默认 ACL,则可能值得将它们分配给目录。这将允许更细粒度的访问控制(ACL 代表访问控制列表,类似于 Windows)。请参阅man setfacl获取更多信息。

大胖警告:让文件全局可写并不是一个好主意!将有效的权利保持在最低限度。

相关内容