index.html

Linux搭建Samba共享NTFS目录

Word count: 1kReading time: 4 min
2018/06/12 Share

原本NAS/HTPC装的是Windows系统,因为既不是Windows Server,也不是LTSB版本,所以一天到晚各种“幸福倒计时”十分让人头痛。此外,这台机子上还用VMWare跑了OpenWrt作主力网关,必须要24×7运行,所以近期抛弃了智障Windows重装为Linux。

本文记录在Debian 9.4上挂载NTFS磁盘并为其配置SMB共享的过程,供日后参考。

准备待共享目录

本例中共3个NTFS分区待共享,分别为/dev/sdb1 /dev/sdc1 /dev/sdd1
实现NTFS分区读写须安装ntfs-3g

为实现开机自动挂载,建立挂载点/media/EXT_HDD,编辑/etc/fstab,添加以下行:

1
2
3
LABEL=DATA\04001    /media/EXT_HDD/DATA_01    ntfs-3g    rw,noexec,users,uid=1000,gid=1000,dmask=022,fmask=133,nofail,windows_names    0    2
LABEL=DATA\04002 /media/EXT_HDD/DATA_02 ntfs-3g rw,noexec,users,uid=1000,gid=1000,dmask=022,fmask=133,nofail,windows_names 0 2
LABEL=DATA\04003 /media/EXT_HDD/DATA_03 ntfs-3g rw,noexec,users,uid=1000,gid=1000,dmask=022,fmask=133,nofail,windows_names 0 2

本例中使用LABEL依卷标挂载分区,若卷标或挂载目录的名称中含有空格,可使用\040代替。

参数说明:

  • rw 将分区挂载为读写
  • noexec 禁止分区中文件被执行
  • users 允许users组员挂载
  • uid/gid 将挂载后目录的所有者设置为指定用户,1000为默认的用户。如需挂载为nobody:nobody,则uid和gid为65534。
  • dmask 设置挂载目录的文件夹权限,数值为补码形式,022等效于755
  • fmask 设置挂载目录的文件权限,数值为补码形式,133等效于644
  • nofail 若分区不存在,则不会在开机时报错(对可移动磁盘此选项十分重要)
  • permissions 此参数允许用户chown更改挂载目录所有权
  • windows_names 此参数为ntfs-3g额外功能,它将禁止不符合Windows命名规范的文件(夹)在挂载目录中建立

更多参数及详细解释请询问神奇海螺man ntfs-3g

Note:如果在开机时NTFS分区不能自动挂载为读写(要手动执行mount -o remount,rw),可能为Windows休眠/快速启动干扰,须先在Windows系统下执行powercfg /h off

安装与配置Samba

安装

Debian系直接通过sudo apt install samba安装。

建立SMB用户

新建不可登录的用户SMB_ROSMB_RW,隶属于用户组smb

1
2
3
groupadd smb
useradd -s /sbin/nologin SMB_RO -g smb
useradd -s /sbin/nologin SMB_RW -g smb

编辑配置文件

用文本编辑器打开/etc/samba/smb.conf

[global]标签下为全局设置;[homes]标签下为用户默认home目录配置,登陆后该目录会自动显示为用户名,如smb_rw,之后的[]标签为用户自定义共享。
文件支持同时使用# ;注释。

官方文档:Samba Documentation - Samba.org
配置案例:鸟哥的Linux私房菜 第十六章、文件服务器之二:SAMBA 服务器

本例使用的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[global]
workgroup = WORKGROUP
dns proxy = no
netbios name = SMB-Server
server string = SMB Service on NAS/HTPC
winbind use default domain = no
name resolve order = lmhosts bcast host
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
server role = standalone server
passdb backend = tdbsam
obey pam restrictios = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
map to guest = bad user
hide files = /$*/System Volume Information/Desktop.ini/Thumbs.db/
hide special files = yes
hide dot files = no

[EXT_HDD]
comment = The Great Database of Humankind
path = /media/EXT_HDD
guest ok = no
read list = SMB_RO
write list = SMB_RW
browsable = yes
force user = owner_of_dir

[H]
comment = hentai manga, anime, illustration, and videos
path = /media/EXT_HDD/DATA_01/File/NSFW
guest ok = no
read list = SMB_RO
write list = SMB_RW
browsable = yes
force user = owner_of_dir

因挂载硬盘时,用户uid/gid设置为1000,smb组没有读写权限,所以添加force user选项,不论登陆的用户身份,都使用指定用户进行文件操作。

Note:smb.conf中有许多条目意思相同,如guest ok = nopublic = no,若它们同时出现,以后者为准。

编辑完成后重启SMB服务生效
sudo systemctl restart smbd


EOF

CATALOG
  1. 1. 准备待共享目录
  2. 2. 安装与配置Samba
    1. 2.1. 安装
    2. 2.2. 建立SMB用户
    3. 2.3. 编辑配置文件