- 论坛徽章:
- 0
|
samba的基本使用
最近我把工作平台转为Fedora Core 4,虽然它比不得RHAS和CentOS,但是足够我平时编程使用了。公司大部分同事都是使用Windows 2000/XP,就连提供数据的服务器都是Windows,可见公司的水平了。唉,没办法。我觉得公司在平台这方面积累的经验不多。为了使我的平台能容合到公司的大环境中,也为了与其它同事共享文件等的方便,我只能多研究一下samba了。
samba的作用是提供Unix/Linux与Windows之间的通讯,并使它们之间实现文件/打印机/设备共享,在Windows网络中,设置好samba的Linux机器可以做服务器也可以做客户端。安装以下几个rpm包:
samba-common-3.0.14a-2
samba-3.0.14a-2
system-config-samba-1.2.31-1
samba-client-3.0.14a-2
samba-swat
其中samba-swat是以web页面方式配置samba的前端,system-config-samba-1.2.31-1是X-window下的图形化配置程序,它们的作用都是设定/etc/samba/smb.conf这个配置文件,此文件也可手动编辑。
chkconfig --level 35 smb on 运行级3,5下,samba服务开机自动加载。
samba的一些重要组成文件:
/usr/sbin/smbd SMB服务守护程式
/usr/sbin/nmbd NetBIOS服务守护程式
/etc/samba/smb.conf samba主配置文件
/usr/bin/smbclient 连接到SMB共享的客户端程式
/usr/bin/testparm 检验smb.conf有效性的脚本
/usr/bin/smbprint 此脚本可以将打印任务送至SMB主机的打印机
/usr/bin/smbstatus 列出本地主机的SMB连接
smbfs smbfs文件系统,可以将共享文件夹用mount命令挂载至本地。 samba主配置文件/etc/samba/smb.conf中的主要参数设定:
该文件中#为信息注释符 ;为参数注释符
#==============================Global Settings =====================================
[global]
workgroup = MYGROUP 工作组名称
server string = Samba Server 主机说明
netbios name = SMBServer 在网络中的netbios名称,如果没有设定,预设值为HOSTNAME
hosts allow = 192.168.1. 192.168.2. 127. 设定哪些ip地址可访问主机
security = user samba的安全级别,从低到高有四级:share/user/server/domain
share: 任何用户都可以访问服务器上的资源,无须帐号
user: 需要用户名和密码进行验证
server: 帐号验证交给另外一个服务器,如交给另一台NT服务器.如果递交失败,就退到user安全级.
domain: 这个安全级别要求网络上存在一台Windows的主域控制器,samba将帐号递交给该服务器验证. user/server/domain要求用户在本地linux机器上也有系统帐户,否则不能访问.
这里只简单介绍一下share/user的用法,详悉设定请参看附录
encrypt passwords = yes 使用加密密码
smb passwd file = /etc/samba/smbpasswd 存放samba帐户密码的文件
local master = yes samba服务器可以成为本地主浏览器
os level = 33 samba服务器的管理等级
domain master = yes 该服务器成为域浏览器
preferred master = yes 该服务器成为工作组中的首要主浏览器
#================================= Share Definitions ==============================
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
create mode = 0664
directory mode = 0775
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
[document]
comment = daweicheng's document
path = /tmp/document
read only = yes
public = yes
[samba user guest]
comment = guest
path = /tmp/samba
read only = no
guest account = guest
简单介绍一下这里的几个参数:
comment=xxx 共享注释,即共享时对方主机能够看到的文件夹名称
path=/xxx/.../xxx/ 共享的目录
read only= yes 只读属性设定
public = yes 公开属性,任何人可以看见该资源,无须帐号
guest account = xxx 访问者的帐户名
如果你希望任何人都可访问共享资源
将Global Settings的安全级设定为: security = share
共享目录参数需要: public = yes
如果希望某些目录只有特定的用户访问
则要将Global Settings的安全级应设定为: security = user
共享目录参数需要: guest account = xxx
这个xxx用户(下例中是NewUser)是用useradd和smbpasswd创建的:
添加samba用户: useradd NewUser
设定NewUser的samba密码: smbpasswd -a NewUser
使NewUser可以使用samba服务: smbpasswd -e NewUser
testparm可以验证/etc/samba/smb.conf的有效性,回车后会显示samba的参数设定 。设定无误后,重启smb服务,并打开iptables中的tcp 139端口,在/etc/sysconfig/iptables中加入:
#smb(samba)
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 139 --syn -j ACCEPT
(加入的位置在REJECT规则之前) 然后service iptables restart 重启iptables服务
查看其他主机的共享资源:
smbclient -L WindowsHostName :WindowsHostName就是对方的windows主机名
smbclient //WindowsHostName/ShareName
可以访问对方主机上的ShareName共享文件夹,也可以是:
smbclient //xxx.xxx.xxx.xxx/D$ :xxx.xxx.xxx.xxx表示对方的ip,D$是对方主机D盘的默认共享名称
如果访问的资源需要用户名和密码,可以加入-U参数,如:
smbclient //xxx.xxx.xxx.xxx/D$ -U UserName :然后按提示输入密码,登录后会得到一个提示符。
挂载共享驱动器:
可以用smbmount或者mount命令
smbmount的例子:
smbmount //WindowsHostName/ShareName /mnt
这样就将ShareName下的内容挂载在/mnt下了
也可以用mount命令,例子:
mount -t smbfs -o username=xxx //xxx.xxx.xxx.xxx/D$ /mnt/
如果不正确显示中文,可以在-o参数后加入codepage=936,iocharset=cp936 即:
mount -t smbfs -o username=xxx,codepage=936,iocharset=cp936 //xxx.xxx.xxx.xxx/D$ /mnt/
卸载共享目录的命令是umount
在windows中访问samba服务器,可以用网上邻居或者在"运行"中直接输入xxx.xxx.xxx.xxx即可
配置samba也可用redhat-config-samba或SWAT
使用SWAT需要先设置一下:
将/etc/xinetd.d/swat中的disable = yes设定为disable = no
service xinetd restart :重启xinetd服务
/sbin/chkconfig swat --level 35 on :在运行级3,5下让swat服务开机自动加载 。
swat : on表示swat服务已经开启了,在web浏览器中输入
http://localhost:901
以root身份进入配置 界面,就可以对smb.conf进行设置了.
Samba配置文件
samba只有一个配置文件!
[global]
printing = bsd
printcap name = /etc/printcap
load printers = yes
guest account = pcguest
log file = /usr/local/samba/log.%m
[tmp]
comment = Temporary file space
path = /tmp
read only = yes
public = yes
如果你用这个配置文件来运行samba,在你的局域网上头,那些windows机器就可以在他们的网络邻居里面发现一个叫做(你的linux机器的名字)的机器共享了一个temp目录出来,而且可以写入。
配置文件,“高级”参数 ,首先我们来看看这些参数:
[global]
netbios name:
你可以指定你samba服务器的netbios名字。通过windows机器的网络邻居可以看到这个名字。如果你没有特别指定,Linux将会使用它自己的网络名作为netbios名。
invalid users: 不允许访问samba的用户名列表。比如“root”不应该被允许访问samba。
interfaces: 如果你的Linux服务器有一张以上的网卡,同时你希望限制只有一个网络可用。
security: 可用的安全模式。如果使用security=user将会要求每个用户都在GNU/Linux服务器上拥有一个账号.如果你不需要samba服务器管理用户,同时打算让所有人是用同样的共享资源,可以设为:security=share
workgroup: 你的linux服务器所在的工作组名字。
server string: 你的Linux机器的简单描述(一些字符串)。
socket options: 用来调节samba服务器,并且让他快些的选项列表。视情况而定。
encrypt passwords: 必须使用加密口令么?必须了解到,(几乎)每个windows系统都会有不同的搞法!
wins support: 你的Linux服务器需要以wins方式工作?
os level: OS级别指定哪个服务器将成为域控制器(domain master),局部控制器(local master),等等。
domain master: 指定samba作为主域服务器
local master: 指定samba作为local master server
preferred master: 如果有其他服务器存在的话,Samba是否会是首选的一个?
domain logons: Samba可以管理整个域的连接控制么?
logon script: 当此用户开始一次会话时运行哪个脚本?
logon path: 启动脚本文件在什么地方?
logon home: 在何处存放用户profile?
name resolve order: 以怎样的顺序使用资源顺序以查询网络内机器名字?
dns proxy: Samba服务器是否同时也被用作DNS代理服务器?
preserve case: 保持文件名的大小写情况。
short preserve case: 保持文件名的大小写情况。
unix password sync: 是否需要同步Unix和windows的口令?
passwd program: 用哪个程序更动口令。
passwd chat: 用什么“协议”更动口令。
max log size: log文件的最大尺寸。
Section [netlogon] 指定netlogon在哪里。
Section [profiles] 用户profile文件部分。
Section [homes] 用户Home目录。
Samba 变量
变量 说明 客户端变量
%a 客户端体系:比如: Win95, WfWg, WinNT, Samba ...
%I 客户端IP地址
%m 客户端NetBios名
%M 客户端DNS名 用户变量
%g 用户%u 主要组
%H 用户%u home 目录
%u Unix 当前用户名 共享变量
%P 当前共享的根目录
%S 当前的共享名 服务器变量
%h Samba服务器的DNS名字
%L Samba服务器的Netbios名字
%v Samba版本 其他变量
%T 当前日期和时间
使用这些变量的例子:如果你的网络内有一些机器分别运行windows 3.11和windows98,你可以创建两个配置文件,为每种系统使用一个,那么可以使用%a变量。
结果: 我们的配置文件
[global]
printing = bsd
printcap name = /etc/printcap
load printers = yes
guest account = nobody
invalid users = root
; 改掉它的netbios名
netbios name = pantoufle
; 它监听的网络
; (你不需要他在另外一个网络上面也进行服务,因为那个是因特网联接)
interfaces = 192.168.0.1/255.255.255.0
; security user表示每个用户都必须在这个server上面拥有一个Unix账号
security = user
; 这个机器属于哪个工作组
workgroup = rycks
; 服务器的简单说明,当察看细节的时候可以看到
; %h 是服务器的DNS名字,%v samba的版本号
server string = %h server (Samba %v)
; 我们使用samba自己的log文件,不仅仅使用syslog
syslog only = no
; 至少重要的信息应当写到syslog去,
; 其他信息会写到 /var/log/smb(nmb)/
syslog = 0;
; 嗯,调整一下性能!
socket options = IPTOS_LOWDELAY TCP_NODELAY
SO_SNDBUF=4096 SO_RCVBUF=4096
; 使用加密过的口令哦,注意了,
; 每个W95客户端都要打上 MS SMB 安全补丁。
; NT4 必须打上 SP3 或者更高补丁
; 我不记得W3.11的情况了:很有可能它并不支持加密口令
encrypt passwords = yes
; 这个server同时也是WINS 服务器。
; WINS 允许两个网络使用不同的ip段比如 192.168.0.0/255.255.255.0 和 192.168.0.1/255.255.255.0
; 互相察看"另外" 网络的共享资源,一旦网关gateway激活。
wins support = yes
; OS 级别。比如我们的server是域控制器,本地登录,诸如此类
; 如果网络里面有一个NT服务器的话,我们的级别应该"更高" 。
os level = 34
; 域管理
domain master = yes
local master = yes
preferred master = yes
; 域连接管理
domain logons = yes
; 当有用户登录时,运行什么脚本? %g 指向用户所在的主要组
logon script = %g.bat
; 在什么地方可以找到我们的脚本? %L 是samba服务器的netbios名
logon path=%L etlogon
; 在什么地方存放用户的profile? %U 用户的登录名
logon home=%L%Uwinprofile
; 以何种方式检查资源以查找该机器名字
name resolve order = lmhosts host wins bcast
; 是否Samba必须用DNS proxy的方式运作?
dns proxy = no
; 保留其文件名和大小写
preserve case = yes
short preserve case = yes
; 我们必须同步windows和Linux的口令么?
unix password sync = yes
; 如何同步口令
passwd program = /usr/bin/passwd %u
passwd chat = *EntersnewsUNIXspassword:*
%n *RetypesnewsUNIXspassword:* %n .
; Log文件的最大尺寸, 防止/var 目录爆掉 :p
max log size = 1000
; 我们是时间服务器:用来同步各个机器的时间, 通过登录用.bat文件来使用这一特性。
time server = yes
; 指定netlogon所在位置。 这只会在登录时使用到, 因此我们不必让它公开。
[netlogon]
path = /home/netlogon/%g
public = no
writeable = no
browseable = no
; 每个用户的Home目录
[homes]
comment = Home Directories
browseable = no
read only = no
; 默认的Unix umask.
create mask = 0700
; 基于安全目的,该目录被设定为700
directory mask = 0700
; 共享FTP,这样可以不用特别的客户端就能在网络邻居里面使用了
[ftp]
path = /home/ftp/pub
public = yes
printable = no
guest ok = yes
; 临时目录
[tmp]
path = /tmp
public = yes
printable = no
guest ok = yes
writable = yes
; 另外的一个临时目录, 提供给特定的需要特别多空间的用户
[bigtemp]
path = /home/bigtemp
public = yes
printable = no
guest ok = yes
valid users = erics
writable = yes
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/18929/showart_116397.html |
|