Apache2:无法设置安装命名空间:权限被拒绝

问题描述 投票:0回答:3

我有 Debian 10 的 VPS 服务器。我想使用选项

PrivateTmp=true
启动 Apache2。 但在启动时它失败并出现错误:apache2.service:在步骤 NAMESPACE 生成 /usr/sbin/apachectl 时失败:权限被拒绝

    ● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Fri 2020-11-27 17:17:43 CET; 5s ago
     Docs: https://httpd.apache.org/docs/2.4/
  Process: 523 ExecStart=/usr/sbin/apachectl start (code=exited, status=226/NAMESPACE)

Nov 27 17:17:43 5091-server systemd[1]: Starting The Apache HTTP Server...
Nov 27 17:17:43 5091-server systemd[523]: apache2.service: Failed to set up mount namespacing: Permission denied
Nov 27 17:17:43 5091-server systemd[523]: apache2.service: Failed at step NAMESPACE spawning /usr/sbin/apachectl: Permission denied
Nov 27 17:17:43 5091-server systemd[1]: apache2.service: Control process exited, code=exited, status=226/NAMESPACE
Nov 27 17:17:43 5091-server systemd[1]: apache2.service: Failed with result 'exit-code'.
Nov 27 17:17:43 5091-server systemd[1]: Failed to start The Apache HTTP Server.

我检查了 tmp 的权限:

root@5091-server:~# ls -ld /tmp
drwxrwxrwt 8 root root 4096 Nov 27 17:17 /tmp
root@5091-server:~# ls -ld /var/tmp
drwxrwxrwt 2 root root 4096 Nov 27 17:17 /var/tmp

知道哪些权限是错误的吗?

linux apache debian vps permission-denied
3个回答
4
投票

这与新的 systemd 安全功能(v220+?)与 非特权 LXC 容器(如 Proxmox 中的容器)冲突有关。

  1. 编辑 apache 服务单元配置(干净的方式):

    sudo systemctl edit apache2.service
    
  2. 添加此选项以禁用新的 systemd 安全功能(影响 LXC 容器,例如 Proxmox 中的容器)

    [Service]
    PrivateDevices=false
    PrivateTmp=false
    ProtectControlGroups=false
    ProtectKernelModules=false
    ProtectSystem=false
    

    也许只需要:

    ProtectHome=false
    ProtectSystem=false
    
  3. 然后

    sudo systemctl start apache2.service
    sudo systemctl status apache2.service  # Just to check the output
    

我在 apache2 和 memcached 上看到了这个。还可以使用 systemd-logind。在最后一种情况下,ssh 连接速度受到影响。

ssh -vvv
卡在
debug1: pledge: filesystem
(无 VPN)和
debug1: pledge: network
(有 VPN)上。正如herehere所述,问题已解决,在 Proxmox 容器上启用nesting(也here)。

可能简单地为容器启用“嵌套”功能(如果它没有特权)将允许 systemd 使用其命名空间功能。

相关


1
投票

这可以工作...

sudo sed -i -e 's,PrivateTmp=true,PrivateTmp=false\nNoNewPrivileges=yes,g' /lib/systemd/system/apache2.service
sudo systemctl daemon-reload
sudo systemctl start apache2.service
sudo systemctl status apache2.service

0
投票

在较新的操作系统版本上,我在使用 systemd 的 docker 中遇到了同样的错误。我的用例是一个测试设置。

事实证明,我的 docker 主机系统启用了 apparmor,这限制了容器内的 systemd 使用。

我最终使用了

    security_opts:
      - "apparmor=unconfined"

在ansible molecular.yml中。

可以通过运行来检查设置

$ docker inspect $CONTAINERNAME --format '{{ .Id }}: SecurityOpt={{ .HostConfig.SecurityOpt }}'

© www.soinside.com 2019 - 2024. All rights reserved.