使用案例
我是唯一的用户。我有一个具有全盘加密功能的 ubuntu NAS,我正在尝试将我自己的 Windows 计算机备份到该设备上。我想要一个可以启动的 USB 记忆棒,以便将 Windows 驱动器克隆到 NAS,但我不希望任何可能遇到带有共享凭据的 USB 记忆棒的人都可以读取整个备份共享。你能想出更好的解决方案吗?
我所想的可行
我一直在搜索,但找不到我需要的东西,我发现的所有内容都是关于简单地启用对共享的写访问权限,这不是我想要做的。
我想在我的 ubuntu 机器上创建一个 samba 共享,用户可以在其中仅有的写权限。我希望他们能够创建文件,但不能读取它们,也不能列出共享内的文件夹。
这是为了备份的目的。我想要一个可启动的 USB 驱动器,我可以从中启动该驱动器,将获取该计算机中驱动器的磁盘映像并将其保存到 samba 共享,但我不希望该 USB 能够访问所有映像。
如果文件已存在则失败,我很高兴,我将通过使用驱动器 UUID/时间来确保文件名不会冲突。
答案1
我做过类似的事情,唯一的区别是一个用户只能写而不读(甚至列出目录),另一个用户只能读。
/etc/samba/smb.conf
[write-only]
comment = Write-only access without read
path = /smbshare
hosts allow = 172.17.10.10
hosts deny = 0.0.0.0/0
read only = no
write list = smbwrite
force user = smbwrite
force group = smbread
create mask = 0350
directory mask = 0350
force create mode = 0350
force directory mode = 0350
服务器端初始访问权限:
chmod -R 350 /smbshare
chown -R smbwrite:smbread /smbshare
唯一的缺点是,如果您知道确切的文件名,则可以列出它。
以下部分供参考:
[read-only]
comment = Read-only access
path = /smbshare
read only = yes
hosts allow = 172.17.10.20
hosts deny = 0.0.0.0/0
read list = @smbread
/etc/fstab
两个客户端上的条目:
smbwrite (172.17.10.10),本地用户“foo”:
//172.17.10.1/write-only /mnt/write cifs user=smbwrite,pass=s3kr1t,uid=foo,vers=3.0 0 0
smbread (172.17.10.20),本地用户“bar”:
//172.17.10.1/read-only /mnt/read cifs user=smbread,pass=s3kr1t,uid=bar,vers=3.0 0 0
答案2
挂载点仅支持禁用写入(只读),但不支持禁用读取。但是,您可以使用文件权限来完成大部分操作。无法阻止用户读取自己的文件,但您可以阻止她读取其他人的文件。
你会需要:
- 粘滞位,阻止用户删除彼此的文件。
- 关闭目录的读取位以阻止其他人读取
- 设置默认权限,关闭文件的读取位以阻止其他人读取它们。
如何
chmod +t "«the directory»"
setfacl -m "u::wx,g::wx,o:-" "«the directory»"
setfacl -m "d:u::-,d:g::-,d:o:-" "«the directory»"
警告
这不会被用户轻易使用,请考虑给予一些额外的权限。或者每个用户一个目录。
我也不认为这是进行备份的方法。设置一个 cron 作业每天进行备份。您可能正在使用备份进行版本控制,请考虑使用版本控制系统。子版本 (svn) 对于必须用户和大多数文件类型来说是一个很好的版本。 Mercurial 对于程序员来说也有好处,并且可以用于其他文件类型,但我不建议将其用于任何不可合并的文件(例如 MS-Office)。