在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 安装与基本配置

  1. 打开一个终端,输入su进入超级用户。
  2. 安装samba:
$ yum install samba samba-client
  1. 修改防火墙配置,开放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
  1. 当然也可以直接关闭防火墙,一了百了:
$ systemctl stop firewalld # 临时关闭
$ systemctl disable firewalld # 禁用开机启动防火墙,即永久禁用
  1. 关闭selinux:
    selinux经常会捣乱,不关闭可能会导致在其他电脑上无法访问共享文件夹。
$ gedit /etc/sysconfig/selinux
  1. SELINUX=enforcing改为SELINUX=disabled
$ setenforce 0 #关闭selinux
  1. 添加samba用户
    该用户可以是Linux中已有的任何用户,如果想创建新用户,则可以使用useradd命令:
$ useradd samba_user
  1. 有关更多用户管理内容见附录:Linux用户管理
    将Linux用户samba_user设置为samba用户:
$ smbpasswd -a samba
  1. 终端会提示你输入密码。
    有关一些细节、坑及多用户配置见3.2 多用户/多用户组
  2. 创建一个共享文件夹:
cd /
mkdir share
chmod 777 share
  1. 修改smb.cfg文件
$ gedit /etc/samba/smb.cfg
  1. 在文件末尾添加:
[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
  1. 如果smb.cfg文件中包含有[homes],则直接将那一段用#注释掉,否则其他地方将会看到服务器的根目录,不安全。
  2. 启动samba服务
    测试smb.cfg中的参数是否合规:
$ testparm
  1. 如果参数合归终端会提示:
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions
  1. 开启服务:
$ systemctl start smb.service
  1. 之后如果再次修改了smb.cfg,则可以使用重启命令:
$ systemctl restart smb.service
  1. [可选] 设置静态IP
    centos的IP经常在改变,给windows/mac端连接带了诸多的不便。解决方案便是将centos的IP设置为静态IP。
    CentOS参考:。
    Ubuntu参考:。

2 在Windows中使用共享文件夹

在Windows中按下Win+R,输入\\samba所在linux系统的IP地址,回车即可看到共享文件夹。

samba带端口 samba 指定端口_samba带端口


系统会提示输入用户名和密码,对应samba中创建的用户。

第一次登录成功后,Windows会记住你使用的账号,往后无法更改。如果你想切换samba账号,可以通过以下两种方式清除Windows的记录:

  1. 打开Windows终端,输入net use,你会看到已经连接的共享文件夹。
    记下共享文件夹的地址,这里用<地址>代替。
    输入net use <地址> /del /y,即可清除某个共享文件夹的samba账号记录。
  2. 在桌面左下角的“开始”按钮处右键选择“计算机管理”,在“服务”中找到“Workstation”,右键重新启动即可。
  • 还可以使用Windows的映射网络驱动器,将samba共享文件夹当作“网盘”使用:
  1. 打开“此电脑”,在功能区点击“映射网络驱动器”。(点击右上角问号左边的小三角可以展开功能区)。
  2. samba带端口 samba 指定端口_共享文件夹_02

  3. 输入服务器共享文件夹的路径,例如\192.168.125.135\share,用户名和密码就是smb.cfg中指定的用户名和相应的密码。
  4. 登录成功后便可以看到网盘内的文件。
    此时还可以在资源管理器的“此电脑”页面内位于“网络位置”标签的网盘,使用起来和本地磁盘完全一致。只要服务器不断电且相关配置不更改,自己的电脑重启后依然可以在资源管理器中看到网盘。

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.cfgvalid 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 典型场景

  1. 只有用户x1,y1,z2以及用户组x可以访问某文件夹,但只有用户组x能够写该文件夹:
[scene1]
	comment = scene1 
	path = /share/scene1
	public = no
	valid users = x1,y1,z2,@x
	write list = @x
  1. 只有用户x1,y1,z1以及用户组y可以访问某文件夹,且只有用户组b可以写该文件夹:
[scene2]
	comment = scene2
	path = /share/scene2
	public = no
	valid users = x1,y1,z1
	write list = @y
  1. 所有帐号都能看到文件夹,但只能读:
[scene3]
	comment = scene3
	path = /share/scene3
	public = yes
	read only = yes
  1. 所有帐号都能看到文件夹,且可以编辑或删除对方建立的文件:
[scene4]
	comment = scene4
	path = /share/scene4
	public = yes
	writable = yes

附录:Linux用户管理

  1. 用户管理
sudo useradd x1
  1. 添加用户x1到用户组x:
sudo usermod -g x x1
  1. 修改用户x1密码:
sudo passwd x1
  1. 删除用户:
sudo userdel -r x1 # -r代表删除用户的同时删除该用户的家目录以及其他与该用户相关的文件
  1. 用户组管理
    添加用户组:
sudo groupadd x
  1. 修改用户组名称:
groupmod -n fighting flying #将flying组改名为fighting
  1. 用户组添加用户(如果不加-a会使你离开其他用户组,仅仅做为 这个用户组 groupA 的成员):
usermod -a -G groupA user
  1. 用户组删除用户,将用户testuser从root组中删除:
sudo gpasswd -d testuser root
  1. 在Linux中也可以直接编辑/etc/group文件来手动管理用户组。关于/etc/group文件的介绍见Linux /etc/group文件解析(超详细)