在Ubuntu主机上使用Samba共享文件并进行权限控制
说明
- 本文的顺序基本上遵循操作流程,推荐先整体阅读本文,大概了解整个流程后再行操作。最好先在测试台或虚拟机内操作确认基本无误后再施行至生产环境。
- 本文全部操作均在
root
用户下操作。
安装Samba
1 | apt update&&apt install -y samba |
本文操作环境中的samba版本为:Version 4.13.17-Ubuntu
。
设定计划
假设这里有三个文件夹:
共享名 | 实际路径 | 可读可写 | 只读用户 |
---|---|---|---|
Data0 | /home/user0/data0 | user1 | user2 |
Data1 | /home/user0/data1 | user2 | - |
Data2 | /home/user0/data2 | - | 任何人 |
确认好共享计划后,就可以开始了。注意,本文并未考虑到打印机的共享,如需在smb协议上共享打印机,可参考官方文档进行配置。
如需设置可读可写(完全开放)的共享文件夹,参看本站文章Samba免授权访问。
添加用户
如果上述的用户仅用来做Samba共享权限控制的话,那么应该是既不能让这些用户登录到shell和本地登录,也不应该给这些用户创建对应的Home文件夹。
用下面的命令添加新用户:
1 | adduser --no-create-home --disabled-login --shell /sbin/nologin --disabled-password [USER NAME] |
--no-create-home
选项意味着不会给这个用户创建home文件夹;--shell
参数指定了该用户的shell类型;--disabled-login
选项意味着禁用该用户登录;--disabled-password
选项意味着禁用该用户的密码。
执行该命令后会交互式询问一些信息,包括全名等,无特殊需要则全部留空(直接回车)即可。
阻止共享用户登录到ssh
编辑/etc/ssh/sshd_config
:
在其中加入一行:
1 | DenyUsers user1 user2 |
或将多个用户添加至同一组,再添加到ssh配置文件中:
1 | DenyGroups smbgroup group1 |
创建Samba共享账户
在上面创建好用户后,即可开始创建Smaba共享账户。请注意,将要创建的samba共享账户必须是本机上存在的本地账户。
- 创建账户:
1
smbpasswd -a user1
- 删除账户:
1
smbpasswd -x user1
- 修改密码:
1
smbpasswd user1
建立smb.conf配置文件
首先备份默认的配置文件,cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
,然后删掉默认的配置文件,再新建一个空的。
Global
这一节规定了服务器的大体信息,包括所在组和描述等信息。
1 | [global] |
workgroup
参数必须和局域网内需要连接的其他设备是一样的;security
参数指定验证方式,值有4种:share
不验证、user
本地用户验证、server
用专用的验证服务器验证、domain
使用域控制器验证。后两种验证方式不常用,且基本不适用于家用环境,不过多介绍。server string
指定服务器的描述信息;interfaces
指定监听接口;min protocol
指定samba运行的最低版本,提高该值可能会提高兼容性和性能,并解决一些问题,建议不指定。
共享字段
1 | [Data0] |
browsable
控制是否在访问根目录时显示此共享文件夹force user
:强制使用本地服务器的某用户读取,无论客户端使用哪个用户登录。可以设置为root但不建议生产环境中设置为rootwrite list
:可读取写入的用户列表,多个用户用空格隔开read list
:仅读取的用户列表,多个用户用空格隔开
1 | [Data1] |
force create mode
:通过smb创建的文件的默认权限
1 | [Data2] |
writable
控制是否可写入guest ok
控制是否需要登录才能访问
samba 日志
待完善。
常见问题
无法写入,显示需要权限
查看正在写入的文件夹是否有当前设置的用户的写入权限,必要时可使用chown
命令重置一下访问权限。
Failed to add entry for user test.
检查对应的本地账户是否存在。
参考资料
排名不分先后