Debian
如何讓 hostapd_cli 在 sudo 下執行 debian 拉伸?
我有一個執行的 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