1 Samba
在linux实现CIFS(SMB)协议,SMB:服务信息块。
CIFS:Common Internet File System,从而让windows实现网上邻居的文件共享。CIFS监听很多端口,有137/udp,138/udp,139/tcp,445/tcp,其中137和138用于实现NetBIOS
NetBIOS:网络基本输入输出系统,windows基于主机名互相通信的机制,最长15个字符。网上邻居上看到的主机名都是NetBIOS名,第一次打开网上邻居速度会很慢,因为NetBIOS会在局域网中广播,主机和ip地址之间的对应关系。这种机制性能很差。想让linux支持CIFS有个前提就是,linux必须支持NetBIOS,不然在windows的网上邻居上无法看到linux主机。
SMB是一种协议,项目名就不可以这么称呼,于是在两边各加了一个a,就成为了现在的Samba
如果linux,unix,windows都支持CIFS,那么它们之间就能够实现文件共享。
Samba在linux上支持三种服务:nmdb(NetBIOS),smdb(CIFS),winbandd,如果windows不创建域,winbindd就用不到了,所以默认只启动前两种。
Samba提供的共享方式是文件系统,因此需要挂载才能使用。
1.1 windows操作
添加一个账户:我的电脑右键-->管理-->本地用户和组-->用户-->右键选择新用户-->输入用户名test,密码123456
找一个文件夹进行共享,首先将使用共享向导关了,文件夹上右键-->高级共享-->共享此文件夹-->权限-->添加-->输入test-->检查名称-->确定-->将更改勾选-->一路确定
这样就有两个用户可以访问,一个只读,一个可写
windows共享使用UNC路径:\\SERVER\shared_name -U USERNAME
1.2 linux操作
1.2.1 linux为客户端
1.2.1.1 准备工作
安装Samba客户端
[root ~]# yum install samba-client [root ~]# rpm -ql samba-client /usr/bin/findsmb /usr/bin/nmblookup /usr/bin/rpcclient /usr/bin/sharesec /usr/bin/smbcacls /usr/bin/smbclient # 就这个了 /usr/bin/smbget /usr/bin/smbprint /usr/bin/smbspool /usr/bin/smbta-util /usr/bin/smbtar /usr/bin/smbtree
使用smbclient命令进行查看共享的文件,Temp就是需要查看的文件夹。使用test用户登录
[root ~]# smbclient -L 172.16.250.130 -U test Enter test‘s password: Domain=[PC-PC] OS=[Windows 7 Ultimate 7601 Service Pack 1] Server=[Windows 7 Ultimate 6.1] Sharename Type Comment --------- ---- ------- IPC$ IPC 远程 IPC Temp Disk Users Disk session request to 172.16.250.130 failed (Called name not present) session request to 172 failed (Called name not present) session request to *SMBSERVER failed (Called name not present) NetBIOS over TCP disabled -- no workgroup available
1.2.1.2 交互式访问
smbclient –L HOST –U USERNAME获取到共享信息后使用smbclient //SERVER/shard_name
进入共享文件夹
[root ~]# smbclient //172.16.250.130/Temp -U test Enter test‘s password: Domain=[PC-PC] OS=[Windows 7 Ultimate 7601 Service Pack 1] Server=[Windows 7 Ultimate 6.1] smb: \> # 此时就相当于ftp操作
上传一个文件,返回windows可以查看
smb: \> lcd /etc/ smb: \> put fstab putting file fstab as \fstab (13.0 kb/s) (average 13.0 kb/s)
1.2.1.3 挂载方式访问
mount –t cifs //server/shared_name /mount_point –o username=USERNAME
挂载之前需要安装:yum install cifs-utils,不然挂载不了
[root ~]# mount -t cifs //172.16.250.130/Temp /media/ -o username=test Password:
不建议开机自动挂载
1.2.2 linux作为服务器端
Samba可以将linux上任何目录作为共享目录
服务脚本:
/etc/rc.d/init.d/nmb
/etc/rc.d/init.d/smb
主配置文件:/etc/samba/smb.conf
[root ~]# rpm -ql samba|less # 查看生成的文件 /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 /usr/sbin/nmbd /usr/sbin/smbd
启动开始:
[root ~]# service smb start;service nmb start
监听udp 137,138 tcp 139,445端口
[root ~]# ss –tunl
此时windows上就能看到linux主机了,但是linux和windows默认的工作组不一样,可以编辑/etc/samba/smb.conf修改工作组
[root ~]# vim /etc/samba/smb.conf workgroup = WORKGROUP # 改成这样 [root ~]# service smb restart;service nmb restart
转为windows:
windows资源管理器-->地址栏输入\\172.16.45.10\-->提示登录,但此时Samba没有创建任何用户-->linux上创建用户
1.3 Samba的用户认证
Samba用户都是系统用户,密码不是shadow密码而是Samba服务自有密码文件。将系统用户转换为samba用户的命令:smbpasswd
smbpasswd命令:-a Sys_User
创建Samba用户和密码
[root ~]# useradd smbuser1 [root ~]# smbpasswd -a smbuser1 # -a表示将用户加入至Samba用户中 New SMB password: Retype new SMB password: Added user smbuser1.
转回windows登录:
双击进去就是linux上此用户的家目录
1.4 配置文件
/etc/samba/smb.conf分为全局共享设定和特定共享设定。特定共享设定分为家目录、打印机、用户自定义共享。对于此配置文件来讲,#开头的行是纯注释行,;开头的行是可以启动的选项。
[smbuser1 ~]$ vim /etc/samba/smb.conf workgroup = WORKGROUP # 工作组名称 server string = Samba Server Version %v # 给其他用户看的 netbios name = MYSERVER # 用户名的第一项 interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 # 监听的地址 hosts allow = 127. 192.168.12. 192.168.13. # 基于IP地址的访问控制,白名单 log file = /var/log/samba/log.%m # 每个用户都有自己的日志文件,%m表示用户 max log size = 50 # 达到50k就会自动滚动 security = user # 任何用户登录Samba都需要输入用户名 passdb backend = tdbsam # 用户的密码文件是使用tdbsam机制加密的库
公共段:
comment = Home Directories # 注释 browseable = no # 是否当用户的属主属组和分享的文件不同时,是否可看到分享的文件。自己私建的共享文件应该yes writable = yes # 共享权限是否可写,相当于read only valid users = %S # 有效的用户,%S表示当期用户自身 valid users = MYDOMAIN\%S guest ok = no # 不允许来宾账户访问,相当于public write list = +staff # 指明可写用户列表,这里是组内用户可写
自定义共享:
[sharedname]
path =
配置文件的最后给出了自定义共享的模板
testparm:测试配置文件语法错误的,并将真正生效的结果打印到屏幕。
不光自身有写权限,还要对目录有写权限才行
1.5 图形化samba
图形化Samba依赖它自己提供的web服务,它是个瞬时守护进程,由超级守护进程xinetd代为管理
安装:# yum install samba-swat
查看配置文件:
[root ~]# cd /etc/xinetd.d/ [root xinetd.d]# vim 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 { port = 901 # 避免和80端口冲突 socket_type = stream wait = no only_from = 1 # 仅允许本机访问 user = root server = /usr/sbin/swat log_on_failure += USERID disable = yes # 不启动
建议第一次通过本地访问,等配置好后再从远程访问。修改其中的两行后,重新启动并查看901端口。
only_from = 172.16.0.0/16 disable = no [root xinetd.d]# service xinetd restart [root xinetd.d]# !ss
浏览器访问172.16.45.100:901,第一次登陆需要输入系统root账户和密码,这就是为什么建议第一次从本地登陆。登陆后进入界面。