前言:Linux/Unix主机之间实现文件共享我们可以使用NFS,那么,Linux/Unix和Windows主机之间共享文件怎么实现呢,samba就是解决这个问题的。

Windows网上邻居依赖的协议:

  NetBIOS 通信协议,无法跨越路由器,samba和NetBIOS关系类似于NFS之于RPC;
  CIFS 和NFS类似的文件系统,CIFS最常见的用途就是网上邻居,SMB;
  Winbindd 让Linux主机加入Windows AD域,AD域使用的LDAP服务器
  LDAP(Linux上使用Opneldap)

Windows上访问共享文件使用UNC路径:\\IP\共享名

如果在Linux上实现了上述协议,那么Linux就可以和Windows文件共享了,Linux上使用samba服务来实现。

实现windows访问Linux共享文件:

(1)samba用户控制:

  它使用系统用户,密码由samba单独控制。

(2)软件安装:

  yum -y install samba.x86_64 samba-client.x86_64 samba-common.x86_64

  默认会安装winbind服务,这里我们不做配置。
  执行事务
    正在安装   : libtalloc-2.1.5-1.el6_7.x86_64                                            1/7
    正在安装   : libtevent-0.9.26-2.el6_7.x86_64                                           2/7
    正在安装   : samba-common-3.6.23-36.el6_8.x86_64                                       3/7
    正在安装   : samba-winbind-3.6.23-36.el6_8.x86_64                                      4/7
    正在安装   : samba-winbind-clients-3.6.23-36.el6_8.x86_64                              5/7
    正在安装   : samba-3.6.23-36.el6_8.x86_64                                              6/7
    正在安装   : samba-client-3.6.23-36.el6_8.x86_64                                       7/7

(3)samba进程:

nmbd:管理工作组,NetBIOS Name等解析,udp 137,138
smbd:管理samba主机共享目录,文件与打印机等,tcp 139,445
如果加入winbind,会启动winbind
服务控制脚本:/etc/rc.d/init.d/smb

(4)samba配置文件:

/etc/samba/
smb.conf 主
lmhosts windows上的特有的文件,用于名称解析。host——wins——DNS——lmhosts
smbusers  把linux用户映射成windows用户

smb.conf
#开头是纯注释信息,;开头的也是注释,但他是可启用的参数。 大致分为两类:
全局配置:Global Settings
共享定义:Share Definitions Global Settings
[global]
----Network Related Options
workgroup = WORKGROUP
server string = Samba Server Version %v 主机描述信息,一般不输出
netbios name = MYSERVER 主机名 ----Logging Options
log file = /var/log/samba/log.%m
max log size = 50 ----Standalone Server Options 独立服务进程
security = user 安全级别
passdb backend = tdbsam 用户账号和密码存放格式,模拟的tdb格式存储的sam文件 ----Browser Control Options 浏览控制信息,和domain相关 Share Definitions
[homes] 用户家目录访问控制
comment = Home Directories 注释,说明信息
browseable = no 浏览权限
writable = yes [public] 共享名
comment = Network Logon Service
path = /home/samba
public = yes
writable = yes
read only =
write list = user1,user2,
@group,+group
valid users = %S 白名单,限制那些用户能访问
invalid users = 例如:/share/test
[tools]
comment = Share Testing
path = /share/test
public = yes
writable = yes 配置文件测试: testparm
[root@myhost01 ~]# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[tools]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions [global]
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
client signing = required
idmap config * : backend = tdb
cups options = raw [homes]
comment = Home Directories
read only = No
browseable = No [printers]
comment = All Printers
path = /var/spool/samba
printable = Yes
print ok = Yes
browseable = No [tools]
comment = Share Testing
path = /share/test
read only = No
guest ok = Yes

(5)启动进程:

[root@myhost01 ~]# service smb start
启动 SMB 服务: [确定]
[root@myhost01 ~]# netstat -anp | grep smb
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 1383/smbd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 1383/smbd
tcp 0 0 :::139 :::* LISTEN 1383/smbd
tcp 0 0 :::445 :::* LISTEN 1383/smbd
unix 2 [ ] DGRAM 11487 1385/smbd
unix 2 [ ] DGRAM 11470 1383/smbd

 (6)添加用户:

[root@myhost01 ~]# useradd samba_user
[root@myhost01 ~]# id samba_user
uid=501(samba_user) gid=501(samba_user) 组=501(samba_user) 把系统账户加入samba
[root@myhost01 ~]# smbpasswd -a samba_user
New SMB password:
Retype new SMB password:
Added user samba_user.

(7)共享文件权限:

  访问权限是由文件系统和samba服务共同控制。

  修改文件系统权限:

[root@myhost01 ~]# ll -d /share/test/
drwxr-xr-x 2 root root 4096 3月 11 16:43 /share/test/
[root@myhost01 ~]# setfacl -m u:samba_user:rwx /share/test/

 (8)Windows UNC访问:

  直接访问主机:

  \\192.168.31.168\  输入用户名:samba_user   密码:123456

  显示用户家目录及tools共享目录,就像访问本地目录一样,在家目录和tools目录创建文件:home_file.txt,tools.txt

  在Linux验证:可以看到在Windows创建的文件有执行权限,这个可以使用samba控制,具体用到时再来研究。

[root@myhost01 ~]# ll /home/samba_user/
总用量 0
-rwxr--r-- 1 samba_user samba_user 0 3月 11 16:54 home_file.txt
[root@myhost01 ~]# ll /share/test/
总用量 0
-rwxr--r-- 1 samba_user samba_user 0 3月 11 16:57 tools.txt
[root@myhost01 ~]#

单独访问tools: \\192.168.31.168\tools   可以在Windows中添加访问位置。

到此,完成Windows访问Linux/Unix文件功能。

实现Linux/Unix访问Windows共享:

(1)Windows创建共享文件,添加win_user用户

(2)Linux主机访问共享:

  smbclient //192.168.31.85/win_samba_share -U win_user

[samba_user@myhost01 ~]$ smbclient //192.168.31.85/win_samba_share -U win_user
Enter win_user's password:
Domain=[DESKTOP-VUBVLHE] OS=[Windows 10 Pro 14393] Server=[Windows 10 Pro 6.3]
smb: \> ls
. D 0 Sat Mar 11 18:29:23 2017
.. D 0 Sat Mar 11 18:29:23 2017
win_file.txt A 0 Sat Mar 11 18:25:51 2017 60603 blocks of size 524288. 33153 blocks available
smb: \> mkdir myfile
smb: \> ls
. D 0 Sat Mar 11 18:43:55 2017
.. D 0 Sat Mar 11 18:43:55 2017
myfile D 0 Sat Mar 11 18:43:55 2017
win_file.txt A 0 Sat Mar 11 18:25:51 2017 60603 blocks of size 524288. 33153 blocks available
smb: \> rmdir win_file.txt
NT_STATUS_NOT_A_DIRECTORY removing remote directory file \win_file.txt
smb: \> rm win_file.txt
smb: \> ls
. D 0 Sat Mar 11 18:44:30 2017
.. D 0 Sat Mar 11 18:44:30 2017
myfile D 0 Sat Mar 11 18:43:55 2017 60603 blocks of size 524288. 33153 blocks available
smb: \>

 (3)挂载至/mnt/win_dir:

  确保安装cifs-utils:yum install cifs-utils.x86_64 -y

[root@myhost01 ~]# mount -t cifs //192.168.31.85/win_samba_share /mnt/win_dir/ -o username=win_user
Password:
[root@myhost01 ~]# df -h
文件系统 容量 已用 可用 已用%% 挂载点
/dev/sda3 20G 2.0G 17G 11% /
tmpfs 699M 0 699M 0% /dev/shm
/dev/sda1 97M 28M 64M 31% /boot
//192.168.31.85/win_samba_share
30G 14G 17G 46% /mnt/win_dir [root@myhost01 ~]# cd /mnt/win_dir/
[root@myhost01 win_dir]# ls
myfile 新建文本文档.txt
[root@myhost01 win_dir]# touch abc
[root@myhost01 win_dir]# ll
总用量 0
-rwxr-xr-x 1 root root 0 3月 11 18:51 abc
drwxr-xr-x 1 root root 0 3月 11 18:43 myfile
-rwxr-xr-x 1 root root 0 3月 11 18:48 新建文本文档.txt 加入开机自动挂载: [root@myhost01 mnt]# vim /etc/samba/cred.passwd [root@myhost01 mnt]# chmod og=--- /etc/samba/cred.passwd [root@myhost01 mnt]# ll /etc/samba/cred.passwd
-rw------- 1 root root 34 3月 11 18:56 /etc/samba/cred.passwd [root@myhost01 mnt]# cat /etc/samba/cred.passwd
username=win_user
password=123456
[root@myhost01 mnt]# umount /mnt/win_dir/
[root@myhost01 mnt]# df -h
文件系统 容量 已用 可用 已用%% 挂载点
/dev/sda3 20G 2.0G 17G 11% /
tmpfs 699M 0 699M 0% /dev/shm
/dev/sda1 97M 28M 64M 31% /boot
[root@myhost01 mnt]# mount -a
[root@myhost01 mnt]# df -h
文件系统 容量 已用 可用 已用%% 挂载点
/dev/sda3 20G 2.0G 17G 11% /
tmpfs 699M 0 699M 0% /dev/shm
/dev/sda1 97M 28M 64M 31% /boot
//192.168.31.85/win_samba_share
30G 14G 17G 46% /mnt/win_dir
 

注意:开机自动挂载,编辑fstab,为了不让密码直接写入fstab,添加密码到:/etc/samba/cred.passwd,修改权限600

//192.168.31.85/win_samba_share        /mnt/win_dir    cifs    credentials=/etc/samba/cred.passwd    0 0

到此,完成Linux对Windows文件共享的访问。

Linux/Unix之间相互访问:

和访问Windows相似,挂载到文件系统也一样,这里不再赘述。

[zdjiang@myhost01 ~]$ smbclient //192.168.31.168/tools -U samba_user
Enter samba_user's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.23-36.el6_8]
smb: \> ls
. D 0 Sat Mar 11 16:57:11 2017
.. D 0 Sat Mar 11 16:43:10 2017
tools.txt A 0 Sat Mar 11 16:57:04 2017 39109 blocks of size 524288. 33197 blocks available
smb: \> mkdir jiang
smb: \> ls
. D 0 Sat Mar 11 16:57:11 2017
.. D 0 Sat Mar 11 16:43:10 2017
jiang D 0 Sat Mar 11 19:44:51 2017
tools.txt A 0 Sat Mar 11 16:57:04 2017 39109 blocks of size 524288. 33197 blocks available
smb: \> rmdir jiang
smb: \>

 samba:基于IP的访问控制

(1)iptables:

139,445 TCP

138,137 UDP

(2)samba本身:

----- Network Related Options ------

hosts allow = 127. 192.168.12. 192.168.13.  注意后面的"."

samba-swat:

  使用web页面来配置samba  web GUI

(1)安装:yum -y install samba-swat.x86_64 

正在安装:samba-swat是瞬时进程,依赖于超级守护进程xinetd
  samba-swat x86_64 3.6.23-36.el6_8 updates 7.4 M
   为依赖而安装:
  xinetd x86_64 2:2.3.14-40.el6 base 122 k
....... 基于 xinetd 的服务:
chargen-dgram: 关闭
chargen-stream: 关闭
daytime-dgram: 关闭
daytime-stream: 关闭
discard-dgram: 关闭
discard-stream: 关闭
echo-dgram: 关闭
echo-stream: 关闭
rsync: 关闭
swat: 关闭
tcpmux-server: 关闭
time-dgram: 关闭
time-stream: 关闭 [root@myhost01 mnt]# chkconfig swat on [root@myhost01 mnt]# service xinetd restart
停止 xinetd: [确定]
正在启动 xinetd: [确定] #每个瞬时进程在/etc/xinetd.d/下有配置文件
[root@myhost01 mnt]# cat /etc/xinetd.d/swat
# default: off
# description: SWAT is the Samba Web Admin Tool. Use swat \
# to configure your Samba server. To use SWAT, \
# connect to port 901 with your favorite web browser.
service swat
{
disable = no
port = 901
socket_type = stream #tcp
wait = no #多用户访问,是否等待
only_from = 192.168.31.0/24 #主机访问控制
user = root
server = /usr/sbin/swat
log_on_failure += USERID
}
[root@myhost01 mnt]# netstat -tlnp | grep xinetd
tcp 0 0 :::901 :::* LISTEN 2255/xinetd

(2)浏览器访问

  浏览器访问192.168.31.168:901即可,注意,第一次访问需要使用系统管理员账户,注意安全防护,登陆之后更改管理员账户和密码。

它控制进程的状态,展示目前文件共享情况,访问记录等。

还记得上面windows访问Linux创建文件后,文件权限问题么,这里可以进行修改:

其他保存后,系统会自动覆盖/etc/samba/smb.conf文件,更多的使用方法,有兴趣的可以去探索。

总结:Linux/Unix和windows主机之间文件共享,samba给我们提供很好的解决方案,配置时,注意权限控制,swat让我们能够使用WEB页面配置,控制服务的开启和关闭,使我们更好的去管理samba。

 

samba实现跨平台文件共享的更多相关文章

  1. 2-5-NFS服务器配置和autofs自动挂载-配置Samba服务器配置现实文件共享

    大纲: NFS服务器运行原理 实战配置NFS服务器 配置Samba服务器配置现实文件共享 ----------------------------------------------- 问题: # 怎 ...

  2. samba + OPENldap 搭建文件共享服务器

    samba + OPENldap 搭建文件共享服务器 这里我使用的是 samba(文件共享服务) v4.9.1 + OPENldap(后端数据库软件) v2.4.44 + smbldap-tools( ...

  3. 树莓派进阶之路 (019) - 树莓派通过filezilla,samba与PC文件共享(转)

    虽然我们可以很方便的通过ssh譬如putty或者vnc连接操控树莓派,但是毕竟树莓派资源没那么高,在上面编程,调试要吃力的多.所以还是想在pc上编程上传到树莓派或者最好,文件共享,可以直接读写共同的文 ...

  4. Samba和NFS文件共享

    SAMBA文件共享服务 通过Yum软件仓库来安装Samba服务程序 [root@zhangjh ~]# yum install samba -y Samba 配置文件注释信息较多,为了便于配置,因此先 ...

  5. 使用Samba或实现文件共享

    安装Samba服务软件包: 命令:yum install samba 使用Samba服务口令验证方式可以让共享文件更加的安全,做到仅让信任的用户访问,而且验证过程也很简单 第1步:检查当前是否为use ...

  6. Ubuntu下配置samba服务器实现文件共享

    安装Samba 安装samba sudo apt-get install samba Kubuntu 安装系统设置的共享模块 sudo apt-get install kdenetwork-files ...

  7. linux 配置 Samba 服务器实现文件共享

    1. 下载samba yum install samba 2. 启动samba 服务 service smb start 3.配置samba 打开/etc/samba/smb.conf 写入一下内容 ...

  8. 虚拟机CentOS6.5搭建samba服务器实现文件共享

    Samba是SMB的一种实现方法,主要用来实现Linux系统的文件和打印服务.Linux用户通过配置使用Samba服务器可以实现与Windows用户的资源共享:而守护进程smbd和nmbd是Samba ...

  9. 使用Samba服务实现文件共享

    1.在虚拟机上安装Samba服务安装包 (在下载之前检查客户机与服务器是否能够ping通) (鼠标右击桌面,打开终端,测试和yum是否能够ping通,下面的命令行是我的yum的IP地址) [root@ ...

随机推荐

  1. 〖Linux〗打开qtcreater出现错误的解决方法

    1. 更换了显卡驱动,发现打开qtcreater时出现了以下的错误: qtcreator: error : cannot open shared object file: No such file o ...

  2. XMPP serverejabberd-14.12本地搭建

    这里记录下我搭建ejabberd-14.12的过程. 首先下载:http://pan.baidu.com/s/1hqzjezq  这里我传到我的网盘一份, 大家也能够到官网下载http://xmpp. ...

  3. Sqlite 复制表结构和数据

    复制表结构 ; 复制表结构和数据 create table newTb as select * from oldTb:

  4. Android 5.0 + IDA 6.8 调试经验分享

    如今升级快.网上的资料仅仅能做參考. 学到了NDK逆向这一块,昨天为了能让IDA 能动态调试SO,瞎折腾了非常久,这里分享一下我的经验. 工具: IDA pro 6.8 Android 5.x IDA ...

  5. Spring MVC request flow

    1. When we enter a URL in the browser, the request comes to the dispatcher servlet.The dispatcher se ...

  6. write()和prinln()的区别?

    输出数字不同: write()输出数字转换为字符,println原样输出. 输出null不同: write()输出引用类型的时候调用的toString转换为String数据,因此如果对象为null那么 ...

  7. HDUOJ ---1423 Greatest Common Increasing Subsequence(LCS)

    Greatest Common Increasing Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536 ...

  8. PHP5.3新特性

    1.首先对之前滥用的语法进行了规范 众所周知PHP在语言开发过程中有一个很好的容错性,导致在数组或全局变量中包含字符串不使用引号是可以不报错的,很多业余的开发者因为懒惰而产生的安全问题十分严重,之所以 ...

  9. linux 常用awk命令

    linux awk命令详解awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每 ...

  10. Asp.Net Core 轻松学-一行代码搞定文件上传 JSONHelper

    Asp.Net Core 轻松学-一行代码搞定文件上传   前言     在 Web 应用程序开发过程中,总是无法避免涉及到文件上传,这次我们来聊一聊怎么去实现一个简单方便可复用文件上传功能:通过创建 ...