Debian

如何讓 hostapd_cli 在 sudo 下執行 debian 拉伸?

  • August 5, 2020

我有一個執行的 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 命令會起作用。這裡會發生什麼?

這沒有按預期工作的原因是因為/tmp被 systemd 重新映射到/tmp/systemd-private-67fcab218d3d46bcb5092dd8a6d4789b-nagios-nrpe-server.service-lN2L1e/tmp

該問題與 sudo 無關,但事實上 sudo 是作為在 nrpe 守護程序下執行的外掛執行的,而 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

引用自:https://unix.stackexchange.com/questions/382295