非root用户使用smb挂在window共享
前段时间被smbmount的问题困惑了好几天,由于本地(windows XP)编辑的东西要经常放到远程的编译机(RedHat AS4)上进行编译,为了方便一般是直接将本地目录共享出来,然后在linux上执行命令mount -t smbfs或者使用smbmount进行挂载。
如要将远程(如172.0.0.1)的Prj_Dev挂在本地的/home/phrack/dev下需要执行以下命令:
mkdir /home/phrack/dev # 确保本地挂在节点存在
smbmount //172.0.0.1/Prj_Dev /home/phrack/dev -o username=phrack,rw,uid=`id -u`,gid=`id -g` #-o选项中:username为windows共享时指定可访问的本地账户,rw为可读写选项,uid、gid分别指定为linux用户的用户id和组id
但是默认情况下smbmount必须需要root权限才可以进行,这样比较麻烦,于是就希望普通用户可以有smbmount的权限,对smbmount赋权限chmod 6755 smbmount之后执行smbmount操作发现居然不行,在网上查找相关信息说是为了安全所以不允许这样做,后来发现其实需要对另外一个命令(smbmnt)设定suid权限即可(chmod 6755 smbmnt)
通过man函数查看smbmnt发现:
smbmnt is a helper application used by the smbmount program to do the actual mounting of SMB shares.smbmnt can be installed setuid root if you want normal users to be able to mount their SMB shares.
另外当windows重启或长时间无响应之后linux上对应的挂载点目录可能会成为"坏死"目录,具体现象是ls -l及cd挂载点目录操作被阻塞,这个时候需要使用smbumount挂载点目录即可(可能时间会有点久,需要耐心等一下)
通过smbmount挂载到linux上还存在一些其他问题,主要是通过命令行操作windows文件等,这些问题一定要给予足够的重视。否则轻则使人迷惑不解,重则使挂载目录内的文件遭到损毁。
我曾经使用perl -i -pe 's/\t$//g'来去除cpp文件结尾处的tab,结果发现所有文件内容不见了!而使用shell及perl编写的脚本也大多出现一些令人困惑的现象,后来发现都是与这种挂载方式有关。