无需 root/fstab 即可挂载 cifs 共享

无需 root/fstab 即可挂载 cifs 共享

您好,没有 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 脚本来查找要挂载的共享,然后挂载它。我会为您概述一下(抱歉,我很着急)。

  1. 此命令

    sudo nmap -sP 192.168.1.0/24
    

(假设您的 LAN 是 192.168.1.0,请用您的 LAN 的相应数字替换)将返回所有活动 PC 的列表。

  1. 把这个列表逐个输入到这个命令中,

    nmblookup -A 192.168.1.72
    

它将返回该电脑的 NetBios 名称。

  1. 使用以下命令查询 Samba 共享的存在:

    smbclient -L net_bios_name_just-found -N
    

这将为您提供此系统上所有共享的列表,使用您刚刚找到的 netBios 名称。在这些结果中,您将找到所需的 samba 共享。

此时,您知道主机 PC 的 IP 地址和 NetBios 名称,当然还有您感兴趣的 Samba 共享的名称。您现在可以根据需要以 root 身份挂载共享。

如果您编写这些命令脚本,您可以:

  1. 以 root 身份随意执行它只是为了测试它;

  2. 将其插入到 crontab 中(作为 root,crontab -e),内容如下:

    @boot /home/my_name/bin/my_special_script
    

确保 my_special_script 是可执行的。每次启动时都会挂载共享。

干杯,我得走了。

相关内容