linux&windowns文件共享之samba

samba

我们所了解过的 FTP 文件传输,的确可以让不同主机之间进行文件传输,此方式特点是,传输文件,用户想要在客户端直接修改服务器的数据,还是较为麻烦。

既然如此,linux 上有一款应用叫 Samba,是一个能让 linux 系统应用微软网络通讯协议的软件。即 samba是一款能够让 linux 系统应用微软文件资料的工具。

微软为了解决局域网的文件共享,制定了 SMB 协议,也就是 (Server Messages Block,服务器消息块),后来 SMB 通信协议应用了 linux 系统上,就形成了现在的 Samba 软件。

Samba 特点:

  • Samba 最大的功能就是可以用于 linux 与 windows 系统直接的文件共享和打印

  • Samba 即可以用于 windows 与 linux 之间的文件共享

  • 也可以用于 linux 与 linux 之间的资源共享

  • 由于 NFS(网络文件系统) 可以很好的完成 linux 与 linux 之间的数据共享

  • 因而 Samba 较多的用在了 linux 与 windows 之间的数据共享上面。

一、ubuntu 和windos共享用什么?

Samba 共享:Samba 是一种用于 Linux 和 Windows 之间文件共享的协议 和工具集。您可以在 Ubuntu 上安装和配置 
Samba 服务器,使其能够与 Windows 计算机共享文件和目录。


NFS 共享:NFS(Network File System)是一种用于在不同的计算机之间共享文件系统的协议。您可以在 Ubuntu 上设置
NFS 服务器,并在 Windows 上使用适当的客户端软件连接到共享的文件系统。


FTP/SFTP 服务器:您可以在 Ubuntu 上设置 FTP 或 SFTP 服务器,然后在 Windows
上使用适当的客户端软件连接到该服务器进行文件传输。


文件同步工具:您可以使用文件同步工具,例如 rsync、Syncthing 或 Nextcloud 等,来在 Ubuntu 和
Windows 之间同步文件和目录。


云存储服务:使用云存储服务(如 Google Drive、Dropbox、OneDrive 等),您可以将文件上传到云端,然后在
Ubuntu 和 Windows 上使用相应的客户端应用程序进行访问和同步。

综上所述,Samba 共享比较方便

二、Samba简介

Samba 是一种用于 Linux 和 Windows 之间文件共享的协议和工具集。它允许在 Linux 系统上创建一个文件共享服务器,使 Windows 计算机能够访问和共享其中的文件和目录。以下是 Samba 共享的一些特点和工作原理的简要介绍:

文件共享:通过 Samba,您可以在 Linux 系统上设置共享文件夹,使其在局域网内可被 Windows 计算机访问。这意味着您可以在Linux 和 Windows 之间轻松地共享文件和目录


SMB/CIFS 协议支持:Samba 实现了 SMB(Server Message Block)和 CIFS(CommonInternet File System)协议,这是 Windows 系统用于文件和打印机共享的标准协议。通过支持这些协议,Samba 实现了与 Windows 的兼容性。



用户认证和权限控制:Samba 可以与 Linux系统上的用户认证机制集成,使您可以对共享文件和目录进行用户级别的访问控制。您可以设置用户账号和密码,并分配相应的访问权限,以确保只有授权用户可以访问共享内容



网络浏览和发现:Samba 具有网络浏览功能,可以在 Windows网络上显示共享服务器和共享资源,使用户能够方便地浏览和发现可用的共享内容。



打印机共享:除了文件共享,Samba 还支持共享打印机,使 Windows 计算机能够使用连接到 Linux 系统上的打印机。



配置灵活:Samba 的配置文件非常灵活,可以根据需要进行调整。您可以定义共享名称、路径、访问权限、工作组和其他相关设置

三、配置流程:

1、安装 Samba:

在 Ubuntu 上,打开终端,并运行以下命令以安装 Samba:

# 安装与升级
sudo apt update
sudo apt install samba samba-common -y


# 卸载
sudo apt autoremove samba


# 查看安装结果
root@ubuntu-master:~# dpkg -l | grep samba
ii  python3-samba   2:4.15.13+dfsg-0ubuntu1.6    amd64    Python 3 bindings for Samba
ii  samba 2:4.15.13+dfsg-0ubuntu1.6 amd64 SMB/CIFS file, print, and login server for Unix
ii  samba-common 2:4.15.13+dfsg-0ubuntu1.6 all common files used by both the Samba server and client
ii  samba-common-bin 2:4.15.13+dfsg-0ubuntu1.6 amd64 Samba common files used by both the server and the client
ii  samba-dsdb-modules:amd64  2:4.15.13+dfsg-0ubuntu1.6 amd64 Samba Directory Services Database
ii  samba-libs:amd64  2:4.15.13+dfsg-0ubuntu1.6         amd64        Samba core libraries
ii  samba-vfs-modules:amd64 2:4.15.13+dfsg-0ubuntu1.6 amd64 Samba Virtual FileSystem plugins
root@ubuntu-master:~#

2、配置共享目录:

打开 Samba 配置文件 /etc/samba/smb.conf:

sudo vim /etc/samba/smb.conf

1. 查看 samba 的配置文件 如下:
root@ubuntu-master:~# ls /etc/samba
gdbcommands  smb.conf  tls
root@ubuntu-master:~#


2.学习配置文件的含义
vim /etc/samba/smb.conf

在文件末尾添加共享目录的配置。例如,要共享名为 myshare 的目录,可以添加以下内容
[workspace]
   comment = share folder with usrname and passwd
   path = /home/<username>/workspace
   available = yes
   browseable = yes
#   public = yes
   writeable = yes
   read only = no
其中,path 是共享目录的路径,writable 指定是否允许写入访问权限,guest ok 指定是否允许匿名访问。

3、配置用户账号:

创建 Samba 用户账号(与系统用户账号分离):

sudo smbpasswd -a username
​

其中,username 是要创建的 Samba 用户名。将被要求设置密码。

将 Samba 用户添加到共享目录的访问权限中。

找到共享目录的配置段,在其中添加以下行,以授予特定用户访问权限

valid users = username
​

4、重启 Samba 服务:

运行以下命令以重新启动 Samba 服务,以使配置生效

# sudo service smbd restart
systemctl restart smbd      # 重新启动 samba 服务
systemctl enable smbd       # 设置开机自动

5、Windows 客户端连接

your-ubuntu-ip\workspace中的 workspace对应前面在 Samba 配置文件 /etc/samba/smb.conf 中添加的共享目录的名称。在配置文件中,通过方括号括起来的部分定义了共享目录的配置,方括号内的名称即为共享目录的名称。在示例中,我们添加了 [workspace] 部分来定义名为 myshare 的共享目录,因此在访问时需要使用该名称。您可以根据需要在配置文件中定义多个共享目录,并在访问时使用相应的名称

上面是在ubuntu安装 samba 服务,以下是在centos上安装 samba 服务

安装 Samba 服务

 # 安装 samba
 yum install samba -y
 
 # 默认主配置文件
 cat /etc/samba/smb.conf -n
 

 
 # 查看是否配置 yum 源
 ls /etc/yum.repos.d/
 CentOS Base.repo	epel.repo
 
 
 vim /etc/samba/smb.conf
 # See smb.conf,example for a more detailed config file or
 # read the smb.conf manpage
 # Run 'testparm' to verify the config is correct after
 # You modified it 
 
 [global]
 		workgroup = SAMBA
 		security = user
 		
 		possdb backend = tdbsam
 		
 		printing = cups
 		printcap name = cups
 		load printers = yes
 		cups options = raw
 		
 [homes]
 		comment = Home Directories
 		valid users = %s,%d,%w,%s
 		browseable = NO
 		read only = NO
 		inherit acls = YES
 		
 [printers]
 		comment = ALL Printers
 		path = /var/tmp
 		printable = YES
 		create mask = 0600
 		browseable = NO
 		
 [print$]
 		comment = Printer Drivers
 		path = /var/lib/samba/drivers
 		write list = @printadmin root
 		force group = @printadmin
 		create mask = 0664
 		directory mask = 0775

Samba 配置文件核心参数

ls /etc/samba/
lmhosts	 smb.conf	 smb.conf.example


查看 samba 的配置文件,我们在 linux 平台,用各种软件,他的套路就是,下载,安装,修改配置文件,配置文件修改好了,这个软件就可以用了。我们所使用的各种各样的功能,都是在修改这款软件的配置文件,

smb.conf.example 配置样例文件,里面有关于配置 Samba 服务器样例

smb 的配置文件,主要分为 全局配置 和 共享配置

  • [global] 全局

  • 共享

    • [home]
    • [printers]

[全局配置]

workgroup = MYGROUP
Samba 服务器加入的工作组,一个局域网内,必须有相同的工作组名,

server string = Samba Server Version %v
Samba 服务器注释,可以不选,%v 代表显示 Samba 版本号

netbios name = samba
主机 NetBIOS 名

interfaces = lo eth0
设置 Samba 服务器端监听网卡,可以写网卡名称或者 IP 地址

hosts allow/deny = 10.10.10.1
允许连接到 samba server 客户端 IP,多个参数用空格分开,可以用一个 IP 表示,也可以用 一个网段表示。

max connections = 0
用来指定连接 Samba server 服务器最大连接数如果操作则连接请求被拒绝。0表示不限制。

deadtime = 0
来设置断掉一个没有任何文件的链接时间。单位+分钟,0代表 Samba server 不自动断开任何连接


time server = yes/no
用来设置让 nmdb 成为 windows 客户端的时间服务器

log file = /var/log/samba/%m.log
设置 Samba server 日志文件存储位置和日志名称,文件后面加一个%m (主机名),每个主机都会有一个主机名.log 日志文件

max log size = 50
限制每个日志文件的最大容量为 50kb 0代表 不限制

Security = user
设置客户端访问 Samba 服务器的验证方式,Samba4版本已经不使用 share 和 server 方式,这里不介绍
1)user: Samba 用户名和密码登录
2)domain: 添加 Samba 服务器到 N 域,由 NT 与控制起来进行身份验证,域安全级别,使用主域控制器 (PDC)

passdb backend = tdbsam
后台管理用户密码方式:
1)sampasswd: 该方式是使用 smb 自己的工具 smbpasswd来给系统用户
2)tdbsam: 该方式则是使用一个数据库文件来建立用户数据库
3) ldapsam: 该方式则是基于 LDAP 的账号管理方式来验证用户


smb passwd file = /etc/samba/smbpasswd
用来定义 samba 用户的密码文件。smbpasswd 文件如果没有那就要手工新建。


username map = /etc/samba/smbusers
用来定义用户名映射,比如可以将 root 换 administrator,admin 等

guset account = nobody
用来设置 geust 用户名






---------------------------------------------------------------

# 学习 samba 默认配置文件(/etc/samba/smb.conf)的含义,参数解释如下:
vim /etc/samba/smb.conf

[global]
 		workgroup = SAMBA	
 		# 绿色的词都代表固有的关键词,等号后面就是我们自定义的值 定义一个工作组的名字
 		security = user		# 使用账号密码进行验证  代表安全的验证方式
 		
 		possdb backend = tdbsam		# 验证方式
 		
 		printing = cups
 		printcap name = cups
 		load printers = yes
 		cups options = raw
 		
 [homes]
 		comment = Home Directories
 		valid users = %s,%d,%w,%s
 		browseable = NO
 		read only = NO
 		inherit acls = YES
 		
 [printers]
 		comment = ALL Printers
 		path = /var/tmp
 		printable = YES
 		create mask = 0600
 		browseable = NO
 		
 [print$]
 		comment = Printer Drivers
 		path = /var/lib/samba/drivers
 		write list = @printadmin root
 		force group = @printadmin
 		create mask = 0664
		directory mask = 0775

[chaoge]	# 代表又定义了一个局部共享文件夹
		comment = Printer Drivers
 		path = /var/lib/samba/drivers
 		write list = @printadmin root
 		force group = @printadmin
 		create mask = 0664
		directory mask = 0775		
		
	'[global]'	是全局参数,是领导
	其他的是局部参数,都遵循 全局参数 规则 此参数是针对局部单个生效的
		

pdbedit命令

pdbedit是 samba 的用户管理命令

语法

pdbedit -a username 	# 新建 Samba 账户
pdbedit -r username		# 修改 Samba 账户
pdbedit -x username		# 删除 Samba 账户
pdbedit -u,--user=USER		use username
pdbedit -L 		# 列出 Samba 用户列表,读取 passdb,tdb 数据库文件
pdbedit -Lv		# 列出 Samba 用户列表详细信息
pdbedit -c "[D]" -u username		# 暂停该 Samba 用户账号
pdbedit -c "[]" -u username		# 恢复该 Samba 用户账号

创建用于访问 samba 共享资源的账户信息

注意 samba 创建的用户数据库必须在当前系统中存在

root@ubuntu-master:~# id chaoge
uid=1001(chaoge) gid=1001(chaoge) groups=1001(chaoge)
root@ubuntu-master:~#
​

演练 Samba 的共享文件夹配置

1. 修改配置文件,添加一个局部的共享区域
vim /etc/samba/smb.conf

# 修改 smb.conf 如下,添加以下参数
[chaoge]
		comment = This is test configure
		path = /home/chaoge
		public = no
		writeable = yes
		guest ok = yes
		
------------------------------------------------------------
以上参数解释
[chaoge]	# 
		comment = This is test configure	# 注释这是一个测试配置
		path = /home/chaoge		# 定义一个共享的文件夹路径
		public = no			# 代表这个共享文件夹不是公开的
		writeable = yes		# 用户登录以后,可以进行数据写入
		guest ok = yes		# 可以使用一个匿名用户登录


2. 使用 pdbedit 命令,创建 samba 服务专用的用户密码信息


3. 创建 samba 用户,必须保证这个用户在 linux 系统中存在
grep 'chaoge' /etc/passwd

a. 查看chaoge这个用户存在吗
root@ubuntu-master:~# grep 'chaoge' /etc/passwd
chaoge:x:1001:1001::/home/chaoge:/bin/sh
root@ubuntu-master:~#

b. 查看chaoge这个用户存在吗
root@ubuntu-master:~# id chaoge
uid=1001(chaoge) gid=1001(chaoge) groups=1001(chaoge)
root@ubuntu-master:~#

c. 如果没有就创建一个系统用户 useradd chaoge


4. 创建一个 samba 用户,命令如下:
pdbedit -a -u chaoge	# 创建一个 samba 用户 chaoge 
pdbedit -a -u longchi

root@ubuntu-master:~# pdbedit -a -u chaoge
new password:
retype new password:
Unix username:        chaoge
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-4131362352-3367071731-2713888566-1000
Primary Group SID:    S-1-5-21-4131362352-3367071731-2713888566-513
Full Name:
Home Directory:       \\UBUNTU-MASTER\chaoge
HomeDir Drive:
Logon Script:
Profile Path:         \\UBUNTU-MASTER\chaoge\profile
Domain:               UBUNTU-MASTER
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          Wed, 06 Feb 2036 15:06:39 UTC
Kickoff time:         Wed, 06 Feb 2036 15:06:39 UTC
Password last set:    Tue, 30 Apr 2024 10:42:02 UTC
Password can change:  Tue, 30 Apr 2024 10:42:02 UTC
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
root@ubuntu-master:~#

以上信息表示 samba 账户创建成功



5.用户创建完毕,重启 samba 服务 ,并且检查 samba 端口是否存活 ,如果有端口了,表示服务已经正确启动了
systemctl restart smbd
netstat -tunlp | grep smb

root@ubuntu-master:~# systemctl restart smbd


root@ubuntu-master:~# netstat -tunlp | grep smb
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      5403/smbd
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      5403/smbd
tcp6       0      0 :::139                  :::*                    LISTEN      5403/smbd
tcp6       0      0 :::445                  :::*                    LISTEN      5403/smbd
root@ubuntu-master:~#


root@ubuntu-master:~# systemctl status smbd
● smbd.service - Samba SMB Daemon
     Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2024-04-30 10:48:08 UTC; 49s ago
       Docs: man:smbd(8)
             man:samba(7)
             man:smb.conf(5)
    Process: 5393 ExecStartPre=/usr/share/samba/update-apparmor-samba-profile (code=exited, status=0/SUCCESS)
   Main PID: 5403 (smbd)
     Status: "smbd: ready to serve connections..."
      Tasks: 4 (limit: 4515)
     Memory: 8.7M
        CPU: 106ms
     CGroup: /system.slice/smbd.service
             ├─5403 /usr/sbin/smbd --foreground --no-process-group
             ├─5405 /usr/sbin/smbd --foreground --no-process-group
             ├─5406 /usr/sbin/smbd --foreground --no-process-group
             └─5407 /usr/lib/x86_64-linux-gnu/samba/samba-bgqd --ready-signal-fd=45 --parent-watch-fd=11 --debuglevel=0 -F

Apr 30 10:48:07 ubuntu-master systemd[1]: Starting Samba SMB Daemon...
Apr 30 10:48:08 ubuntu-master systemd[1]: Started Samba SMB Daemon.
root@ubuntu-master:~#


6.防火墙是否关闭了
查看防火墙 iptables -L  看到如下信息,表示防火墙没有任何规则

root@ubuntu-master:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy DROP)
target     prot opt source               destination
DOCKER-USER  all  --  anywhere             anywhere
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain DOCKER (1 references)
target     prot opt source               destination

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere
RETURN     all  --  anywhere             anywhere

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere
RETURN     all  --  anywhere             anywhere

Chain DOCKER-USER (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere
root@ubuntu-master:~#


7.关闭防火墙操作(如果有防火墙)
a. 清空规则
iptables -F

b. 停止防火墙
systemctl stop firewalld

使用客户端连接 samba 服务器

  • windows 进行连接

  • ​
    直接找到 运行 功能
    ​
    输入 \\ smb服务器IP地址
    \\ 172.18.22.128\chaoge(共享目录)
    ​
    只要输入如上地址,就能够直接进入 账号密码验证环节,然后直接打开 samba 共享文件夹的目录了;

  • macos 进行连接

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值