我有一个 SAMBA/CIFS 服务器,用户有自己的目录。我的客户端计算机运行 Linux 或 Windows。我想做的是在两个操作系统中使用该共享。但我的用户可以在任何计算机上登录,这是我的问题:在 Linux 中,我需要更改/etc/fstab
并包含如下内容:
//sambaserver/username /mnt/samba smbfs username=<username>,password=<pass> 0 0
我的问题是我无法静态设置用户名和密码,但我需要它动态的(我不确定这是正确的术语)。因此,简而言之:当某个用户登录系统时,我必须将共享安装为其主目录,但要记住该用户可以在其他计算机上登录,因此必须/etc/fstab
“捕获”用户名和密码。
我希望我的问题很清楚。提前致谢。
答案1
不要尝试将登录用户的 samba 共享安装在单个可重用位置(如果您有多个用户登录,这将导致问题),请考虑安装到每个用户唯一的位置(例如/home/<username>/sambaserver
,或/mnt/samba/<username>
在紧要关头)
如果您使用的是 Linux,smbmount
那么一个简单的用户空间 samba 安装程序应该可以满足您的需求。
创建一个像这样的小脚本:
#!/bin/sh
# Default samba server to connect to
SAMBASERVER="sambaserver"
USERNAME="$USER"
if [ -n "$1" ]
then
# We've been given a different samba server
SAMBASERVER="$1"
fi
if [ -n "$2" ]
then
# We've been given a different user on the samba server to use
USERNAME="$2"
fi
CREDSFILE="${HOME}/.${SAMBASERVER}.credentials"
# Try and make the mount point if it doesn't yet exist (and set suitable mount dir perms)
if [ ! -d "${HOME}/${SAMBASERVER}" ]
then
mkdir "${HOME}/${SAMBASERVER}" && chmod 0555 "${HOME}/${SAMBASERVER}" || exit 1
fi
if [ ! -f "$CREDSFILE" ]
then
echo "$CREDSFILE not found!"
exit 1
fi
smbmount "\\${SAMBASERVER}\${USERNAME}" "${HOME}/${SAMBASERVER}" -o user="$USERNAME",credentials="$CREDSFILE" || exit 1
(未经测试 - 您可能需要调整/调试/等)
然后在每个用户的主目录中创建一个名为(例如)的凭据文件,.sambaserver.credentials
并将其权限设置为 0600,由该用户拥有:
username=<samba user>
password=<samba password>
最后,在他们的 .profile 中调用上面的挂载脚本。例如:/usr/local/bin/mount-user-home.sh
或/usr/local/bin/mount-user-home.sh sambaserver somedifferentusername
特殊情况。
这应该适用于多个 samba 服务器、多个用户以及具有多个 samba 服务器的多个用户。
答案2
您可能正在寻找自动挂载。
描述 automount 程序用于管理 autofs(内联 Linux 自动挂载器)的挂载点。 automount 通过读取 auto.master(5) 映射来工作,并为主映射中的每个条目设置挂载点,以便在访问时自动挂载它们。文件系统在一段时间不活动后会自动卸载。
因此,您可以使用固定凭据甚至 LDAP/AD 票证动态挂载特定用户目录。
固定密码文件的配置示例:
$ cat auto.homedir
* -fstype=cifs,rw,credentials=/home/&/.smbcredentials,uid=&,gid=&,file_mode=755,dir_mode=755,users,sec=ntlmssp ://nas.example.com/&
CentOS 8 上的默认配置会检查密码文件是否存在。如果没有,它将尝试使用 kerberos,