问题场景描述
最近在Ubuntu系统上需要挂载公司文件服务器上的共享目录,该服务器运行Mac OS X系统,同时开启了AFP和Windows文件共享(SMB/CIFS)协议。需求要点:
- 需要通过/etc/fstab实现自动挂载
- 使用普通用户权限操作
- 每次挂载时需要密码验证
基础配置方法
最基本的/etc/fstab配置如下:
//服务器IP/共享名 /挂载点 cifs credentials=/path/to/credentials 0 0
其中credentials文件内容格式:
username=你的用户名
password=你的密码
domain=工作组或域名(可选)
处理特殊字符的共享名
当共享名包含空格等特殊字符时,需要进行转义处理:
//10.1.0.15/G4\\040320 /media/G4 cifs credentials=/etc/cifs_creds 0 0
这里\\040
是空格的ASCII码八进制表示。
解决权限问题
要实现普通用户挂载,需要:
- 确保挂载点目录存在且用户有权限
- 在fstab中添加
user
选项
//10.1.0.15/share /mnt/share cifs credentials=/etc/cifs_creds,user,uid=1000,gid=1000 0 0
其中uid和gid可通过id -u
和id -g
命令获取。
安全存储凭据
推荐两种安全存储密码的方式:
1. 使用credentials文件
chmod 600 /etc/cifs_creds
2. 使用密钥环(keyring)
安装必要工具:
sudo apt-get install cifs-utils keyutils
创建密钥:
sudo /sbin/request-key create cifs.spnego * * /usr/sbin/cifs.upcall %k
sudo /sbin/request-key create dns_resolver * * /usr/sbin/cifs.upcall %k
然后在fstab中使用:
//server/share /mnt/share cifs _netdev,user,uid=1000,sec=krb5 0 0
常见错误排查
遇到挂载失败时,可按以下步骤排查:
1. 检查服务端共享设置
smbclient -L //server -U username
2. 手动测试挂载
sudo mount -t cifs //server/share /mnt/share -o user=username
3. 查看详细错误信息
dmesg | tail -20
journalctl -xe
完整示例配置
以下是一个生产环境可用的完整配置示例:
# /etc/fstab 配置
//192.168.1.100/开发文档 /mnt/dev_docs cifs credentials=/etc/smbcreds,user,uid=1000,gid=1000,file_mode=0775,dir_mode=0775,noperm 0 0
# /etc/smbcreds 内容
username=dev_user
password=Complex@Pass123
domain=WORKGROUP
# 设置权限
sudo chmod 600 /etc/smbcreds
sudo mkdir -p /mnt/dev_docs
sudo chown dev_user:dev_user /mnt/dev_docs
高级选项说明
选项 | 说明 |
---|---|
vers=3.0 | 指定SMB协议版本 |
iocharset=utf8 | 支持中文文件名 |
cache=none | 禁用缓存 |
noserverino | 防止inode冲突 |
rw/ro | 读写/只读 |
实际使用时可根据需要组合这些选项。