在Linux中配置Samba服务器实现网盘
文章目录
- 在Linux中配置Samba服务器实现网盘
- 1 安装与基本配置
- 2 在Windows中使用共享文件夹
- 3 高级配置
- 3.1 `smb.cfg`文件详解
- 3.2 多用户/多用户组
- 3.3 典型场景
- 附录:Linux用户管理
samba服务器:CentOS 7,samba 4.10.16;Windows客户机:Windows10 20H2
1 安装与基本配置
- 打开一个终端,输入
su
进入超级用户。 - 安装samba:
$ yum install samba samba-client
- 修改防火墙配置,开放samba所需网络端口:
$ firewall-cmd --zone=public --add-port=139/tcp --permanent
$ firewall-cmd --zone=public --add-port=445/tcp --permanent
$ firewall-cmd --zone=public --add-port=137/udp --permanent
$ firewall-cmd --zone=public --add-port=138/udp --permanent
$ firewall-cmd --reload
$ systemctl restart firewalld.service
- 当然也可以直接关闭防火墙,一了百了:
$ systemctl stop firewalld # 临时关闭
$ systemctl disable firewalld # 禁用开机启动防火墙,即永久禁用
- 关闭selinux:
selinux经常会捣乱,不关闭可能会导致在其他电脑上无法访问共享文件夹。
$ gedit /etc/sysconfig/selinux
- 将
SELINUX=enforcing
改为SELINUX=disabled
$ setenforce 0 #关闭selinux
- 添加samba用户
该用户可以是Linux中已有的任何用户,如果想创建新用户,则可以使用useradd
命令:
$ useradd samba_user
- 有关更多用户管理内容见附录:Linux用户管理。
将Linux用户samba_user设置为samba用户:
$ smbpasswd -a samba
- 终端会提示你输入密码。
有关一些细节、坑及多用户配置见3.2 多用户/多用户组。 - 创建一个共享文件夹:
cd /
mkdir share
chmod 777 share
- 修改smb.cfg文件
$ gedit /etc/samba/smb.cfg
- 在文件末尾添加:
[share_test] # [ ]中是你希望其他用户看到的共享文件夹名称
comment = samba file share test # 注释说明
path = /share # 指定共享文件夹路径
available = yes
public = yes # 所有帐号都能看到该文件夹
writable = yes # 可写
valid users = samba_user # 对应刚才创建的用户,只有samba_user可以访问
create mask = 755 # 在共享文件夹中创建的文件都带有755权限
directory mask = 755 # 在共享文件夹中创建的目录都带有755权限
guest ok = no
- 如果
smb.cfg
文件中包含有[homes]
,则直接将那一段用#
注释掉,否则其他地方将会看到服务器的根目录,不安全。 - 启动samba服务
测试smb.cfg
中的参数是否合规:
$ testparm
- 如果参数合归终端会提示:
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
- 开启服务:
$ systemctl start smb.service
- 之后如果再次修改了
smb.cfg
,则可以使用重启命令:
$ systemctl restart smb.service
- [可选] 设置静态IP
centos的IP经常在改变,给windows/mac端连接带了诸多的不便。解决方案便是将centos的IP设置为静态IP。
CentOS参考:。
Ubuntu参考:。
2 在Windows中使用共享文件夹
在Windows中按下Win+R
,输入\\samba所在linux系统的IP地址
,回车即可看到共享文件夹。
系统会提示输入用户名和密码,对应samba中创建的用户。
第一次登录成功后,Windows会记住你使用的账号,往后无法更改。如果你想切换samba账号,可以通过以下两种方式清除Windows的记录:
- 打开Windows终端,输入
net use
,你会看到已经连接的共享文件夹。
记下共享文件夹的地址,这里用<地址>
代替。
输入net use <地址> /del /y
,即可清除某个共享文件夹的samba账号记录。 - 在桌面左下角的“开始”按钮处右键选择“计算机管理”,在“服务”中找到“Workstation”,右键重新启动即可。
- 还可以使用Windows的
映射网络驱动器
,将samba共享文件夹当作“网盘”使用:
- 打开“此电脑”,在功能区点击“映射网络驱动器”。(点击右上角问号左边的小三角可以展开功能区)。
- 输入服务器共享文件夹的路径,例如\192.168.125.135\share,用户名和密码就是
smb.cfg
中指定的用户名和相应的密码。- 登录成功后便可以看到网盘内的文件。
此时还可以在资源管理器的“此电脑”页面内位于“网络位置”标签的网盘,使用起来和本地磁盘完全一致。只要服务器不断电且相关配置不更改,自己的电脑重启后依然可以在资源管理器中看到网盘。
3 高级配置
3.1 smb.cfg
文件详解
本节主要介绍共享文件夹的相关配置,指令与参数用法为:
[分享的资源名称]
<指令1>; = (参数)
<指令2>; = (参数)
要提供分享资源时,须先把欲分享的资源以 [ ] 符号括住,底下通常会带指令和参数来表示此资源的设定和存取权限等,详情如下:
指令 | 参数 | 描述 |
comment | 自定义 | 注释说明 |
path | 目录 | 分享资源的完整路径名称,除了路径要正确外,目录的权限也要设对 |
browseable | yes/no | 是否在浏览资源中显示共享目录,若为否则必须指定共享路径才能存取 |
printable | yes/no | 是否允许打印 |
hide dot ftles | yes/no | 是否隐藏文件 |
public | yes/no | 是否公开共享,若为否则进行身份验证(只有当security = share 时此项才起作用) |
guest ok | yes/no | 是否公开共享,若为否则进行身份验证(只有当security = share 时此项才起作用) |
read only | yes/no | 是否以只读方式共享,当与writable发生冲突时也writable为准 |
writable | yes/no | 是否可写,当与read only发生冲突时,无视read only |
vaild users | 用户名(多个用户之间用 或者@用户组名 | 设定只有此名单内的用户才能访问共享资源(拒绝优先)(用户名/@组名) |
invalid users | 同上 | 设定只有此名单内的用户不能访问共享资源(拒绝优先)(用户名/@组名) |
read list | 同上 | 设定此名单内的成员为只读(用户名/@组名) |
write list | 同上 | 若设定为只读时,则只有此设定的名单内的成员才可作写入动作(用户名/@组名) |
create mask | 777/755等 | 建立文件时所给的权限 |
directory mask | 同上 | 建立目录时所给的权限 |
force group | 用户名(多个用户之间用 或者@用户组名 | 指定存取资源时须以此设定的群组使用者进入才能存取(用户名/@组名) |
force user | 用户名(多个用户之间用 或者@用户组名 | 指定存取资源时须以此设定的使用者进入才能存取(用户名/@组名) |
allow hosts | IP地址 | 设定只有此网段/IP的用户才能访问共享资源 |
deny hosts | IP地址 | 设定只有此网段/IP的用户不能访问共享资源 |
allow hosts | IP地址 | 本网段指定IP指定IP |
其余可参考Linux Samba服务主配文件smb.conf中文详解。
3.2 多用户/多用户组
如果我们想让共享文件夹不能被每个人都访问,而只允许一部分用户访问,便可以通过配置smb.cfg
的valid users
等属性实现。
例如,我们现在想让刚才的share
文件夹只被用户zhangsan,lisi及baidu,alibaba用户组下所有的用户访问,则可以这样配置smb.cfg
文件:
[multiple_users]
comment = multiple users test
path = /share # 指定共享文件夹路径
available = yes
public = no
writable = yes
valid users = zhangsan,lisi,@baidu,@alibaba
create mask = 0777
directory mask = 0777
注意:Linux多用户机制中每个用户都有自己的家目录,家目录中的文件都是私有的,例如用户zhangsan无法访问/home/lisi/中的文件,同样用户lisi无法访问/home/zhangsan/中的文件。
这就提醒我们在配置多用户的文件共享时,最好不要使用某个用户home
目录下的文件夹作为共享文件夹。否则,即使在smb.cfg
文件中授予了用户某个文件夹的访问权限,在客户机使用该用户时依然无法访问此共享文件夹。
- 例如
smb.cfg
文件中配置了/home/simon/public_share
作为共享文件夹,并且valid users
中设置了simon,zhangsan,lisi等用户,Windows中使用simon可以正常访问,但如果使用zhangsan访问共享文件夹时就会提示:你没有权限访问......(IP地址)。请与网络管理员联系请求访问权限
。
3.3 典型场景
- 只有用户x1,y1,z2以及用户组x可以访问某文件夹,但只有用户组x能够写该文件夹:
[scene1]
comment = scene1
path = /share/scene1
public = no
valid users = x1,y1,z2,@x
write list = @x
- 只有用户x1,y1,z1以及用户组y可以访问某文件夹,且只有用户组b可以写该文件夹:
[scene2]
comment = scene2
path = /share/scene2
public = no
valid users = x1,y1,z1
write list = @y
- 所有帐号都能看到文件夹,但只能读:
[scene3]
comment = scene3
path = /share/scene3
public = yes
read only = yes
- 所有帐号都能看到文件夹,且可以编辑或删除对方建立的文件:
[scene4]
comment = scene4
path = /share/scene4
public = yes
writable = yes
附录:Linux用户管理
- 用户管理
sudo useradd x1
- 添加用户x1到用户组x:
sudo usermod -g x x1
- 修改用户x1密码:
sudo passwd x1
- 删除用户:
sudo userdel -r x1 # -r代表删除用户的同时删除该用户的家目录以及其他与该用户相关的文件
- 用户组管理
添加用户组:
sudo groupadd x
- 修改用户组名称:
groupmod -n fighting flying #将flying组改名为fighting
- 用户组添加用户(如果不加-a会使你离开其他用户组,仅仅做为 这个用户组 groupA 的成员):
usermod -a -G groupA user
- 用户组删除用户,将用户testuser从root组中删除:
sudo gpasswd -d testuser root
- 在Linux中也可以直接编辑
/etc/group
文件来手动管理用户组。关于/etc/group
文件的介绍见Linux /etc/group文件解析(超详细)。