如何让 hostapd_cli 在 sudo 下在 debianstretch 下工作?

如何让 hostapd_cli 在 sudo 下在 debianstretch 下工作?

我有一个运行的bash脚本hostapd_cli all_sta,并且该脚本在jessie和stretch下从命令行成功执行。该脚本在 jessie 上的 sudo 下运行时也可以运行,但在拉伸时则不行。在拉伸时,命令超时并出现错误'STA-FIRST' command timed out。当我在 strace 下调用 hostapd_cli 时,我看到它在以下位置打开一个套接字文件/tmp

bind(3, {sa_family=AF_UNIX, sun_path="/tmp/wpa_ctrl_13552-1"}, 110) = 0
connect(3, {sa_family=AF_UNIX, sun_path="/var/run/hostapd/wlan1"}, 110) = 0

作为测试,我暂时修改了脚本并添加了一行:

echo "this is a test" >/tmp/test 2>/root/error

当修改后的脚本在 sudo 下运行时,不会创建 中的文件/tmp,也不会向 中写入错误/tmp/error

在我的系统上,/tmp不是 tmpfs,只是/ext3 文件系统下的一个普通旧目录。所以 root 无法在下面创建文件/tmp并且有足够的空间。

# df -h /tmp
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2       6.7G  5.1G  1.4G  80% /

ls -ld /tmp给出:

# ls -ld /tmp
drwxrwxrwt 9 root root 4096 Jul 27 23:50 /tmp/

如果我能弄清楚为什么/tmp无法写入,我相信 hostapd_cli 命令将会起作用。这里可能发生什么?

答案1

这没有按预期工作的原因是因为/tmp被 systemd 重新映射为/tmp/systemd-private-67fcab218d3d46bcb5092dd8a6d4789b-nagios-nrpe-server.service-lN2L1e/tmp

该问题与 sudo 无关,但事实是 sudo 作为在 nrpe 守护进程下运行的插件执行,而该守护进程又被配置为/tmp在 systemd 下拥有私有进程。

为了解决这个问题,我设置了:

systemctl stop nagios-nrpe-server
set PrivateTmp=false in /etc/systemd/system/multi-user.target.wants/nagios-nrpe-server.service
systemctl daemon-reload
systemctl start nagios-nrpe-server

相关内容