有数百台服务器来来去去,频率足够高,足以进行编辑/etc/fstab
添加新的文件系统绝对是一个烦人的限制。
如果您所做的只是列出服务器上的文件和修改时间,那么smbclient(1)
命令是一个很好的起点。smbclient(1)
很像 SMB 和 CIFS 共享的 FTP 接口。这-c
命令行选项允许您运行特定命令;就像是:
smbclient //$servername/$sharename -c "dir path/to/directory/"
如果您要对文件执行更多操作而不仅仅是列出修改时间,那么将共享安装为文件系统将减少连接和身份验证请求的数量,并且可能会进行解析stat(2)
输出比解析数据的纯文本表示要容易得多。
如果您想继续安装文件系统,请首先拆分脚本。
一小部分应该包含服务器名称、共享路径和可选的安装路径;它将(服务器、共享、路径)添加到/etc/fstab
.
这部分可以是 setuid root。 (这很危险,但比以 root 身份运行整个 PHP 脚本要好。)
或者,您可以使用以下命令挂载文件系统acl(5)
支持并添加新的访问控制条目:
mount / -oremount,acl
setfacl -m www::rw /etc/fstab
Now the www
用户有权限修改/etc/fstab
文件。 (请注意,我还没有实际测试过addmntent(3)
当 ACL 用于授予用户写访问权限时/etc/fstab
.)一定要修改/etc/fstab
始终安装/
with acl
支持,因此这可以在重新启动后起作用。
您可以使用addmntent(3)
添加新条目的 C 库函数/etc/fstab
。如果您要使用 setuid root 可执行文件,我会选择 C 而不是脚本语言,并且无论如何我可能会选择 C 而不是脚本语言,因为addmntent(3)
已经知道如何将格式正确的安装条目写入/etc/fstab
.
包括user
and noauto
选项,以便您的脚本可以非特权运行,并且仍然在需要时挂载共享。