在我说任何话之前,我知道组和用户的权限是如何运作的。
我的设置是:
a. 我的用户是monkey
并且属于该组www-data
groups monkey
monkey : monkey adm cdrom sudo dip www-data plugdev lpadmin sambashare
b. apache 的根文件夹是,并且具有所有者和组的/home/monkey/var/www
权限0775
www-data
www-data
ls -la /home/monkey/var/www
total 8 drwxrwxr-x 2 www-data www-data 4096 Aug 12 10:37 . drwxr-xr-x 3 root root 4096 Aug 12 10:37 ..
c. 但我无法写入/home/monkey/var/www/
monkey@ubuntu:~$ cp robots.txt var/www/robots.txt
cp: cannot create regular file âvar/www/robots.txtâ: Permission denied
该robots.txt
文件是在monkey
用户下创建的。
我错过了什么?
答案1
您的父文件夹权限(var
设置为 755 且所有者为 root)限制了您的子文件夹。您需要将您的权限更改为 var 或将所有者更改为 www-data:www-data 并将权限更改为 775
编辑
经过一番挖掘,用户需要newgrp <group-name>
在执行任何操作之前切换组。要返回该 shell 上的默认组,请键入 exit 或Ctrl+D
答案2
用户有一个主组,可以有多个附加组。用户主组在 /etc/passwd 中设置,即:
www-data:x:30:40:www-data:/var/www:/usr/sbin/nologin
表示用户 'www-data' 是组 ID 40 的成员。
您可以在 /etc/group 中将用户添加到其他组,但是当您创建文件时,默认情况下系统将设置用户基本的组作为所有者,而不是其他组之一。某些 Unix 会检查目录组,如果用户是该组的成员,则新文件的组所有者将取自目录,而不是用户。
所以当你创造一个文件,默认情况下,您以用户“monkey”和组“monkey”的身份执行此操作。并且由于文件夹归以下人员所有:
- 用户“www-data”,不是由“monkey” - 未使用用户权限
- 组“www-data”,不是由“monkey”创建的 - 组权限也未被使用
- 使用了“其他”权限,并且
使用 newgr 命令,您可以将主要组切换到附加组之一,从而有效地为新文件创建设置组所有者。
使用 umask 命令您可以调整用于新文件创建的权限。
现在有帮助吗?