一、Samba简介
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议 是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
Samba最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享,Samba既可以用于windows与Linux之间的文件共享,也可以用于Linux与Linux之间的资源共享。
二、关闭SELinux和防火墙
a、临时关闭(不用重启机器):
# setenforce 0 ##设置SELinux 成为permissive模式 (关闭SELinux)
# setenforce 1 ##设置SELinux 成为enforcing模式 (开启SELinux)
|
b、修改配置文件需要重启机器:
将SELINUX=enforcing 改为SELINUX=disabled(需重启机器)
c、可自己做策略开放相应端口,这里我直接关闭:
# systemctl status firewalld.service ##查看防火墙状态
# systemctl stop firewalld.service ##关闭防火墙
|
防火墙,使用新的防火墙firewall添加就可以,比iptables更方便
# firewall-cmd --permanent --add-service=samba
# firewall-cmd --reload
# firewall-cmd --list-services
三、安装Samba服务
①直接yum安装
|
# yum install samba samba-client
|
②启动并查看Samba
# systemctl start smb nmb ##注:NMB对客户端提供NetBIOS服务
# systemctl status smb nmb
|
四、配置Samba服务
①配置
# vi /etc/samba/smb.conf
=================== Global Settings[全局选项] ==============================
[global]
#
workgroup = WORKGROUP ##设定Samba Server所要加入的工作组或域
server string = Samba Server Version % v ##设定注释,宏%v表示显示Samba的版本号
netbios name = zhi ##设置Samba Server的NetBIOS名称
map to guest = bad user ##开启匿名访问
# ----------------- Logging Options [日志选项]-----------------------------
log file = /var/log/samba/log .%m ##设置日志文件存储位置及名称,宏%m(主机名),表示对每台 访问Samba Server的机器都单独记录一个日志文件
max log size = 50 ##设置Samba Server日志文件的最大容量,单位为KB,0代表不限制
# ---------------- Standalone Server Options[独立运行进程] ---------------------
security = share ##共享级别:共享目录只能被授权的用户访问
passdb backend = tdbsam ##建立安全账户管理数据库
# ----------------- Printing Options[打印选项]-----------------------------
# load printers = yes ##设置是否在启动Samba时共享打印机
# cups options = raw ##通用unix打印选项
#================== Share Definitions[共享参数] ==============================
[homes] ##设置用户宿主目录
comment = Home Directories ##描述该共享:家目录
browseable = no ##指定该共享是否可以浏览
writable = yes ##指定该共享路径是否可写
[printers] ##设置打印机宿主目录
comment = All Printers ##描述:所有打印机
path = /var/spool/samba
browseable = no
guest ok = no ##指定该共享是否允许guest账户访问
writable = no
printable = yes ##指定是否可打印
[public]
comment = Public Stuff ##定义说明信息
path = /home/samba ##共享目录路径
public = yes ##指定该共享是否允许guest账户访问
writable = yes
printable = no
write list = +staff ##允许写入该共享的用户
|
注:
+ =====》 只在本机的密码文件组中查找
& =====》只在nis服务中查找
@ =====》先通过NIS服务器查找,nis找不到再到本机查找
|
②测试语法
③建立共享目录
# mkdir /home/samba
# cd /home/samba/
# touch samba.txt
|
五、测试
①在windows下输入\\192.168.10.128访问
②在Linux下输入smbclient //192.168.10.128/public访问
③配置只允许个别用户访问
a、配置smb.conf,添加如下
[ time ]
comment = Ashes Of Time
path = /share/time
valid users = zhi
write list = zhi
printable = no
create mask = 0755
directory mask = 0755
|
b、建立共享目录、添加相应用户和组
# mkdir -p /share/time
# groupadd admin
# useradd zhi -s /sbin/nologin
# cd /share/time
# echo "12345" > abc.txt
# pdbedit -a -u zhi ##新建Samba用户
|
# pdbedit -L ##查看Samba用户列表
# systemctl restart smb nmb ##重启Samba
|
注: 可使用命令smbpasswd -a + 用户名为该用户添加Samba密码,但用户必须是系统用户。
c、验证
windows客户端验证:
在"这台电脑"右键,"映射网络驱动器"
提示输入用户名密码
输入后
并会在这台电脑上显示
错误:输入用户名、密码后弹出如下内容:
“指定的网络文件夹目前是以其他用户名和密码进行映射的。要用其他用户名和密码进行连接,首先请断开所有现有的连接到网络共享的映射。”
解决:使用命令net use查看
然后使用命令net use * /delete结束所有连接,即可连接。
Linux客户端验证:
|
$ smbclient -L 192.168.10.128 -U zhi
|
|
$ smbclient //192 .168.10.128 /time -U zhi
|
问题:能下载不能上传
解决:
|
# setfacl -m u:zhi:rwx /share/time/ ##赋予用户写权限
|
已经可以上传了
Linux进行挂载
$ sudo apt-get install cifs-utils ##网络文件共享系统套件
$ sudo mkdir /mnt/samba
$ sudo mount -t cifs //192 .168.10.128 /time /mnt/samba -o username=zhi
|
Linux实现自动挂载
$ sudo vi /etc/fstab ##添加如下
//192 .168.10.128 /time /mnt/samba cifs credentials= /etc/samba/zhi . passwd 0 0
$ sudo vi /etc/samba/zhi . passwd ##防止密码泄露,所以另建文件
username=zhi
password=abcdef
$ sudo chmod og=--- /etc/samba/zhi . passwd ##设置该密码文件权限
$ sudo umount /mnt/samba ##卸载
$ sudo mount -a ##挂载fstab下的所有选项
$ ls /mnt/samba/
|
附:Ubuntu下安装配置Samba的wiki:
http://wiki.ubuntu.org.cn/Samba
注出现:你没有权限访问
修改SELinux设置
如果启用了SELinux,做完了上面的配置还是只能以只读方式访问,需要修改SELinux的设置:
sudo chcon -t samba_share_t /share/time