我是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,那么这是我还没有想到的一件事情。 到目前为止,我一直坚持两个(呃,三个,真的:第三个就是和它一起生活)解决方法:
chgrp文件和目录。 可以recursion地和/或批量地完成,所以你可以例如上传大量的文件,然后一起chgrp它们。 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手动修复这些问题。