您好,没有 root 权限是否可以挂载 samba 共享?
目前我有一个需要访问 smb 共享的 java 程序。(它将索引 smb 共享上的每个文件并创建一些 pdf)
由于共享的 IP 或 DNS 名称可能会发生变化(它应该可以在界面上更改)我无法将其放在 fstab 文件中。
另外,我不想以 root 用户身份运行我的应用程序,因为那真的很糟糕。我还能做些什么,让 Linux 系统中的所有用户都可以挂载 cifs 共享,而无需将挂载点放入 fstab 文件中?
答案1
编辑:
最近,我的这篇旧帖子又引起了我的注意。关于在 LAN 上查找 samba 共享的部分可以大大改进,如下所示。
首先使用nmap 脚本查找股份:
sudo nmap -oX - -sU -sS --script smb-enum-shares.nse -p U:137,T:139 192.168.1.0/24
(如果您的 LAN 不是 192.168.1.0/24,请进行相应修改)。请注意使用选项-oX-将输出发送到屏幕XML 格式,最适合编写脚本。
现在处理输出xmllint:
xmllint --xpath "//table/@key" -
这确定了钥匙全部属性桌子具有该节点的节点产生以下形式的输出:
$ xmllint --xpath "//table/@key" filename
key="\\192.168.1.1\IPC$" key="\\192.168.1.1\ClassicalMusic" key="\\192.168.1.1\print$" key="\\192.168.1.94\IPC$" key="\\192.168.1.94\RockMusic" key="\\192.168.1.94\VariousMusic" key="\\192.168.1.94\print
请注意一个令人讨厌的功能:xmllint2.9.9 之前版本无法用换行符分隔不同的匹配项,请阅读这个答案在姐妹网站上. 如果您需要更多信息xpath或者xmllint,你可以读到这里和这里, 分别。
如果你已经知道共享名称,并且确信没有空格在其名称中,您可以将上述所有内容组合起来以获取共享名称和地址,如下所示
sudo nmap -oX - -sU -sS --script smb-enum-shares.nse -p U:137,T:139 192.168.1.0/24 |\
xmllint --xpath "//table/@key" - |\
sed 's/ /\n/g' |\
grep ShareName
结果是
key="\\192.168.1.1\ClassicalMusic"
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
如果您希望为所有用户挂载资源,那么您就无法逃避 root 身份:毕竟,您正在侵犯其他用户的系统配置,并且只有 root 才被允许这样做。
尽管有种种限制,您仍然可以这样做。您必须编写一个 shell 脚本来查找要挂载的共享,然后挂载它。我会为您概述一下(抱歉,我很着急)。
此命令
sudo nmap -sP 192.168.1.0/24
(假设您的 LAN 是 192.168.1.0,请用您的 LAN 的相应数字替换)将返回所有活动 PC 的列表。
把这个列表逐个输入到这个命令中,
nmblookup -A 192.168.1.72
它将返回该电脑的 NetBios 名称。
使用以下命令查询 Samba 共享的存在:
smbclient -L net_bios_name_just-found -N
这将为您提供此系统上所有共享的列表,使用您刚刚找到的 netBios 名称。在这些结果中,您将找到所需的 samba 共享。
此时,您知道主机 PC 的 IP 地址和 NetBios 名称,当然还有您感兴趣的 Samba 共享的名称。您现在可以根据需要以 root 身份挂载共享。
如果您编写这些命令脚本,您可以:
以 root 身份随意执行它只是为了测试它;
将其插入到 crontab 中(作为 root,crontab -e),内容如下:
@boot /home/my_name/bin/my_special_script
确保 my_special_script 是可执行的。每次启动时都会挂载共享。
干杯,我得走了。