基于 Samba 服务实现远程文件共享
本文参考刘遄老师的 Linux 就该这么学撰写.
Samba 服务
FTP 是一种跨平台的文件传输解决方案, 还有一种解决方案是通过 Samba 服务来实现跨平台的文件共享.
SMB (Server Message Block) 协议是微软公司和英特尔公司共同制定的协议, 可以完成局域网内文件或打印机等资源的共享. Tridgwell 为了解决 Linux 系统的文件共享, 基于 SMB 协议开发了 SMBServer 服务程序, 起名为 Samba, 是一种舞蹈的名字.
安装 Samba 服务
yum install samba
配置 Samba 服务
Samba 的主配置文件位于 /etc/samba/smb.conf
中. 详细的配置文件的介绍帮助可以使用 man 5 smb.conf
来查看. 完整的 Samba 配置参数非常多, 完整的帮助文档的下载地址, 我们不一定能够都用到, 我们可能只会用到其中的一部分.
Iptables 配置
SMB 协议需要使用到 139 和 445 端口, 我们需要把这两个端口打开:
iptables -I INPUT -p tcp -dport 139 -j ACCEPT
iptables -I INPUT -p tcp -dport 445 -j ACCEPT
service iptables save
SELinux 配置
在配置之前, 我们需要先进行 SELinux 的配置:
# 允许 Samba 服务使用 useradd 和 groupadd
setsebool -P samba_domain_controller on
# 如果想要分享 home 目录, 需要开启 samba_enable_home_dirs
setsebool -P samba_enable_home_dirs on
# 如果你新建了一个目录, 你需要将其安全上下文设置为 samba_share_t, 不要对系统目录做这个操作, 因为系统目录已经有了这个上下文
# 使用 Boolean 值 samba_export_all_ro 或 samba_export_all_rw 来共享系统目录.
# 只读
setsebool -P samba_export_all_ro on
# 可写
setsebool -P samba_export_all_rw on
配置文件结构
配置文件是分块的, 每一块以一个中括号包裹的唯一标识符来确定, 默认配置文件包括 [global]
, [homes]
以及 [printers]
.
global 配置
网络相关
# Windows 的域名称或者工作组名称
# workgroup = MYGROUP
# 描述字段
server string= Samba Server Version %v
# 指定一个绑定到主机的服务器名称
# netbios name = MYSERVER
# 用于指定 Samba 去监听哪个网卡, 注意不要忘记写 localhost interface(lo)
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
日志选项
log file = /var/log/samba/log.%m
# max size of the log file, 50KB
max log size = 50
安全选项
这一部分可能配置选项很多的, Samba 的配置文档可以写一本书来详细说明, 这里只介绍我所了解的常用的配置方法.
# Samba 的安全模式, share 和 server 在文档中说明不再使用, 现在使用 user
security = user
# 存储用户信息的方式, 现在使用的主要有 tdbsam 和 ldapsam 两种.
passdb backend = tdbsam
共享文件夹
接下来我们创建一个共享文件夹的配置区域, 这一部分的参数都很好理解.
[myshare]
comment = My share
# 共享文件夹的路径
path = /shared_folder
# 非公开
pubic = no
# 可写入
writable = yes
创建用户
首先我们要创建一个系统用户, 用于持有 Samba 的文件.
useradd smbuser
然后使用 pdbedit
命令来设定 Samba 账户
[root@localhost /]# pdbedit -a -u smbuser
new password:
retype new password:
Unix username: smbuser
NT username:
Account Flags: [U ]
User SID: S-1-5-21-2183877677-2742592103-2159681561-1000
Primary Group SID: S-1-5-21-2183877677-2742592103-2159681561-513
Full Name:
Home Directory: \\localhost\smbuser
HomeDir Drive:
Logon Script:
Profile Path: \\localhost\smbuser\profile
Domain: LOCALHOST
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Wed, 06 Feb 2036 10:06:39 EST
Kickoff time: Wed, 06 Feb 2036 10:06:39 EST
Password last set: Sat, 27 Oct 2018 08:50:26 EDT
Password can change: Sat, 27 Oct 2018 08:50:26 EDT
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
修改目录权限
刚才创建的共享目录是属于 root 的, 所以挂载之后是没有权限写的:
[root@localhost /]# ls -ld shared_folder/
drwxr-xr-x. 2 root root 6 Oct 27 08:47 shared_folder/
我们需要修改其所属:
chown -R smbuser:smbuser /shared_folder
修改 SELinux 设置:
semanage -a -t samba_share_t /shared_folder
restorecon -Rv /shared_folder
重启 Samba 服务
systemctl restart smb
systemctl enable smb
测试 Samba 服务
以下是基于 MAC 系统进行测试:
打开 Finder, 快捷键 cmd+k
, 打开连接服务器窗口, 按照下面的形式输入服务器地址.
点击连接之后, 会跳出登录界面:
image-20181027222922766输入正确的用户名和密码, 就可以登录到服务器中了.
登陆后, 可以测试一下能否修改文件, 上传文件等操作, 以检测权限是否配置正确, 如果发现不能, 可以检查 SELinux 设置和文件目录权限配置.
总结
到此, SMB 服务的简单配置就完成了, SMB 是一个非常方便的文件共享服务, 可以轻松的部署在局域网中, 非常的方便.
网友评论