本文记录于 2021 年,操作基于当时的 Manjaro 环境,具体细节可能随版本变化。
今年双十一,剁手买了不少东西,其中就包括了一块 2T 的西数蓝盘,由此开始了我的折腾之旅。
先介绍一下我的需求。我是一名大学生,平时出门主要还是带着一台 Windows 笔记本,所以硬盘文件系统优先考虑 NTFS,寒暑假估计会直接带着硬盘回家。对 SMB 服务我有三种需求:
- 自己使用,对整块硬盘有完整的权限
- 给舍友用,提供一些资料的下载,只读权限
- 给舍友用,提供下载与上传,读写权限均有
整理完需求,我们直接开干!
先前准备
下载相关软件:
sudo yay -S samba
貌似现在 Manjaro 都自带这个软件了,有的话也就不用下载了。
编写配置文件
配置文件其实并不是很难写,这里就贴一下我的配置文件好了。
# /etc/samba/smb.conf
# 全局配置
[global]
# 工作组
workgroup = WORKGROUP
# 这个貌似是服务器的介绍字符串
server string = C5-315 SMB Server
# 这个名称将会显示在我们的本地网络当中
netbios name = SMB Server
# 匿名访问需要这个
map to guest = bad user
# 设定匿名账户在本地的映射,在 manjaro 上 nobody 本身就存在,照写就好了
guest account = nobody
# 日志文件位置,这个不多说,如果后面服务出问题请尽早在这里找找
log file = /var/log/samba/%m.log
# 日志文件的大小,单位是 kb,设置为 0 就是不限制了
max log size = 0
# 这个安全模式不多介绍,顺便一提,网上很多文章所提到的 share 模式已经弃用了
security = user
# 不太记得这行当时为什么写的了
encrypt passwords = yes
# 关闭 dns 代理
dns proxy = no
# 这里是我的需求 1,要完全访问磁盘
# 这是共享文件夹名称
[kaoru-disk]
# 共享文件夹的简介字符串,在 windows 会鼠标悬浮时显示
comment = 管理员目录
# 这是服务器本机实际的具体路径,在这里就是我磁盘挂载的实际位置,这里有坑,后面谈
path = /run/media/kaoru/kaoru-disk/
# browseable 表示是否显示在共享文件中,与可访问性无关
browseable = yes
# 这里我把自己设置为管理员,kaoru 是我的本地账户
# SMB 服务账户和 Linux 本地账户是绑定的,但是密码可以是不一样的
admin users = kaoru
# 这里设置可写属性
writeable = yes
# 这里开始是我的需求 2
# 重复的属性就不一一介绍了
[book]
comment = 电子书目录
path = /run/media/kaoru/kaoru-disk/book/
public = yes
guest ok = yes
browseable = yes
writeable = no
[movie]
comment = 影片目录
path = /run/media/kaoru/kaoru-disk/movie/
public = yes
guest ok = yes
browseable = yes
writeable = no
[iso]
comment = 系统镜像目录
path = /run/media/kaoru/kaoru-disk/iso/
public = yes
guest ok = yes
browseable = yes
writeable = no
[software]
comment = 软件目录
path = /run/media/kaoru/kaoru-disk/software/
public = yes
guest ok = yes
browseable = yes
writeable = no
# 这里开始是我的第三点需求
[shared]
comment = 公用目录(可匿名上传与下载)
path = /run/media/kaoru/kaoru-disk/shared/
public = yes
guest ok = yes
browseable = yes
# 变化在这,不仅可以匿名访问,还可以匿名上传文件了
writeable = yes
写完配置文件,我们可以使用 samba 套件里的 testparm 来测试文件的正确性:
testparm /etc/samba/smb.conf
添加用户
我的第一点需求是只有我本人才有完整的权限,所以我们来新建一个 SMB 账户:
sudo smbpasswd -a kaoru
接下来就是要你输入密码什么的吧啦吧啦。注意在这里添加的用户首先是要在你的系统中存在的用户,上述代码中的 kaoru 就是我本人的账号。
保险起见,我们设置一下启用账户:
sudo smbpasswd -e kaoru
到这就基本完成添加用户部分了,下面讲一个坑。
文件权限
我先把挂载磁盘的根目录拿下来:
/run/media/kaoru/kaoru-disk/
在 /run/media/${username} 这个目录下,对于其他用户来说通常是没有权限的。没有权限在 SMB 连目录都打不开,而且应该会报 NT_STATUS_ACCESS_DENIED listing \* 这个错。
明白了原因,问题就很简单了,我们直接改一下目录权限即可:
sudo chmod 755 /run/media/kaoru
OK,到这里就全部完成了,可以直接在 Windows 下挂载远程磁盘咯。
最后
如果有不清楚的地方,欢迎交流。
更新于 11.16 日
经过我观察发现,现在仍然存在两个问题:
- 开机后从 SDDM 界面登录后才能连接网络,这里我使用的是无线的接入方式。
- 开机后不会自动挂载磁盘,并且磁盘挂载目录依旧没有足够的权限。
下面说说我的解决方式。
开机(未登录)不会自动接入网络
这个其实比较好解决,原因是 Manjaro 默认分用户对网络密码进行了加密。
打开 设置 -> 网络 -> 连接 -> 选择你所连接的网络 ->(常规设置)勾选“所有用户可以连接到此网络” ->(Wi-Fi 安全)为所有用户保存密码(不加密)。
重启,开机但不登录,能 ping 通,搞定!
开机自动挂载磁盘,以及权限问题
首先接入磁盘,查询磁盘的 UUID 并复制下来。有两种方法。
第一种是图形化:用 KDE 自带的 KDE 分区管理器查看,选中磁盘,选择对应分区右键属性,其中的 UUID 就是我们要找的了。记得是 UUID 不是分区 UUID。
第二种方法比较简单:
ls -l /dev/disk/by-uuid
即可显示所有磁盘的 UUID。我的输出如下:
$ ls -l /dev/disk/by-uuid
总用量 0
lrwxrwxrwx 1 root root 10 11月 16 11:21 3088-EABB -> ../../sda1
lrwxrwxrwx 1 root root 10 11月 16 11:21 4A96EE3696EE2265 -> ../../sdb2
lrwxrwxrwx 1 root root 10 11月 16 11:21 f0396684-cc97-48c5-afcc-8860dbb5c366 -> ../../sda2
其中 4A96EE3696EE2265 就是我所需的 UUID。
获取到 UUID,接下来就是修改配置文件了:
我原始的文件大概长这样:
# /etc/fstab: static file system information.
# Use 'blkid' to print the universally unique identifier for a device; this may
# be used with UUID= as a more robust way to name devices that works even if
# disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=3088-EABB /boot/efi vfat umask=0077 0 2
UUID=f0396684-cc97-48c5-afcc-8860dbb5c366 / ext4 defaults,noatime 0 1
tmpfs /tmp tmpfs
修改一下,添加一行:
UUID=4A96EE3696EE2265 /mnt/kaoru-disk ntfs defaults 0 0
最后一行的 UUID 要填上面我们查询到的,/mnt/kaoru-disk 这个目录需要提前创建好,ntfs 是欲挂载磁盘的文件系统类型,具体使用什么文件系统就填啥。最后保存一下文件,轻松搞定。
/mnt/kaoru-disk 这个目录是自己创建的,可以改一下权限,权限 755 就好。之前使用的 Manjaro 自动挂载的目录在 /run/media/${user_name}/${disk_name},这个目录每次都会重新创建,权限也不对应。上面改为手动挂载,挂载到的文件夹权限也是由我们自己控制,这样一来权限问题也就解决了。
设置完磁盘挂载,修改一下 samba 配置文件,把共享目录的 path 属性重新设置一下,又可以愉快地玩耍了。
相关阅读
- Arch 英特尔核显关闭垂直同步 —— 另一篇 Linux 折腾记录
- 看看全部技术笔记
- Shiina Labs 开源项目
