关键词:
目录
2.1.4修改samba.conf配置文件,添加documents共享设置,并启用服务 4
2.2从客户机访问documents共享,并验证访问权限 4
2.4.2启用别名文件,smbd进程在运行,调整配置后会自动生效,无需重启 6
1. Samba概述
1.1 Samba简介
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
1.2 SMB/CIFS协议
1.2.1 SMB
Server Message Block,服务消息块SMB协议在局域网上用于服务器文件访问和打印的协议
1.2.2 CIFS
Common Internet File System,通用网际文件系统CIFS 是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机提供服务。CIFS 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。SMB协议在局域网上用于服务器文件访问和打印的协议。像SMB协议一样,CIFS在高层运行,而不像TCP/IP协议那样运行在底层。CIFS可以看做是应用程序协议如文件传输协议和超文本传输协议的一个实现。
1.3 Samba服务基础
1.3.1主要软件包
服务器端:samba
客户端:samba-client、cifs-utils
1.3.2系统服务脚本
/etc/init.d/smb
1.4共享账号控制
1.4.1共享访问控制
共享账号
1:新建共享账号时,必须有同名的系统账户
2:共享账号的密码是独立的
3:访问共享时以共享账号/密码登录、权限取决于对应的系统账号
账号数据库文件
默认采用TDB数据格式 /var/lib/samba/private/passdb.tdb
1.4.2共享账号管理
pdbedit 工具
1)格式:pdbedit [选项] [共享账户名]
2)常用管理选项
-a:将制定的系统用户添加为共享账号
-L:查看共享账号信息
-x:删除指定的共享账号
3)案例
[[email protected] ~]# useradd vina //建同名系统用户
[[email protected] ~]# pdbedit -a vina //添加为共享账号
new password: //设置密码
retype new password: //确认设置密码
[[email protected] ~]# pdbedit -vL vina //查看vina账号信息
[[email protected] ~]# smbpasswd vina //修改vina的smb密码
New SMB password: //输入新密码
Retype new SMB password: //再次输入密码
[[email protected] ~]# pdbedit -x vina //删除vina用户
[[email protected] ~]# pdbedit -vL vina //查看vina用户信息
Username not found!
2.配置Samba服务器
将/share/zhang发布为documents共享
2.1服务器端操作
2.1.1安装samba服务器端程序
[[email protected] ~]# yum -y install samba samba-client
注意:配置各种网络服务时,往往为了测试方便,会将某个应用的服务器端,客户端一起给装上,本次实验也是如此,此外还需要安装samba-common,一般这个系统已经安装。
2.1.2建立samba认证用户nickhunter
[[email protected] ~]# useradd nick //添加系统用户nick
[[email protected] ~]# useradd hunter //添加系统用户hunter
[[email protected] ~]# pdbedit -a nick //为nick设置共享密码
new password:
retype new password:
[[email protected] ~]# pdbedit -a hunter //为hunter设置共享密码
new password:
retype new password:
[[email protected] ~]# pdbedit –L //查看共享账号列表
nick:502:
hunter:503:
注意:samba服务器使用独立的共享账号数据库文件,其中的账号名称必须有与它同名的系统用户相对应,以便主机对共享访问的权限进行控制;但共享用户的密码额外设置,可以与系统用户的密码不一样(甚至可不设密码)
2.1.3准备共享文件夹,确认相关权限
[[email protected] ~]# setfacl -m user:hunter:rwx /share/zhang
[[email protected] ~]# getfacl /share/zhang/
getfacl: Removing leading ‘/‘ from absolute path names
# file: share/zhang/
# owner: root
# group: root
user::rwx
user:hunter:rwx
group::r-x
mask::rwx
other::r-x
注意:文件夹默认的权限为755,系统用户nick、hunter对其有读取权限,但是没有写入权限。若希望在共享访问时hunter有权限写入,可以通过setfacl命令做相应调整。
为方便客户机下载测试,在/share/zhang下新建一个hello.txt文件
[[email protected] ~]# echo "hello,hello" > /share/zhang/hello.txt
[[email protected] ~]# cat /share/zhang/hello.txt
hello,hello
2.1.4修改samba.conf配置文件,添加documents共享设置,并启用服务
[[email protected] ~]# vim /etc/samba/smb.conf
[documents]
path = /share/zhang //指定共享目录
public = no //不对所有人开放
read only = yes //默认的权限为只读
valid users = nick,hunter //指定合法用户
write list = hunter //用户hunter用户可读可写
确保启动smb服务程序,必要时设为开机后自动运行
[[email protected] ~]# service smb restart
[[email protected] ~]# chkconfig smb on
[[email protected] ~]# netstat -anput | grep smbd
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 2631/smbd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 2631/smbd
tcp 0 0 :::139 :::* LISTEN 2631/smbd
tcp 0 0 :::445 :::* LISTEN 2631/smbd
2.2从客户机访问documents共享,并验证访问权限
2.2.1安装samba客户端程序
[[email protected] ~]# yum -y install samba-client cifs-utils
2.2.2查看服务器共享资源
使用smbclient命令结合-L选项可以查看目标主机有哪些共享,此操作不涉及实际的文件资源,因此不需要密码,当提示验证密码时回车即可。
[[email protected] ~]# smbclient -L 192.168.1.132 //查看对方的共享资源列表
Enter root‘s password: //无密码,直接回车
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-25.el6_7]
Sharename Type Comment
--------- ---- -------
documents Disk //显示对方提供了一个名为documents的磁盘共享目录
IPC$ IPC IPC Service (Samba Server Version 3.6.23-25.el6_7)
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-25.el6_7]
Server Comment
--------- -------
Workgroup Master
--------- -------
2.2.3使用smbclient命令测试共享访问
[[email protected] smbdir]# smbclient -U nick //192.168.11.135/documents
Enter nick‘s password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-25.el6_7]
smb: >ls
. D 0 Mon Apr 11 01:48:43 2016
.. D 0 Mon Apr 11 01:46:34 2016
hello.txt 12 Mon Apr 11 01:48:43 2016
36825 blocks of size 524288. 18248 blocks available
smb: > get hello.txt
getting file hello.txt of size 12 as hello.txt (0.5 KiloBytes/sec) (average 0.5 KiloBytes/sec)
smb: > !ls
a.txt hello.txt
smb: > put a.txt
NT_STATUS_ACCESS_DENIED opening remote file a.txt
smb: > put a.txt
NT_STATUS_ACCESS_DENIED opening remote file a.txt
smb: > quit
[[email protected] smbdir]# smbclient -Uhunter //192.168.11.135/documents
Enter hunter‘s password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-25.el6_7]
smb: > ls
. D 0 Mon Apr 11 01:48:43 2016
.. D 0 Mon Apr 11 01:46:34 2016
hello.txt 12 Mon Apr 11 01:48:43 2016
36825 blocks of size 524288. 18248 blocks available
smb: > get hello.txt
getting file hello.txt of size 12 as hello.txt (0.3 KiloBytes/sec) (average 0.3 KiloBytes/sec)
smb: > put a.txt
putting file a.txt as a.txt (0.0 kb/s) (average 0.0 kb/s)
smb: > quit
2.3使用mount命令挂载共享
2.3.1手动挂载
[[email protected] smbdir]# mount -o username=nick,password=1234 //192.168.11.135/documents /mnt/smbdir/ //通过mount命令挂载documents共享,由于要求用户
认证,因此要结合-o选项指定用户名,密码才能挂上。
[[email protected] smbdir]# mount | tail -1
//192.168.11.135/documents on /mnt/smbdir type cifs (rw)
[[email protected] smbdir]# df -hT /mnt/smbdir/
Filesystem Type Size Used Avail Use% Mounted on
//192.168.11.135/documents cifs 18G 8.2G 9.0G 48% /mnt/smbdir
[[email protected] smbdir]# ls /mnt/smbdir/
a. txt hello.txt
2.3.2为documents配置开机自动挂载
[[email protected] smbdir]# tail -1 /etc/fstab //配置开机自动挂载
//192.168.11.135/documents /mnt/smbdir cifs defaults,username=nick,password=1234 0 0
[[email protected] smbdir]# umount /mnt/smbdir/ //卸载已挂载目录
[[email protected] smbdir]# mount | grep cifs //确认已卸载
[[email protected] smbdir]# mount /mnt/smbdir/ //测试fstab配置
[[email protected] smbdir]# mount | grep cifs //确认挂载结果
//192.168.11.135/documents on /mnt/smbdir type cifs (rw)
2.4通过别名账户访问共享
通过别名账户访问共享,这是为了提升账户安全性,知道账户名,可以暴力破解尝试一下,而不知道用户名,没法破解。
2.4.1建立别名记录文件
Vim /etc/samba/smbusers //修改配置文件
# Unix_name = SMB_name1 SMB_name2 //告诉你格式
root = administrator admin
nobody = guest pcguest smbguest //添加以几行
hunter = hijack
2.4.2启用别名文件,smbd进程在运行,调整配置后会自动生效,无需重启
[global]
username map = /etc/samba/smbusers
2.4.3采用别名账号访问documents共享
[[email protected] ~]# smbclient -U hijack //192.168.11.135/documents
Enter hijack‘s password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-25.el6_7]
smb: >
2.4.4为documents共享添加客户机地址限制
Vim /etc/samba/smb.conf
Hosts allow = 192.168.11.135 //允许客户机访问的ip地址
2.4.5测试客户机访问限制
将ip地址改为其他ip后,作为测试机的客户端不能访问,出现以下提示
2.5配置文件测试工具
[[email protected] ~]# testparm
2.6常见配置
workgroup 工作组名称
server string 服务器描述
security user|share安全级别,user为要去用户验证
comment对此共享目录的说明文字
path共享目录的实际位置,方括号的类似于别名
browseable是否可见,no为隐藏共享
public是否所有人可用,等效于guest ok
writeable 是否可写,与read only相反
共享目录的认证配置
设置共享访问权限
valid users = 共享账号
write list = 共享账号
用户名或者 @组名,多个账号之间以逗号分隔
主机地址控制
hosts allow = ip或网段地址
hosts deny = ip或网段地址
3.出现的问题
3.1把该在服务器端的配置写到了客户端
问题:在准备测试别名账号的时候出现以下错误,这是因为配置的时候把配置都写到了客户端,不是在服务器端做的配置。修改之后,正常
3.2防火墙为开放139和445
问题:在使用smbclient时老提示错误,但是能ping通如下图
解决:这说明服务器是没有down机的,然后查看进程也正常,最终定位防火墙问题,开放服务器的139和445端口后,成功。
需要在服务器端开放这两个端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
常见配置
3.3不看提示瞎回车
这个报错是自己疏忽大意了,没输密码就直接按回车,每次都是拒绝
这个报错应该就是selinux的关系了,当时是执行了下边第一条命令就可以了
3.4selinux安全上下文
如果是selinux的问题,设置安全上下文
setsebool -P samba_export_all_rw on
1. samba共享的文件必须用正确的selinux安全上下文标记。
chcon -R -t samba_share_t /tmp/abc
2.如果共享/home/abc,需要设置整个主目录的安全上下文。
chcon -R -r samba_share_t /home
查看samba共享,提示一下
这是由于wuhaoshu仅仅只是系统用户,而没有将它加入到samba账户中来,换言之,用来登录samba服务器的账户,首先是一个系统账户,同时还应是samba账户。
smbpasswd -a wuhaoshu
本文出自 “庭中有奇树” 博客,请务必保留此出处http://zhangdl.blog.51cto.com/11050780/1881869
过拟合之我见
架构师之我见
...朋友也可以留言,我们共同探讨这个话题。 架构师之我见 2009-08-06架构 查看详情
闭包之我见
一、闭包是什么? · 闭包就是可以使得函数外部的对象能够获取函数内部的信息。 ·闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。... 查看详情
前端之我见(代码片段)
1.HTML介绍1.1服务器本质1importsocket234sk=socket.socket()56sk.bind(("127.0.0.1",8080))7sk.listen(5)8910whileTrue:11conn,addr=sk.accept()12data=conn.recv(8096)13conn.send(b"HTTP/1.1200OK\\r\\n\\r\\n")14conn.s 查看详情
httphelper之我见
前几月一直用一个Http的访问类去调用WebApi,说句实话最开始没觉有什么,一是技术老,二是觉得比较简单,但是最近我一直关注云开发和AI这块儿微软技术,看到云平台调用API大多类似,所以回想这个早年的调... 查看详情
关于元素居中之我见(干货)
不使用定位 水平居中:text-align=center;(可继承) 竖直居中:margin:0auto;(块级元素) 其他居中:1.文字居中:父元素设置高子元素设置高 line-height=height(父元素) 2.图片居中: ... 查看详情
fec之我见一
顾名思义,FEC前向纠错,根据收到的包进行计算获取丢掉的包,而和大神沟通的结果就是纠错神髓:收到的媒体包+冗余包>=原始媒体包数据 直到满足 收到的媒体包+ 冗余包>=原始媒体包数据 ... 查看详情
关于堆栈和block之我见
临时变量存在栈里对象存在堆里关于blockc与oc最大的区别在于一个是静态语言一个是动态语言先看看c的写法voidtestFunc(){printf("helloworld");}voidtestFuncPoint(void){void(*x)(void)=testFunc;x();} c语言没有block一说,叫做函数指针,其实现... 查看详情
classpathxmlapplicationcontext源代码阅读之我见
由于本人的能力有限,只能说出自己的见解,如有错漏什么的,请大家批评指出。由于代码封装太多,这里只列出了我认为的部分最重要的代码,一些简单的封装代码,不在下面列出。由于代码太过于复杂,在本次博客中,只列... 查看详情
jquery中的callbacks之我见
callbacks是jquery的核心之一。语法如下:jQuery.Callbacks(flags) flags 类型: String 一个用空格标记分隔的标志可选列表,用来改变回调列表中的行为。once:确保这个回调列表只执行(.fire())一次(像一个递延Deferred).memory:... 查看详情
join()方法之我见
JavaScriptjoin()方法定义和用法join()方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。语法arrayObject.join(separator)参数描述separator可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分... 查看详情
编译原理之我见
经过网上的调查,我发现编译原理并不像我所想象的那样简单,我以为编译原理其实就是像塑造一个翻译师一样,赋予它翻译的架构即可,但是经过调查后,结果却不是我所想,编译原理就是将高级语言翻... 查看详情
fec之我见三
继续上文讲解:3)标准的RTP头结构如下所示:其中第一个字节中的x标志位是否扩展了RTP头,RTP协议允许用户自定义的扩展,扩展的字段紧挨上述RTP固定头。RTP扩展投中承载如下信息:1).当前包所在的Group组序号,码流由连续的Gr... 查看详情
依赖倒置之我见
.net程序员对面向对象设计原则以及设计模式的重视似乎不如Java,包括许多有经验.net的程序员,也并没有将面向对象的思想渗透进项目中。我本身就是这样一个例子。C#和Java都是面向对象的语言,设计模式对两者是通用的,... 查看详情
云服务之我见
说实话,虽然工作了十几年,但是很少写东西,今后努力多写的东西,记录一下这几年在it领域工作的一些心得,来和大家一起分享!首先说一下笔者工作的是一个二三线城市,有幸进入了一家云计算的工作,不过主营业务并不... 查看详情
margin,padding之我见
在网页布局中,margin和padding绝对会占很重要的作用,但是在实际的项目中,很多新手前端程序员们往往不能正确的使用它们,导致会出现一些不必要的麻烦,下面是我在前几天的项目中遇到的一些问题,以及个人总结的一... 查看详情
fec之我见四
接上文,来详细的说明一下FEC前向纠错的具体实现:FEC_matrix是一个比较常用的算法,Vandermonde,范德蒙矩阵是法国数学家范德蒙提出的一种各列为几何级数的矩阵。范德蒙矩阵的定义:V=其第i行、第j列可以表示为(αi)^(j-1)。范... 查看详情
快应用之我见
为了对抗微信小程序,安卓手机厂商联合起来推出了快应用,这是好事一件,但快应用的实现方式在我看来并不是一个最佳的方案。首先,既然是对抗小程序,就不应该学小程序的那一套类似于Vue的开发框架,而应该采用React框... 查看详情