今天写第一篇技术日记:Samba服务器配置知识
用了我几个小时的时候写这东东:唉,究竟还得承认自己差得很.....
概述:
Samba起源于Linux与Windows之间的通信需求,早期Linux与Windows两大工作平台之间不能直接"沟通",像拷贝文件这样的操作只能通过"移动媒体"来实现,即使是在Linux与Windows共存的网络中.这样给共享网络之间的通信带来了不方便性,加之Linux本身具有安全、稳定、价格低廉的特点,使Linux用户在数量上不断增加,为解决它们直接通信的问题,人们开发出一种能够在两种平台直接通信的"工具",它的名字叫SMB(Server Message Block),它是运行在Linux与Unix之上的免费共享服务的软件,是典型服务器/客户端模式,它有两个进程,一个是smbd,主要是用来管理共享文件的进程,另一个是nmbd,用来实现主机名到IP地址的转换(想当于Windows下的NetBIOS的功能),smbd运行在TCP的139、445端口,nmbd则运行在UDP的137、138端口(运行samba服务后可以用如:netstat -anp | grep smbd、netstat -anp |grep nmbd来查看它开放的端口号),如果不运行nmbd进程则客户端只能通过IP地址来访问samba服务器了!
作用:
文件及打印共享服务:根据服务的配置情况分发共享的文件与打印机
计算机名与IP的解析服务:可以在客户端直接输入Samba服务器名字就能访问到Samba共享的文件或打印机
WINS服务的支持:
LMB服务的支持:
身份验证与访问权限设置(如果配合Linux的Quota还可以实现用户磁盘空间配额):可以根据企业要求灵活设置相应的安全级别
原理:
不会:)
安装Samba所需的包:
安装samba相关组件(注:本人所安装的RHEL5系统):
samba-common-3.0.23c-2 它是samba通用库文件和工具包
samba-3.0.23c-2 这个是samba的主程序包
samba-client-3.0.10-1.4E.2.i386.rpm samba在Linux|unix下的客户端包文件(可选)
system-config-samba-1.2.39-1.el5 这个是图形界面的samba服务配置包文件(可选)
samba-swat-3.0.23c-2 这个包提供本地、远程利用浏览器来配置samba相关服务(可选)
安装过后还必须指出共享文件所在的路径、权限等相关信息,同时别忘记了启动samba服务:),呵呵!
启动samba:
1、/etc/rc.d/init.d/smb start
2、service smb restart (别把samba服务名smb写成smbd,这也是新手容易犯的错误之一,smbd是它的进程名称),建议用前一种方法(可以避免有时当黑客运行别名指向别一个程序的危险,虽然很少有,呵呵)
start 启动服务
stop 停止服务
restart 重启服务
status 查看服务状态
reload 重装载配置文件(Linux一切的服务都是基于配置文件工作的)
开机自动启动:
1、chkconfig --level 345 smbd on
   --level 运行级别(可以在/etc/inittab里看到相关解释)
   smbd 为进程名
   on 表示打开自动启,相反off为关闭自动启动
2、ntsysv  在里面找到smbd按空格选中,再OK退出即可
查看samba是否成功启动:
1、service smbd status 查看运行状态
2、netstat -anp |grep 137 查看是否开启了相应的端口及是否为samba程序开启的
   netstat -anp |grep 138
   netstat -anp |grep 139
   netstat -anp |grep 445
3、netstat -ap |grep smbd  查看samba是否在运行
配置文件:
samba的配置文件存放在/etc/samba/下面,叫smb.conf。它的注释较多,不过没有中文的:),看不懂就查字典(我也是这样的),它指定需要共享的文件目录、目录共享权限(记住:它也受本地权限限制的啊)、访问日志名称与路径等.它分成两大部分,一是Global Settings, 用来指全局设置的变量,如安全级别等,对整个服务器生效,另一个是对Shared Definitinos,说明共享相关的定义,它以"#"开头为注释行,也有以";"开头的配置范例行,默认是不生效的,如果想设置该行生效,可以把";"去掉即可!
常用的配置选项说明:
[Global] 配置文件必须以[Global]开头(别忘了"["   "]"啊),它说明全局说明的开始;
workgroup = WORKGROUP 指明共享所在的工作组,可以是NT域名、工作组名
server string =Samba Server 客户端看到的服务器的描述信息
netbios name = share file of samba Windows下看到的netbios信息,默认是没有给出的,要使具用此描述,必须手动添加
hosts allow = 192.168.2. 192.168.1. EXCEPT 192.168.1.10   允许192.168.2.0段和192.168.1.0段访问,但192.168.1.10主机除外(注意:多网段时要用空格隔开)
hosts deny = 192.168.2.10 拒绝192.168.2.10访问(注意:与上一个同时使用时,deny优先生效)
interfaces = 192.168.2.10 当服务器有多个网络接口时,可以指定samba监听端口,默认监听全部端口的访问
smb passwd file = /etc/samba/smbpasswd 指定samba的密码文件所在位置
username map = /etc/samba/smbusers 指定账号映射文件的位置,它是提高安全性的方法,可以防止系统用户直接暴露出来
log file = /var/log/samba/%m.log 默认的日志文件,%m是以主机名称来分别记录日志
max log size = 50 默认日志大小为50K
include = /etc/samba/smb.conf.%U 加入以用户为控制单位的配置文件
include = /etc/samba/smb.conf.%G 加入以组为控制单位的配置文件
security = share | user | server | domain | ads samba系统的安全级别
share安全级别模式,不需要输入用户和密码就可以访问共享资源
user安全级别模式,客户端登录samba服务器,需要提交合法帐号和密码,经过服务器验证才可以访问共享资源
server安全级别模式,客户端需要将用户名和密码,提交到指定的一台samba服务器上进行验证,如果验证出现错误,客户端会用user级别访问
domain安全级别模式,如果samba服务器加入windows域环境中,验证工作服将由windows域控制器负责,domain级别的samba服务器只是成为域的成员客户端,并不具备服务器的特性,samba早期的版本就是使用此级别登录windows域
ads安全级别模式,当samba服务器使用ads安全级别加入到windows域环境中,其就具备了domain安全级别模式中所有的功能并可以具备域控制器的功能
guest account=aaaa 让用户aaaa以匿名身份登录,请确保/etc/passwd有此用户
Socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192  设置服务器和客户之间会话的Socket选项,此项设置将优化传输速度。
admin user = wuzh  指时wuzh就是samba服务的管理员(好象有时候会说是无效参数啊)
---------Share Definitions--------
[public]  中括号里是共享文件名
commont = share director of admin 共享的描述信息
path = /pub  共享文件路径
public = yes|no  是否可以匿名访问
browseable = yes|no 是否出现共享文件名
read only = yes|no 是否只读
writable = yes|no  是否可写
write list = 用户名,用户,@组名 设置可读权限的用户
valid users = 用户名或@组名 设置有效用户
invalid users = 用户名或@组名 设置无效用户
create mask = 0744                设置创建文件时的权限
directory mask = 0755             设置创建目录时的权限
打印机共享,这个我用不上,现在的打印机都自带网卡了):
load printer = yes
printcap name = /etc/printcap
printing = cups
添加samba用户,因为samba用户是基于系统用户的,所以必须先建立系统用户才能添加成samba用户
useradd -s /sbin/nologin smbtest
smbpasswd -a smbtest
输入两次samba密码即可
smbpass常用选项:
smbpasswd -h 列出帮助信息
smbpasswd -a 添加用户
smbpasswd -x 删除现有的samba用户
smbpasswd -n 删除现有的samba用户密码
smbpasswd -d 禁用现有的samba用户
smbpasswd -e 启用已禁用的samba用户
批量把系统用户转换成smbpasswd密码文件:
cat /etc/passwd |mksmbpasswd.sh > /etc/samba/smbpasswd
smbpasswd 密码文件存放在/etc/samba/smbpasswd里,格式如下:
wuzh:500:561B1EBD1E1C9095AAD3B435B51404EE:5573EACDA2E72CD8CE6E8C433286B800:[U]:LCT-4325DFBD:
为提高安全性一般可以设置如下参数:
socket address = 192.168.2.126 指定监听地址
username map = /etc/samba/smbusers 设置映射账号文件
hosts allow 指明允许访问的地址(网段以"."结束)
hosts deny 明确指出拒绝的地址
smb passwd file 指出密码文件位置
security 设置安全级别
encrypt passwords 以加密的方式访问samba服务器
smbusers文件格式如下:
系统用户名=映射的虚拟账号1,映射的虚拟账号2,...

testparm 是测试smb.conf是否有错误的好用工具,直接testparm就可以显示相关信息了,相当简单
客户端测试:
smbclient //服务器/共享名 -U 用户名%密码
挂载:mount -t cifs //目标/共享名 /本地挂载目录 -o username=用户名%密码
例子:
企业里有hr、sal、pro、sal四个部门,每个部门有自己的共享文件夹,且不能互访。要求有一个公共文件夹供大家临时存放文件
[grobal]
workgroup=workgroup
server string=the server of samba
log file=/var/log/samba/%m.log
max log size=50
interfaces=192.168.2.126
hosts allow=192.168.2. EXCEPT 192.168.2.254
username map=/etc/samba/sambauser
smb passwd file=/etc/samba/smbpasswd
security=user
[public]
path=/share/public
public=yes
browseable=yes
writable=yes
valid users=@smb_man
[hr]
path=/share/hr
public=yes
browseable=yes
valid users=pmc_hr
write list=pmc_hr
[sal]
path=/share/sal
public=yes
browseable=yes
read only=no
vaild users=smb_sal
writable=yes
[pro]
path=/share/pro
public=yes
browseable=yes
read only=no
vaild users=smb_pro
writable=yes
[pmc]
path=/share/pmc
public=yes
browseable=yes
read only=no
vaild users=smb_pmc
writable=yes
groupadd smb_man
useradd -g smb_man -M -s /sbin/nologin smb_pmc
useradd -g smb_man -M -s /sbin/nologin smb_sal
useradd -g smb_man -M -s /sbin/nologin smb_hr
useradd -g smb_man -M -s /sbin/nologin smb_pro
useradd -g smb_man -M -s /sbin/nologin smb_man
smbpasswd -a smb_pmc
smbpasswd -a smb_sal
smbpasswd -a smb_hr
smbpasswd -a smb_pro
smbpasswd -a smb_man
mkdir -p /share/pub
chown smb_man:smb_man /share/pub
chmod 770 /share/pub
mkdir -p /share/pmc
chown smb_pmc:smb_man /share/pmc
chmod 700 /share/pmc
mkdir -p /share/sal
chown smb_sal:smb_man /share/sal
chmod 700 /share/sal
mkdir -p /share/hr
chown smb_hr:smb_man /share/hr
chmod 700 /share/hr
mkdir -p /share/pro
chown smb_pro:smb_man /share/pro
chmod 700 /share/pro
在/etc/hosts.allow里加入:
smbd:192.168.2.0/255.255.255.0:allow
nmbd:192.168.2.0/255.255.255.0:allow
在/etc/hosts.deny里加入:
smdb:all:deny
nmdb:all:deny
另外,还可以使用虚拟用户的方式访问(防止实体用户外泄,提高安全性):
vi /etc/samba/smbuser
smb_pmc=pmc
smb_sal=sal
smb_hr=hr
smb_pro=pro
密码还是上面smbpasswd执行时的密码