Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
环境:Win7_64位+VMware11+Ubuntu1204
一,同其他网络服务一样,使用Samba服务必须要保证服务器与客户端能够联网,即能够ping通,否则请先调试网络。
二,如果使用的是Ubuntu1204以前的版本,建议先卸载samba,smbclient,samba-common。
1 sudo apt-get remove samba-common 2 sudo apt-get remove smbclient 3 sudo apt-get remove samba
下载安装Samba服务:
1 sudo apt-get install samba 2 sudo apt-get install samba-common 3 sudo apt-get install smbfs //在旧版的Ubuntu中,你可能需要使用 smbfs替代cifs-utils。 4 sudo apt-get install cifs-utils //新版本 ubuntu1204已安装
注:如果在安装samba过程中出现错误
samba : Depends: libwbclient0 (= 2:3.6.3-2ubuntu2) but 2:3.6.3-2ubuntu2.3 is to be installed
则卸载后重新安装samba
sudo apt-get remove libwbclient0 samba-common samba
sudo apt-get install samba //apt-get会自动补全依赖包
三,创建共享目录
sudo mkdir /home/share
sodu chmod 777 /home/share
四,开始配置/etc/samba/smb.conf
1. 保存现有的配置文件
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
2. 修改现配置文件
sudo vi /etc/samba/smb.conf
3. 在smb.conf最后添加
[share]
path = /home/share #共享目录绝对路径
available = yes #共享资源可用
browseable = yes #共享目录可浏览
public = yes #允许匿名用户登录
writable = yes #共享目录可写
【共享属性详解】
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 =bobyuan,jane(多个用户中间用逗号隔开)。
valid users = 允许访问该共享的用户
说明:valid users用来指定允许访问该共享资源的用户。
例如:valid users = bobyuan,@bob,@tech(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@+组名”表示。)
invalid users = 禁止访问该共享的用户
说明:invalid users用来指定不允许访问该共享资源的用户。
例如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)
write list = 允许写入该共享的用户
说明:write list用来指定可以在该共享下写入文件的用户。
例如:write list = bobyuan,@bob
public = yes/no
说明:public用来指定该共享是否允许guest账户访问。
guest ok = yes/no
说明:意义同“public”。
注:如果不习惯使用配置文件,也可以使用图形界面
安装Ubuntu samba图形管理界面
sudo apt-get install system-config-samba
启动samba图形管理界面
sudo system-config-samba
五. 创建samba帐户
sudo touch /etc/samba/smbpasswd
sudo smbpasswd -a john
然后会要求你输入samba帐户的密码
[如果没有这一步,当你登录时会提示 session setup failed: NT_STATUS_LOGON_FAILURE]
smbpasswd 命令的用法:
smbpasswd -a 增加用户(要增加的用户必须以是系统用户)
smbpasswd -d 冻结用户,就是这个用户不能在登录了
smbpasswd -e 恢复用户,解冻用户,让冻结的用户可以在使用
smbpasswd -n 把用户的密码设置成空,要在global中写入 null passwords -true
smbpasswd -x 删除用户
六,配置完成后要重启samba
sudo /etc/init.d/smbd restart
七,测试及使用
测试:输入smbclient -L //localhost/share
使用:到windows在文件夹处输入 "\\" + "Ubuntu机器的ip或主机名" + "\\" + "share"
高级:用户账号映射
samba的用户帐号信息是保存在smbpasswd文件中滴,而且可以访问samba服务器的帐号也必须对应一个同名的系统帐号。基于这 一点,所以,对于一些hacker来说,只要知道samba服务器滴samba帐号,就等于是知道了Linux系统帐号,只要crack其samba帐号密码加以利用就可以攻击samba服务器。所以我们要使用用户帐号映射这个功能来解决这个问题。
用户帐号映射这个功能需要建立一个帐号映射关系表,里面记录了samba帐号和虚拟帐号的对应关系,客户端访问samba服务器时就使用虚拟来登录。
1)编辑主配置文件vi /etc/samba/smb.conf
在global下添加一行字段username map = /etc/samba/smbusers开启用户帐号映射功能。
2)编辑 vi /etc/samba/smbusers
smbusers文件保存帐号映射关系,其有固定滴格式:
samba帐号 = 虚拟帐号(映射帐号)
myname = networkusername
帐号myname就是我们上面建立的samba帐号(同时也是Linux系统帐号),networkusername就是映射的帐号名(虚拟帐号),帐号 myname在我们访问共享目录时只要输入networkusername就可以成功访问了,但是实际上访问samba服务器的还是我们的myname帐号,这样一来就解决了安全问题。