AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 986686
Accepted
Isaac Sutherland
Isaac Sutherland
Asked: 2019-10-04 09:35:15 +0800 CST2019-10-04 09:35:15 +0800 CST 2019-10-04 09:35:15 +0800 CST

关闭 systemd 服务时,openvpn 无法在“down”脚本中执行 sudo

  • 772

操作系统:Ubuntu 16.04.2 LTS

我的 VPN 配置有指令:

user ovpn
group ovpn
up "/path/to/my/script"
down "/path/to/my/script"

我的 visudo 文件有指令:

%ovpn ALL=(ALL:ALL) NOPASSWD: /sbin/iptables

这允许 openvpn 从root非特权用户降级ovpn(出于安全原因),但仍用于iptables启动和关闭从数据库加载的路由。如果我直接从 shell 调用 openvpn 进程,它就可以工作,即:

$ sudo openvpn /etc/openvpn/vpn0.conf

然后用CTRL-杀死它C。“它有效”是指根据需要添加和删除 iptables 规则而不会出现任何错误。

但是,如果我使用 vanilla Ubuntu systemd openvpn 服务启动和停止 openvpn 进程。IE

$ sudo systemctl start openvpn
$ sudo systemctl stop openvpn

然后“--down”脚本在执行“stop”命令期间失败。当我检查 syslog 时,我看到 --down 脚本在 shell 命令调用时失败sudo /sbin/iptables,特别是在它试图派生进程的地方。(关于错误消息,我的脚本是一个使用 . 的 python 脚本subprocess.call(['/usr/bin/sudo', '/sbin/iptables', ...])。错误消息是:

File "/usr/lib/python2.7/subprocess.py", line 523, in call
  return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
  errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1235, in _execute_child
  self.pid = os.fork()
OSError: [Errno 11] Resource temporarily unavailable

如果我从 openvpn 配置文件中删除userandgroup指令以使进程root在整个执行过程中保持不变,那么我不会收到错误消息,并且 iptables 调用按预期工作,即使使用 systemd 服务启动和停止也是如此。

所以它闻起来像 systemd 阻止我sudo在关闭服务时使用升级权限。

关于如何克服这个困难,同时仍然降级为非特权用户的任何想法?

openvpn
  • 1 1 个回答
  • 197 Views

1 个回答

  • Voted
  1. Best Answer
    Isaac Sutherland
    2019-10-06T10:22:16+08:002019-10-06T10:22:16+08:00

    显然,在这种情况下Resource temporarily unavailable告诉我这os.fork是失败的,因为非特权用户已经达到了 openvpn 服务的 systemd 配置允许的最大进程数。

    为了解决这个问题,我编辑/lib/systemd/system/[email protected]并进行了以下更改:

    - LimitNPROC=10
    + LimitNPROC=100
    

    随后,即使使用非特权用户并使用 sudo 提升权限,我的iptables链式拆除命令也会成功。

    • 3

相关问题

  • OpenVPN:在哪里生成私钥?

  • 将 iPhone 连接到 OpenVPN

  • OpenVPN 的 Linux IP 转发 - 正确的防火墙设置?

  • 最好的点对点 VPN?

  • 通过 VPN 使您的打印机可用的最佳方法是什么?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve