在 EC2 上使用 Apache 时,如何允许我的 apache 用户上传到用户目录?

发布于 2024-10-04 07:57:59 字数 402 浏览 3 评论 0原文

我已经设置了一个 Amazon EC2 实例。默认情况下,我的 apache 以 apache 组的用户 apache 身份运行。

我创建了新的 ftp 用户 test 并将文件上传到 /home/test/public_html。然后,我将虚拟主机 DocumentRoot 配置为指向我的项目,位于 /home/test/public_html 中。

当目录由用户test拥有时,在项目中上传被拒绝:它给出权限错误。如果我将目录的所有者更改为 apache,它就可以工作。

如何赋予 apache 用户超级用户权限,以允许其在不更改目录所有者的情况下上传?

I have set up an Amazon EC2 instance. By default my apache is running as user apache of the group apache.

I created new ftp user test and uploaded my files to /home/test/public_html. I then configured the virtual host DocumentRoot to point to my project, residing in /home/test/public_html.

When the directory is owned by user test, uploading in the project is denied: it gives a permission error. If I change the owner of the directory to apache, it works.

How can give the apache user superuser rights, to permit it to upload without changing the directory's owner?

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

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

发布评论

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

评论(2

这个俗人 2024-10-11 07:57:59

总是同样的问题。使用用户 ftp 上传,用户 apache 没有访问权限。

我使用文件系统扩展 acls 解决了这个问题。

可以将“默认”用户和/或组放入新生成的文件中。

您需要做什么:

  • 将“acl”添加到所需文件系统的挂载选项中。 (在执行此操作之前,请检查您的内核是否配置为 posix acl!)
  • 使用命令“setfacl”设置权限(根据您的发行版,您可能需要先安装包含“setfacl”的软件包。)

示例:

首先为用户 ftp 拥有因此可以进行上传

# chown ftp:ftp /var/www/server/htdocs
# ls -la /var/www/server/htdocs/
insgesamt 0
drwxr-xr-x  2 ftp      ftp  40 26. Nov 12:40 .
drwxrwxrwt 15 root     root  360 26. Nov 12:40 ..

下一步为用户 apache 设置默认值

# setfacl -d -m u:apache:rwx /var/www/server/htdocs
# setfacl -d -m g:apache:rwx /var/www/server/htdocs
# getfacl /var/www/server/htdocs
# file: /var/www/server/htdocs
# owner: ftp
# group: ftp
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:apache:rwx
default:group::r-x
default:group:apache:rwx
default:mask::rwx
default:other::r-x

将文件或目录放入此目录后,您将看到您对它们具有多个访问权限。但请记住,这些权利仅授予新文件,而不授予曾经存在过的文件。

# getfacl /var/www/server/htdocs/test.txt

# file: /var/www/server/htdocs/test.txt
# owner: ftp
# group: ftp
user::rw-
user:apache:rwx                 #effective:rw-
group::r-x                      #effective:r--
group:apache:rwx                #effective:rw-
mask::rw-
other::r--

使用“ls -l”时,您会在权限后面看到一个“+”,以告知有关 acl 权限的信息:

# ls -la /var/www/server/htdocs
insgesamt 0
drwxr-xr-x+  3 ftp      ftp   80 26. Nov 12:43 .
drwxrwxrwt  15 root     root 360 26. Nov 12:40 ..
drwxrwxr-x+  2 ftp      ftp   40 26. Nov 12:43 test
-rw-rw-r--+  1 ftp      ftp    0 26. Nov 12:43 test.txt

It's always same problem. Upload with user ftp and no access for user apache.

I solved that problem using filesystems extended acls.

It's possible to put a 'default' user and/or group to new generated files.

What you have to do:

  • add 'acl' to your mount options for your desired filesystem. (Please check if your kernel is configured for posix acl before doing so!)
  • use command 'setfacl' to set permissions (you may need to install a package containing 'setfacl' before depending on your distribution.)

Example:

First own for user ftp so uploads can be made

# chown ftp:ftp /var/www/server/htdocs
# ls -la /var/www/server/htdocs/
insgesamt 0
drwxr-xr-x  2 ftp      ftp  40 26. Nov 12:40 .
drwxrwxrwt 15 root     root  360 26. Nov 12:40 ..

Next set default for user apache

# setfacl -d -m u:apache:rwx /var/www/server/htdocs
# setfacl -d -m g:apache:rwx /var/www/server/htdocs
# getfacl /var/www/server/htdocs
# file: /var/www/server/htdocs
# owner: ftp
# group: ftp
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:apache:rwx
default:group::r-x
default:group:apache:rwx
default:mask::rwx
default:other::r-x

After putting files or directorys to this directory you will see that you have multiple accessrights to them. But keep in mind that those rights are only given to new files not to existing once.

# getfacl /var/www/server/htdocs/test.txt

# file: /var/www/server/htdocs/test.txt
# owner: ftp
# group: ftp
user::rw-
user:apache:rwx                 #effective:rw-
group::r-x                      #effective:r--
group:apache:rwx                #effective:rw-
mask::rw-
other::r--

When using 'ls -l' you see a '+' after the permissions to inform about acl rights:

# ls -la /var/www/server/htdocs
insgesamt 0
drwxr-xr-x+  3 ftp      ftp   80 26. Nov 12:43 .
drwxrwxrwt  15 root     root 360 26. Nov 12:40 ..
drwxrwxr-x+  2 ftp      ftp   40 26. Nov 12:43 test
-rw-rw-r--+  1 ftp      ftp    0 26. Nov 12:43 test.txt
过期情话 2024-10-11 07:57:59

我会不惜一切代价避免让 apache 用户拥有 root 权限。

这将是一个相当严重的安全问题:正是因为服务器可能(更)容易受到攻击,所以您通常会为其创建一个特定的用户(此处为“apache”用户),您可以在其中指定权限那些服务器运行真正需要的。

如果 Apache 用户没有所有正确的权限出现问题,您应该通过将相应文件的所有权更改为 apache 用户来解决这些问题,

chown apache:apache <filename>

或者使它们对更多用户可读/可写/可执行,例如使用

chmod 777 <filename>

I would at all cost avoid letting apache user have root privileges.

This would be quite a serious security issue: exactly because the server is potentially (more) vulnerable you normally make a specifc user for it (here the 'apache' user) where you can specify the privileges to only those that are really needed for the server run.

If there are problems with the Apache user not having all the right permissions you should solve them by changing the ownership of corresponding files to apache user,

chown apache:apache <filename>

or, by making them readable/writable/executable for more users, e.g. using

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