一、Samba简介
1、Samba概述
Samba最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享,Samba既可以用于windows与Linux之间的文件共享,也可以用于Linux与Linux之间的资源共享,由于NFS可以很好的完成Linux与Linux之间的数据共享,因而Samba较多的用在了Linux与windows之间的数据共享上面。
SMB:Server Message Block protocol 服务信息块
SMB是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,SMB协议客户端应用程序可以在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。此外通过 SMB 协议,应用程序可以访问远程服务器端的文件、以及打印机、邮件槽(mailslot)、命名管道(named pipe)等资源。
在 TCP/IP 环境下,客户机通过 NetBIOS over TCP/IP(或 NetBEUI/TCP 或 SPX/IPX)连接服务器。一旦连接成功,客户机可发送 SMB 命令到服务器上,从而客户机能够访问共享目录、打开文件、读写文件,以及一切在文件系统上能做的所有事情。
CIFS)。与现有 Internet应用程序如文件传输协议(FTP)相比,CIFS灵活性更大。对于类UNIX系统,可使用一种称为 Samba 的共享软件。
2、NetBIOS
用于局域网通信的一套API
NETBIOS协议是由IBM公司开发,主要用于数十台计算机的小型局域网。该协议是一种在局域网上的程序可以使用的应用程序编程接口(API),为程序提供了请求低级服务的统一的命令集,作用是为了给局域网提供网络以及其他特殊功能。系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名-——特指基于NETBIOS协议获得计算机名称——解析为相应IP地址,实现信息通讯,所以在局域网内部使用NetBIOS协议可以方便地实现消息通信及资源的共享。因为它占用系统资源少、传输效率高,所以几乎所有的局域网都是在NetBIOS协议的基础上工作的。
NetBIOS的功能简单地概括为:为局域网内的主机实现名称解析
二、samba
samba在类UNIX上分别使用SMB和NMB进行实现了SMB和NetBIOS,
SMB是samba的核心服务,主要负责建立Linux Samba服务器与Samba客户机之间的对话,验证用户身份并提供对文件和打印系统的访问,只有SMB服务启动,才能实现文件的共享,监听445TCP端口;
而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件,监听137和138UDP,及139TCP端口。
samba还有另一个进程:winbindd,但我们一般都不启动它,使用它再基于LDAP协议可以加入windows的AD
Samba服务器可实现如下功能:WINS和DNS服务; 网络浏览服务; Linux和Windows域之间的认证和授权; UNICODE字符集和域名映射;满足CIFS协议的UNIX共享等。
安装samba:
[root@Node4 ~]# yum install samba
Dependencies Resolved
==========================================================================================================
Package Arch Version Repository Size
==========================================================================================================
Installing:
samba x86_64 3.6.23-36.el6_8 updates 5.1 M
Installing for dependencies:
libtalloc x86_64 2.1.5-1.el6_7 base 26 k
libtevent x86_64 0.9.26-2.el6_7 base 29 k
samba-common x86_64 3.6.23-36.el6_8 updates 10 M
samba-winbind x86_64 3.6.23-36.el6_8 updates 2.2 M
samba-winbind-clients x86_64 3.6.23-36.el6_8 updates 2.0 M
Transaction Summary
==========================================================================================================
Install 6 Package(s)
[root@Node4 ~]# rpm -ql samba
/etc/logrotate.d/samba
/etc/openldap/schema
/etc/openldap/schema/samba.schema
/etc/pam.d/samba
/etc/rc.d/init.d/nmb
/etc/rc.d/init.d/smb
/etc/samba/smbusers
/usr/bin/eventlogadm # 事件查看器,日志管理工具
/usr/bin/mksmbpasswd.sh
/usr/bin/smbstatus # 查看smb状态的命令
/usr/lib64/samba/auth
/usr/lib64/samba/vfs
/usr/lib64/samba/vfs/acl_tdb.so
/usr/sbin/nmbd
/usr/sbin/smbd
/usr/share/doc/samba-3.6.23
/var/spool/samba
启动samba:
[root@Node4 ~]# service smb start
Starting SMB services: [ OK ]
[root@Node4 ~]# service nmb start
Starting NMB services: [ OK ]
[root@Node4 ~]# smbstatus
Samba version 3.6.23-36.el6_8
PID Username Group Machine
-------------------------------------------------------------------
Service pid machine Connected at
-------------------------------------------------------
No locked files
[root@Node4 ~]#
[root@Node4 ~]# ss -tunap|grep m
udp UNCONN 0 0 172.16.11.255:137 *:* users:(("nmbd",17115,16))
udp UNCONN 0 0 172.16.11.221:137 *:* users:(("nmbd",17115,15))
udp UNCONN 0 0 192.168.10.255:137 *:* users:(("nmbd",17115,12))
udp UNCONN 0 0 192.168.10.4:137 *:* users:(("nmbd",17115,11))
udp UNCONN 0 0 *:137 *:* users:(("nmbd",17115,9))
udp UNCONN 0 0 172.16.11.255:138 *:* users:(("nmbd",17115,18))
udp UNCONN 0 0 172.16.11.221:138 *:* users:(("nmbd",17115,17))
udp UNCONN 0 0 192.168.10.255:138 *:* users:(("nmbd",17115,14))
udp UNCONN 0 0 192.168.10.4:138 *:* users:(("nmbd",17115,13))
udp UNCONN 0 0 *:138 *:* users:(("nmbd",17115,10))
tcp LISTEN 0 50 *:139 *:* users:(("smbd",17133,29))
tcp LISTEN 0 50 :::139 :::* users:(("smbd",17133,27))
tcp LISTEN 0 100 ::1:25 :::* users:(("master",1401,13))
tcp LISTEN 0 100 127.0.0.1:25 *:* users:(("master",1401,12))
tcp LISTEN 0 50 *:445 *:* users:(("smbd",17133,28))
tcp LISTEN 0 50 :::445 :::* users:(("smbd",17133,26))
[root@Node4 ~]#
三、配置Samba
samba配置文件都存放在/etc/samba/目录下:
[root@Node4 ~]# cd /etc/samba/
[root@Node4 samba]# ls
lmhosts smb.conf smbusers
smb.conf 主配置文件:
包括四个设置段:
[global] 设置全局环境选项
[homes] 设置用户宿主目录共享
[printers] 设置打印机共享
[sharefiles] 设置文件共享
注意:
行前有分号“;”或“#”都表示注释,“#”表示描述注释,“;”表示配置注释(可以启用的选项)
[global]段常用选项设置:
workgroup = 指定工作组或域 # 就可以在同网段的windows主机的网上邻居上显示出该主机
server string = 描述 # 主机描述信息
;netbios name = MYSERVER # 设置主机名
; interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 # 监听的网卡或ip
; hosts allow = 127. 192.168.12. 192.168.13. # 允许访问的主机
security = 指定安全模式 # 这里指定samba的安全等级,默认即可
passdb backend = tdbsam # 用户帐号密码保存的格式,默认即可
关于安全等级有四种:
share:用户不需要账户及密码即可登录samba服务器
user:由提供服务的samba服务器负责检查账户及密码(默认)
server:由一台服务器进行集中用户认证
domain:指定windows域控制服务器来验证用户的账户及密码。
1、samba的用户
系统用户:系统上的用户名,但密码是独立的,不是系统上用户的密码(不是/etc/shadow中的密码),而是单独访问samba的密码,和系统密码没关系
使用smbpasswd为系统用户设定访问samba的密码:
[root@Node4 ~]# smbpasswd --help
smbpasswd: invalid option -- '-'
When run by root:
smbpasswd [options] [username]
otherwise:
smbpasswd [options]
options:
-L local mode (must be first option)
-h print this usage message
-s use stdin for password prompt
-c smb.conf file Use the given path to the smb.conf file
-D LEVEL debug level
-r MACHINE remote machine
-U USER remote username
extra options when run by root or in local mode:
-a add user
-d disable user # 禁用
-e enable user # 启用用户
-i interdomain trust account
-m machine trust account
-n set no password # 设置空密码
-W use stdin ldap admin password
-w PASSWORD ldap admin password
-x delete user
-R ORDER name resolve order
[root@Node4 ~]# smbpasswd -a xj
New SMB password:
Retype new SMB password:
Added user xj.
2、共享文件的设置
直接添加在配置文件smb.conf文件最后即可:
[myshared] # 共享名,可不写
comment = shared files # 描述(注释)信息
path = /share/test # 共享文件的路径
writable = yes # 可写
write list = USERNAME # 可写的用户列表,多个用户使用逗号分隔,用户名全使用+或@表示该组的用户都可写;不和上一个选项一起使用,
public|guest ok = yes # 用户能否访问没权限的文件
browseable = no # 无权限共享目录隐藏
writable = yes 和read only = yes # 都是只读的信息
valid users = # 指定访问用户
3、samba的linux客户端使用
安装交互式客户端smbclient:
[root@Node5 ~]# yum install smbclient
Dependencies Resolved
==========================================================================================================
Package Arch Version Repository Size
==========================================================================================================
Installing:
samba-client x86_64 3.6.23-36.el6_8 updates 11 M
Installing for dependencies:
libtalloc x86_64 2.1.5-1.el6_7 base 26 k
libtevent x86_64 0.9.26-2.el6_7 base 29 k
samba-common x86_64 3.6.23-36.el6_8 updates 10 M
samba-winbind x86_64 3.6.23-36.el6_8 updates 2.2 M
samba-winbind-clients x86_64 3.6.23-36.el6_8 updates 2.0 M
Transaction Summary
==========================================================================================================
Install 6 Package(s)
smbclient使用:
[root@Node5 ~]# smbclient -L 192.168.10.4 # 检查服务器上的共享
Enter root's password:
Anonymous login successful
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.23-36.el6_8]
Sharename Type Comment
--------- ---- -------
myshared Disk shared files
IPC$ IPC IPC Service (Samba Server Version 3.6.23-36.el6_8)
Anonymous login successful
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.23-36.el6_8]
Server Comment
--------- -------
NODE4 Samba Server Version 3.6.23-36.el6_8
XJ-PC
Workgroup Master
--------- -------
WORKGROUP XJ-PC
[root@Node5 ~]# smbclient //192.168.10.4/myshared -U xn # 这里用的是共享的文件名
Enter xn's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.23-36.el6_8]
smb: \> ?
? allinfo altname archive blocksize
cancel case_sensitive cd chmod chown
close del dir du echo
exit get getfacl geteas hardlink
help history iosize lcd link
lock lowercase ls l mask
md mget mkdir more mput
newer open posix posix_encrypt posix_open
posix_mkdir posix_rmdir posix_unlink print prompt
put pwd q queue quit
readlink rd recurse reget rename
reput rm rmdir showacls setea
setmode stat symlink tar tarmode
timeout translate unlock volume vuid
wdel logon listconnect showconnect ..
!
smbclient -L [//]SERVER [-U USERNAME] # 检查服务器上的共享
smbclient //SERVER/SHARED -U USERNAME
testparm # 测试配置文件语法,并显示最终生效的配置
客户端挂载使用:
mount -t cifs //server/shared /path/to/mount_point -o username=smbuser
[root@Node5 ~]# mount -t cifs //192.168.10.4/myshared /samba -o username=xn,passwd=11
[root@Node5 ~]# ls /samba
haha issue
开机自动挂载: # 不需要安装任何客户端工具
//192.168.10.4/myshared /samba cifs defaults,username=xn,password=11 0 0
四、samba-swat
samba-swat是samba的GUI配置工具:
[root@Node4 src]# yum install samba-swat
[root@Node4 src]# rpm -ql samba-swat
/etc/xinetd.d/swat
/usr/lib64/samba/de.msg
/usr/lib64/samba/en.msg
/usr/lib64/samba/fi.msg
/usr/lib64/samba/fr.msg
/usr/lib64/samba/it.msg
/usr/lib64/samba/ja.msg
/usr/lib64/samba/nl.msg
/usr/lib64/samba/pl.msg
/usr/lib64/samba/ru.msg
/usr/lib64/samba/tr.msg
/usr/sbin/swat
/usr/share/man/man8/swat.8.gz
/usr/share/swat
/usr/share/swat/help
/usr/share/swat/help/Samba3-ByExample
配置:
[root@Node4 src]# 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
wait = no
only_from = 192.168.10.0/24
user = root
server = /usr/sbin/swat
log_on_failure += USERID
}
使用浏览器访问:
注意:
使用系统帐号、密码登录即可,
在swat中配置,会直接修改/etc/samba/smb.conf文件,而且会干掉所有的注释信息,建议备份原始的配置文件
练习:
创建一个共享,符合以下要求:
1、仅允许192.168.10.0/24和172.16.11.0/24网络中的主机访问
2、共享名为myshared
3、允许mygroup组中用户执行写入操作
4、允许来宾用户访问