默认情况下,samba客户端能够访问得空间大小是挂载点可用的空间大小。可以使用可扩充的qcow2虚拟硬盘进行空间限制,以及便于单个用户的用户文件迁移。

测试环境为debian10,如果没有安装samba,可通过以下命令安装。

sudo apt-get update && sudo apt-get install samba

之后添加samba用户,并设置用户的访问密码。

smbpasswd -a 用户名

然后编辑/etc/samba/smb.conf文件,添加用户的共享配置。其中,[share]为smb协议的访问路径,之后可通过\IP\share进行访问,也可以将访问名share修改为其他名字。

[share]
path = /mnt/share #共享路径
read only = no #非只读
writable = yes #可写
public = no #非公开分享
browseable = yes #共享名可以直接被看到
valid users = 用户名 #允许的用户

之后需要给挂载点授予访问权限(可以使用chown修改目录的所有者,或chmod添加写入权限,此处以chmod为例),若无需限制用户空间,则直接运行第二条命令以重启服务即可访问了。

sudo mod ugo+w /mnt/share
sudo service smbd restart

接下来创建虚拟硬盘以用作挂载点,让用户的文件直接写入到虚拟硬盘中。此处使用空间不立即分配的qcow2格式,避免一次性占用较大的储存空间。如果安装过qemu,则可省略软件包qemu-utils的安装,否则使用以下命令安装该软件包:

sudo apt-get install qemu-utils

这样,就可以使用qemu-img创建qcow2格式的虚拟硬盘了。此处以储存在根目录的/share.qcow2为例,容量为20G。(注意文件储存权限)

qemu-img create -f qcow2 /share.qcow2 20G

之后在挂载之前,需要启用内核的网络设备块(nbd)功能。该命令在开机后只需运行一次以加载模块即可。max_part为可管理的最大分区数,通常情况下设置为8已经足够使用。

sudo modprobe nbd max_part=8

然后就可以以网络设备块的形式挂载虚拟硬盘:

sudo qemu-nbd --connect=/dev/nbd0 /share.qcow2

这样,这块虚拟硬盘就被连接到/dev/nbd0中。此时,硬盘还没有分区,也没有文件系统。如果无需对硬盘分区,则可以直接对该虚拟硬盘进行格式化,以下以ext4为例:

sudo mkfs.ext4 /dev/nbd0

之后就可以将其挂载到share目录了:

sudo mount /dev/nbd0 /mnt/share

如果需要卸载该虚拟硬盘,除非重启,则需要先卸载目录,再取消硬盘的连接:

sudo umount /dev/nbd0
sudo qemu-nbd --disconnect /dev/nbd0

如果需要对硬盘分区,则可使用fdisk或者parted像普通硬盘一样对其分区,然后重新连接虚拟硬盘:

sudo qemu-nbd --disconnect /dev/nbd0
sudo qemu-nbd --connect=/dev/nbd0 /share.qcow2

重新连接后,各个分区会以p1、p2、p3的顺序依次排列在/dev/nbd0后,以分区1为例,使用ext4对其格式化并挂载:

sudo mkfs.ext4 /dev/nbd0p1
sudo mount /dev/nbd0p1 /mnt/share

同样,断开虚拟硬盘时,需要先卸载该挂载的分区。

sudo umount /dev/nbd0p1
sudo qemu-nbd --disconnect /dev/nbd0

分区挂载后,启用smbd,就可以使用户的分享路径限制在虚拟硬盘内了。注意,卸载挂载点时,如果smbd仍在运行,会导致卸载失败,需要先用service停用smbd,再进行卸载。

标签: Debian

添加新评论