Samba:Linux 与 Windows 建立 SMB 协议文件共享

一、安装 Samba

[root@hexingxing ~]# yum -y install samba
……
Installed:
  samba.x86_64 0:3.6.23-42.el6_9                                                

Dependency Updated:
  libsmbclient.x86_64 0:3.6.23-42.el6_9                                         
  samba-common.x86_64 0:3.6.23-42.el6_9                                         
  samba-winbind.x86_64 0:3.6.23-42.el6_9                                        
  samba-winbind-clients.x86_64 0:3.6.23-42.el6_9                                

Complete!

二、创建共享文件夹

[root@hexingxing ~]# mkdir /common 

// 创建共享文件夹

[root@hexingxing ~]# chmod 777 /common

// 修改文件夹权限

[root@hexingxing ~]# echo "hello" > /common/smb.txt

// 向共享文件夹里输入一个文本文件,稍后可读取表示共享成功

[root@hexingxing /]# ll 
drwxrwxrwx.   2 root root  4096 May 13 19:58 common
……

// 确认权限为全部为读、写、执行

三、建立用户

[root@hexingxing ~]# useradd hxx #创建 Linux 用户
[root@hexingxing ~]# passwd hxx #创建指定用户密码
passwd: all authentication tokens updated successfully. #密码配置成功
[root@hexingxing ~]# smbpasswd -a hxx #创建 Smb 用户,此用户必须是已经建立的 Linux 用户
New SMB password:  #创建 Smb 密码
Retype new SMB password: #确认 Smb 密码
Added user hxx. #表示 hxx 用户加入 Smb 成功
[root@hexingxing ~]# smbpasswd < 用户名>  #修改 smb 密码

四、添加 smb 配置

[root@hexingxing ~]# vi /etc/samba/smb.conf
[common] #配置名称,用于在 Windows 共享所显示的名称
comment= Common #描述,用于备注作用
path = /common #指定共享的路径(重要,要与本地已存在的目录一致,否则无法授权共享权限)
browseable = yes #path 指定的目录是否可见
guest ok = no #是否可以访客访问
writable = yes #是否可以写入

// 在 /etc/samba/smb.conf 文件尾部添加以上内容

五、修改 SElinux,以下操作任选一种即可
1:命令如下,立即生效

[root@hexingxing ~]# setenforce 0
setenforce: SELinux is disabled


2:命令如下,重启生效

[root@hexingxing ~]# vi /etc/sysconfig/selinux

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
# SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
SELINUX=disabled

// 注释 “SELINUX=enforcing”,添加 “SELINUX=disabled” 记录
//第一种方式可以不用重启,第二种方式完成后必须重启系统

六、重启系统后,操作以下两个步骤
1、将防火墙关闭(如果未永久关闭)

[root@hexingxing ~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@hexingxing ~]# service iptables status
iptables: Firewall is not running.

2、重启 smb 服务(如果未开启开机启动)

[root@hexingxing ~]# service smb start
Starting SMB services: 
[root@hexingxing ~]# service smb restart
Shutting down SMB services:                                [  OK  ]
Starting SMB services:                                     [  OK  ]

七、至此,完成 Linux 与 Windows 建立 SMB 协议文件共享安装配置。
在 Windows 上可以通过 Linux 服务器的 IP 和用户密码访问共享的文件,如果可以打开前面在 Linux 上输入的 smb.txt 文本说明配置正确,也可以写入文件后在 Linux 上使用。

// 附 Samba 配置参数说明
#================== Share Definitions ==================

[共享名]

说明:共享名 是该共享的文件夹名称,用于在 Windows 共享所显示的名称。

comment = 任意字符串

说明:comment 是对该共享的描述,可以是任意字符串。

path = 共享目录路径

说明:path 用来指定共享目录的路径。可以用%u、%m 这样的宏来代替路径里的 unix 用户和客户机的 Netbios 名,用宏表示主要用于 [homes] 共享域。例如:如果我们不打算用 home 段做为客户的共享,而是在/home/share/下为每个 Linux 用户以他的用户名建个目录,作为他的共享目录,这样 path 就可以写成:path = /home/share/%u; 。用户在连接到这共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。同样,如果我们不是以用户来划分目录,而是以客户机来划分目录,为网络上每台可以访问 samba 的机器都各自建个以它的 netbios 名的路径,作为不同机器的共享资源,就可以这样写:path = /home/share/%m 。

browseable = yes/no

说明:browseable 用来指定该共享是否可以浏览。

writable = yes/no

说明:writable 用来指定该共享路径是否可写。

available = yes/no

说明:available 用来指定该共享资源是否可用。

admin users = 该共享的管理者

说明:admin users 用来指定该共享的管理员(对该共享具有完全控制权限)。在 samba 3.0 中,如果用户验证方式设置成 “security=share” 时,此项无效。
例如:admin users =david,sandy(多个用户中间用逗号隔开)。

valid users = 允许访问该共享的用户

说明:valid users 用来指定允许访问该共享资源的用户。
例如:valid users = david,@dave,@tech(多个用户或者组中间用逗号隔开,如果要加入一个组就用 “@组名” 表示。)

invalid users = 禁止访问该共享的用户

说明:invalid users 用来指定不允许访问该共享资源的用户。
例如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)

write list = 允许写入该共享的用户

说明:write list 用来指定可以在该共享下写入文件的用户。
例如:write list = david,@dave

public = yes/no

说明:public 用来指定该共享是否允许 guest 账户访问。

guest ok = yes/no

说明:意义同 “public”。