Armbian配置SMB服务

AI大语言模型

安装Samba:

sudo apt install samba

添加samba组和系统用户:

sudo groupadd samba
sudo useradd -M -s /sbin/nologin -g samba samba

设置用户密码并将用户添加到Samba数据库:

sudo smbpasswd -a samba

修改密码:

sudo smbpasswd samba

smbpasswd命令还有以下参数:

  • -d:禁用用户;
  • -e:启用用户;
  • -x:删除用户。

smbpasswd不会影响系统用户,如果要删除系统用户,可使用:

sudo userdel 用户名

创建共享目录并分配权限:

mkdir /home/share
chown samba:samba /home/share
chmod 2750 /home/share

如果普通用户需要读写该目录,可以将普通用户添加到samba组,并为共享目录所属组添加写权限:

sudo usermod -aG samba 用户名
chmod 2770 /home/share

特殊权限位2表示强制共享目录下文件所属组继承父目录,避免在多用户时权限混乱。

配置SMB服务

编辑配置文件:

sudo nano /etc/samba/smb.conf

示例配置内容如下:

[global]
    map to guest = never # 当用户名不存在或密码错误时,禁止映射为访客
    usershare allow guests = no # 禁止具有用户共享权限的普通用户创建公开的、不需要密码的访客共享
    usershare max shares = 0 # 限制访客共享的数量上限,设为0禁用
    netbios name = My Share # 广播中显示的名称,某些客户端可能不支持,而是显示主机名或IP
    security = user # 强制使用用户验证
    server min protocol = SMB3 # 指定最小版本,低于SMB3的客户端无法连接
    smb encrypt = required # 强制加密传输
    hosts allow = 192.168.1.0/24 # 白名单,仅允许这些IP的客户端访问
#   hosts deny = 192.168.1.x # 黑名单,禁止这些IP的客户端访问
[Share]
    comment = My Share # 共享提示语
    path = /home/share # 共享目录路径
    browseable = yes # 共享是否可被发现,如果为no,客户端需要输入完整路径才能访问
    writable = yes # 允许写权限
    valid users = samba # 客户端登录用户名
    force user = samba # 强制所有访问该共享的客户端操作,都以指定用户执行
    force group = samba # 强制所有访问该共享的客户端操作,都以指定的组执行
    create mask = 0660 # 限制客户端创建的文件的最大权限
    directory mask = 2770 # 限制客户端创建的目录的最大权限

校验配置文件,会输出不包含注释的、生效的配置项:

testparm -s

重启服务:

sudo systemctl restart nmbd smbd

如果启用了防火墙,放行445端口:

sudo ufw allow 445/tcp

查看客户端连接状态:

sudo smbstatus

Linux客户端自动挂载SMB共享

安装cifs-utils:

sudo apt install cifs-utils

创建验证文件:

sudo nano /etc/smb_credentials

验证文件中配置用于登录SMB共享的账号密码:

username=your_username
password=your_password

验证文件权限限制为只允许root用户读写:

sudo chmod 600 /etc/smb_credentials

使用id命令查看当前用户ID和所属组ID:

id

输出内容示例:

uid=1000(beizigen) gid=1000(beizigen)

编辑fstab文件配置开机自动挂载:

//192.168.1.8/Share /mnt/smb cifs credentials=/etc/smb_credentials,uid=1000,gid=1000,nosuid,nodev,_netdev,nofail,x-gvfs-show,x-gvfs-name=显示名称 0 0

挂载所有设备:

sudo mount -a

Windows系统挂载SMB共享

以Windows 11为例,在我的电脑中找到映射网络驱动器:

Windows映射网络驱动器

选择一个平常不使用的驱动,文件夹填写SMB共享地址:

Windows添加SMB网络驱动映射

AI大语言模型