www 数据权限?

发布于 2025-01-02 01:38:06 字数 150 浏览 0 评论 0原文

所以我在 /var/www 中有一个目录(称为 cake),我需要允许 www-data 写入它,但我也想写入它(无需使用 sudo)。我担心将权限更改为 777,以防我的计算机上的其他用户(或黑客)尝试修改该目录中的文件。如何只允许我自己和 Apache 的 www-data 访问?

So I have a directory in /var/www (called cake) and I need to allow www-data to write to it, but I also want to write to it (without having to use sudo). I'm afraid to change the permissions to 777 in case some other user on my machine (or a hacker) attempts to modify files in that directory. How do I only allow access for myself and Apache's www-data?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

窗影残 2025-01-09 01:38:06
sudo chown -R yourname:www-data cake

然后

sudo chmod -R g+s cake

第一个命令更改所有者和组。

第二个命令添加 s 属性,该属性将使 cake 中的新文件和目录具有相同的组权限。

sudo chown -R yourname:www-data cake

then

sudo chmod -R g+s cake

First command changes owner and group.

Second command adds s attribute which will keep new files and directories within cake having the same group permissions.

舂唻埖巳落 2025-01-09 01:38:06

正如 Slicehost 的一篇文章所述:

用户设置

所以让我们首先将主用户添加到 Apache 用户组:

sudo usermod -a -G www-data demo

这会将用户“demo”添加到“www-data”组。请确保您使用
上面显示的 usermod 命令的 -a 和 -G 选项。

您需要注销并重新登录才能启用该组
改变。

立即检查组:

<前><代码>组
...
# 演示 www-data

所以现在我是两个组的成员:我自己的组(演示组)和 Apache 组
(www-数据)。

文件夹设置

现在我们需要确保 public_html 文件夹归主用户所有
(演示)并且是 Apache 组 (www-data) 的一部分。

让我们进行设置:

sudo chgrp -R www-data /home/demo/public_html

当我们讨论权限时,我将添加一个关于
sudo 命令:使用绝对路径是一个好习惯
(/home/demo/public_html) 如上所示而不是相对路径
(~/public_html)。它确保 sudo 被正确使用
位置。

如果您有一个带有符号链接的 public_html 文件夹,那么
小心该命令,因为它会遵循符号链接。在那些
如果是工作的 public_html 文件夹,请手动更改每个文件夹。

设置gid

到目前为止还不错,但请记住我们刚刚给出的命令仅影响
现有文件夹。有什么新的吗?

我们可以设置所有权,因此任何新内容也都在“www-data”中
组。

第一个命令将更改 public_html 的权限
包含“setgid”位的目录:

sudo chmod 2750 /home/demo/public_html

这将确保任何新文件都被赋予组“www-data”。如果
你有子目录,你需要为每个子目录运行该命令
子目录(此类权限不适用于“-R”)。
幸运的是,将使用“setgid”位创建新的子目录
自动设置。

如果我们需要允许对 Apache 的上传目录进行写访问
例如,然后像这样设置该目录的权限:

sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads

权限只需要设置一次,因为新文件将
自动分配正确的所有权。

As stated in an article by Slicehost:

User setup

So let's start by adding the main user to the Apache user group:

sudo usermod -a -G www-data demo

That adds the user 'demo' to the 'www-data' group. Do ensure you use
both the -a and the -G options with the usermod command shown above.

You will need to log out and log back in again to enable the group
change.

Check the groups now:

groups
...
# demo www-data

So now I am a member of two groups: My own (demo) and the Apache group
(www-data).

Folder setup

Now we need to ensure the public_html folder is owned by the main user
(demo) and is part of the Apache group (www-data).

Let's set that up:

sudo chgrp -R www-data /home/demo/public_html

As we are talking about permissions I'll add a quick note regarding
the sudo command: It's a good habit to use absolute paths
(/home/demo/public_html) as shown above rather than relative paths
(~/public_html). It ensures sudo is being used in the correct
location.

If you have a public_html folder with symlinks in place then be
careful with that command as it will follow the symlinks. In those
cases of a working public_html folder, change each folder by hand.

Setgid

Good so far, but remember the command we just gave only affects
existing folders. What about anything new?

We can set the ownership so anything new is also in the 'www-data'
group.

The first command will change the permissions for the public_html
directory to include the "setgid" bit:

sudo chmod 2750 /home/demo/public_html

That will ensure that any new files are given the group 'www-data'. If
you have subdirectories, you'll want to run that command for each
subdirectory (this type of permission doesn't work with '-R').
Fortunately new subdirectories will be created with the 'setgid' bit
set automatically.

If we need to allow write access to Apache, to an uploads directory
for example, then set the permissions for that directory like so:

sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads

The permissions only need to be set once as new files will
automatically be assigned the correct ownership.

微凉徒眸意 2025-01-09 01:38:06

假设您想通过 sftp 进入与 www-data 共享读取、写入和执行权限的目录,您应该执行以下操作:

1 - 将自己添加到 www-data 组

sudo usermod -a -G www-data <your_user>

2 - 设置所需的用户:文件夹的组所有权,并files recursively

sudo chown -R <your_user>:www-data <your_folder>

3 - 这为所有用户添加了权限(读写执行)(a+rwx);限制他人的权限(o-rwx);为该目录 (ug+s) 下创建的每个新文件设置相同的(继承文件夹)用户:组。这将递归执行,并且仅在文件夹中执行(可能正是您想要的)

sudo find <folder_name> -type d -exec chmod a+rwx,o-rwx,ug+s {} +

Let's say you want to sftp into a directory sharing reading, writing and executing permissions with www-data, this is what you should do:

1 - Add yourself to www-data group

sudo usermod -a -G www-data <your_user>

2 - Sets the wanted user:group ownership for your folder and files recursively

sudo chown -R <your_user>:www-data <your_folder>

3 - This adds permissions (read write execute) to all users (a+rwx); Restrict permissions from others (o-rwx); Sets the same (folder inherited) user:group for every new file created under that directory (ug+s). This will be executed recursively and only in folder (probably exactly what you want)

sudo find <folder_name> -type d -exec chmod a+rwx,o-rwx,ug+s {} +
℉絮湮 2025-01-09 01:38:06

检查根目录的用户

ls -l ~/projects/
drwxrwxr-x 2 sapama sapama 4096 May 24 07:43 web

本例中的用户名是 sapama

在 gedit /etc/apache2/envvars 中编辑该目录的用户和组

#export APACHE_RUN_USER=www-data
#export APACHE_RUN_GROUP=www-data
export APACHE_RUN_USER=sapama
export APACHE_RUN_GROUP=sapama

重新启动 Apache sudo 服务 apache2 重新启动

Check the user of the root directory

ls -l ~/projects/
drwxrwxr-x 2 sapama sapama 4096 May 24 07:43 web

The username in this case is sapama

Edit the user and group of that directory in the gedit /etc/apache2/envvars

#export APACHE_RUN_USER=www-data
#export APACHE_RUN_GROUP=www-data
export APACHE_RUN_USER=sapama
export APACHE_RUN_GROUP=sapama

Restart Apache sudo service apache2 restart

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文