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
    • 最新
    • 标签
主页 / user-32899

Isaac Sutherland's questions

Martin Hope
Isaac Sutherland
Asked: 2019-10-04 09:35:15 +0800 CST

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

  • 1

操作系统: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 个回答
  • 197 Views
Martin Hope
Isaac Sutherland
Asked: 2012-05-12 20:07:11 +0800 CST

当用户通过 SUID 位提升为 root 时,smbd 不会启动或停止

  • 1

在 Ubuntu 12.04 下,我编写了以下 C 程序来帮助我在运行自动备份时关闭服务器的 apache2 和 samba 服务。请注意,在 Makefile 中我设置了 SUID 位,这样程序在由低级用户运行时将具有 root 权限tmv。

服务.c:

#include <stdio.h>
#include <stdlib.h>

void usage(char * arg0) {
    printf("Usage: %s start|stop\n", arg0);
    exit(1);
}

int main(int argc, char ** argv) {
    fprintf(stderr, "Running as: ");
    system("whoami");
    if (argc != 2) usage(argv[0]);
    if (!strcmp(argv[1], "stop")) {
        printf("Before running rsync, we need to shut down apache2 and smbd.\n");
        system("service apache2 stop");
        system("service smbd stop");
    } else if (!strcmp(argv[1], "start")) {
        printf("After running rsync, we need to start apache2 and smbd.\n");
        system("service apache2 start");
        system("service smbd start");
    } else {
        usage(argv[0]);
    }
    return 0;
}

生成文件:

all: services.c
    gcc -o services services.c
    chown root:tmv services
    chmod u+s services      # allow elevation to root
    chmod o-rx services     # only user tmv should execute

这是我得到的:

tmv@patience:~$ ./services start
Running as: root
After running rsync, we need to start apache2 and smbd.
 * Starting web server apache2                                           [ OK ] 
start: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory

以 root 身份运行工作正常:

# ./services start
Running as: root
After running rsync, we need to start apache2 and smbd.
 * Starting web server apache2                                           [ OK ] 
smbd start/running, process 8515

任何想法为什么我./services在以用户身份运行时无法按预期工作tmv?是不是也需要配置一些环境变量?

backup samba suid
  • 1 个回答
  • 165 Views

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

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助
subwaysurfers
my femboy roommate

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve