添加了一个新用户来分组www数据和sudoers,仍然不知道为什么用户以root身份创build新的目录

我是Linux系统pipe理新手(处理用户和组),但作为开发人员,我确实有很多命令行经验。 现在,我试图确保我已经添加到我的Debian服务器在组www-data下的三个用户有适当和预期的权限。 目标是在/ var / www / html /中的所有目录www-data:www-data(我认为这就是我想要的至less…我这样做,所以我没有混合权限之间在root和www-data下创build的东西)。

我用三个新用户添加到了sudoers文件中,这个选项和root一样。

现在我不知道如何去考虑用户,我需要一些指导。

例如,当我以developer1身份login并发出命令mkdir时,它告诉我我没有相应的权限来执行此操作。 所以,我sudo键入我的用户的密码,然后mkdirtesting…,它显示为一个根目录作为所有者和根作为组的目录。

我怎样才能让developer1成为可以用www-data作为所有者和组创build目录的用户? 这是正确的方法来处理这个?

谢谢。

sudo创build的目录由root:root拥有的原因是,sudo实际上允许您以不同的用户身份运行命令,在这种情况下,它以root身份(因为您没有指定不同的用户名)。

将developer1放入组www-data,然后确保您希望此用户创build文件/目录的目录由组www-data拥有,并且可由该组写入。

现在developer1可以在那里创build文件和目录,因为他的组成员让他这样做。

但是你会注意到这些新的目录/文件是由developer1:developer1(或者,developer1:users或者类似的东西)所有的。 要解决这个问题,你可以使developer1的主要组 www-data,在这种情况下,他创build的所有内容都将由www-data组拥有。

如果你的目标是让这个用户在不同的组(例如用户或开发者)中的其他地方创build文件,但是在/ var / www中将它们创build为www-data,那么这是我还没有想到的一件事情。 到目前为止,我一直坚持两个(呃,三个,真的:第三个就是和它一起生活)解决方法:

  1. 让用户在创build时手动chgrp文件和目录。 可以recursion地和/或批量地完成,所以你可以例如上传大量的文件,然后一起chgrp它们。
  2. 设置一个经常运行的cron作业(例如,每隔5-10分钟),recursion地将你的web根目录下的所有东西(或者你试图控制的任何东西)都转换成www-data。 或者,您可以使用此cron作业chown -R www-data:www-data /var/www来确保文件/目录都属于www-data用户以及www-data组。

我意识到这些都不是理想的,尽pipe一旦创build了一个文件,无论是谁编辑它,它都将保留它的所有权。

这应该工作:

 # chown -R www-data.www-data /var/www/html # find /var/www/html -type d -print0 | xargs -0 chmod g+s # useradd developer1 -G www-data # useradd developer2 -G www-data 

发生了什么事情和组。 Setgid允许在/ var / www / html下创build的所有文件和目录都由当前组(在本例中为www-data)拥有。 通过将开发人员帐户添加到www-data组,您可以确保他们具有写入权限。

如果开发人员将文件复制到没有组写入权限的目录中,则可能会遇到更多问题,但可以由所有者用chmod手动修复这些问题。