在国内,不论是大企业还是小公司,都使用windows操作系统作为桌面操作系统来办公。工作时,大家难免要传递一些共享文件。这样文件共享服务器就诞生了。虽然用windows也可以作文件共享服务器,但是三天两头的重启服务器,谁都会受不了的。今天我们就来了解一下Linux下的开源文件服务器Samba。
获取和安装Samba
Samba是目前Linux/UNIX与windows之间共享文件最流行的软件。因此,大部分Linux发行版都已经自带了Samba的安装包,我们可以通过不同发行版的检测命令来检查当前系统是否已经安装了Samba,这里以Centos 5.5 x64环境来为大家讲述如何使用Samba。
检查当前系统中是否安装了Samba:
# rpm -qa|grep samba
如看到如下图所示,说明你已经安装了Samba。
如果你没有看到如上信息,说明你在安装系统的时候没有安装Samba。那你就需要光在光盘,然后安装Samba。
# mount -t iso9660 /dev/cdrom /mnt/
# # rpm -ivh /mnt/CentOS/samba-3.0.33-3.28.el5.x86_64.rpm
直接安装rpm包唯一不足的地方是,你需要解决麻烦的依赖关系。如下图所示:
所以建议你最好使用YUM来安装。
# yum -y install samba
它会为你解决麻烦的依赖关系。如下图所示:
正在下载安装。
你也可以使用源码包来安装Samba。
# wget
http://www.samba.org/samba/ftp/stable/samba-3.6.1.tar.gz 获取源码包
# tar zxvf samba-3.6.1.tar.gz 解压缩
# cd samba-3.6.1 进入解压目录
# find ./ -name configure 这里的configure并不在解压出来的根目录。所以需要查找一下它的位置。
# cd source3 进入configure所在目录
下面可选参数大家以实际环境为准来设定。
# ./configure --prefix=/usr/local/samba 指定安装路径
--enable-cups 开启CUPS打印系统的支持,默认自动检测。如果系统安装了CUPS开发库,那么就会自动打开该系统的支持
--enable-iprint 开启iPrint支持,如果支持CUPS,那么这个是默认打开的。
--with-ldap 开启LDAP支持,默认开启,如果想将Samba与其它一些系统认证集成到一起,LDAP是个不错的选择,同样需要系统中安装有LDAP开发库
--with-ads 开启微软活动目录支持,默认为自动检测,当系统中存在Kerberse开发库时,会打开这个选项
--with-smbmount 是否包含smbmount命令,默认是不包含的
--with-cifsmount 是否包含cifsmount支持以加载CIFS文件系统,默认包含
--with-pam 是否启用PAM支持,默认不支持,但建议打开这个选项,这个选项也需要系统中存在PAM的开发文件
--with-quotas 是否支持磁盘限额,默认不支持,但如果为用户提供空间,那么最好打开限额的支持
--with-utmp 是否开启utmp审计,utmp审计会记录用户登录、退出等操作,默认为支持。
--with-acl-support 是否支持ACL访问控制,默认为不支持,但最好打开
--with-aio-support 是否支持异步I/O模式,默认为不支持,异步I/O可以提高性能,但一旦系统出现故障,可能导致部分数据丢失
--with-winbind 是否支持Winbind,Winbind是一种与Windows集成的方式
# make && make install 编译并安装
Samba的进程和常用命令
- nmbd 这个进程为Windows网络提供NetBIOS Name Service和WINS服务,也就是支持Windows资源列表和浏览功能。
- smbd 这个进程用来提供共享功能,同时对共享请求进行认证。
- smbpasswd 相当于adduser、passwd。Samba使用它来对计算机域账号和用户账号进行管理。
-a 只有root用户可以使用。添加用户到Samba密码文件,如果用户已经存在,它会认为是修改用户密码而不是添加用户
-c 指定不同的配置文件
-d 临时禁止某个用户,参数为用户名
-e 激活某个用户
-x 永久删除某个用户
-n 在添加或修改用户时,加上这个参数,smbpasswd将不提示输入密码,而直接把密码设置为空
-r 修改远程计算机上的密码
-U 当修改远程密码时,使用这个参数指定连接到远程机器时的用户名
-w 当Samba把LDAP作为账号和密码后台时,把这个参数后面指定的字符串作为LDAP服务器连接的密码
-W 与-w类似,不同的是,-W会提示用户输入密码,而不是读取字符串
-i 使用这个参数时,如果Samba是域的PDC,那么添加一个信任域账号,以这个信任域账号与其他域建立信任关系
-R 指定smbpasswd查询名字时的顺序
-m 告诉smbpasswd当前处理的不是一个用户账号,而是一个计算机域账号
- testparm 这个命令用来检查smb.conf的配置语法是否正确。
-s 自动模式,使用这个参数时,不会提示用户输入回车,就直接打印配置文件信息
-t 以不同的编码格式输出信息,默认是当前的编码环境
--parameter-name 打印指定的配置选项,例如:testparm --parameter-name “workgroup”
--section-name 打印指定的小节内容,例如:testparm --section-name software
-v 打印出当前Samba版本支持的配置选项及默认值
- smbstatus 显示当前Samba服务器的状态
- smbclient 是一个可以模拟Windows客户端同时具有Samba特点的小工具,它可以访问Winddows或Samba共享
-L 指定要访问的共享的IP地址或主机名
-N 不提示输入密码
-U 指定要使用的访问账号
以FTP方式访问共享:smbclient //192.168.1.10/software -N
- net 大致跟Windows系统的net一样
- tdbdump:打印 TDB 文件的内容
- tdbbackup:备份并验证 TDB 文件
- tdbtool:创建、查看并修改 TDB 文件
Samba的基本配置
smb.conf是Samba的主配置文件。对于随发行版一起安装的Samba来说,这个配置文件的路径是是/etc/samba/smb.conf。
对于源码编译安装的Samba来说,配置文件就取决于编译者的设置了。假如我们将Samba安装到/usr/local/samba/目录,默认是不会安装smb.conf配置文件的,需要我们手工在/usr/local/samba/lib/目录下创建smb.conf。
或者我们可以这样拷贝一个smb.conf配置文件:
# cp /root/samba-3.6.1/examples/smb.conf.default /usr/local/samba/lib/smb.conf
smb.conf主配置文件由两个部分组成,第一部分是全局([global])选项,控制了整个Samba服务器的行为,第二部分是各种共享的配置,以[共享名]小节区分。
我们先来了解一下smb.conf的各个参数:
全局部分[global]有
- workgroup 工作组名称。
- server string 主机说明字符串
- hosts allow 可访问此服务的IP范围
- hosts deny 拒绝访问此服务的IP范围
- interfaces 如果有多个网络接口,就必须在这里指定
- unix charset Samba所在的Linux计算机上所使用的字符编码
- dos charset Windows计算机浏览Samba共享时,Samba显示时使用的字符编码
- security 文件共享安全级别,可选项有share、user、server、domain
- encrypt passwords 是否使用加密密码
- log file 设置Samba服务器的日志文件
- max log size 设置日志文件的最大容量,默认为50,默认单位是KB
- usermap name 指定名称映射文件路径
共享部分[share]有
- path 指定要共享的目录的路径
- comment 针对要共享的目录的说明
- read only 指定共享是否为只读,可以使yes|no或者true|false。当这个共享设置为只读时,所有windows共享用户都不能写入,注意一个共享是否只读不光取决于Samba的设定,同时还取决于该共享的真实目录的权限。
- writable 指定共享目录是否可写,与read only作用相反。当二者冲突时,以后一个设定为准。
- browseable 是否在浏览资源时看见该共享,默认为yes。
- create mask 创建文件时的默认权限
- directory mask 创建目录时的默认权限
- valid users 有效用户,只有被许可的有效用户才能访问共享
- write list 具有写入权限的用户列表
- guest ok 是否允许来宾访问
Samba的变量
- Samba有很多不同的变量,这些变量可以帮助我们完成一些动态显示。
- %U 表示当前用户名
- %G 当前用户的主要组
- %h Samba所在的Linux主机名
- %m Windows访问者的计算机主机名。当Samba通过445与用户连接时,不能提供这个变量的显示。
- %L Samba计算机的netbios名字,即[global]中设置的netbios name。不过当Windows客户端不能解析该名称时,将显示服务器的IP地址。
- %M Windows客户端的主机名,如果没有则显示IP地址。
- %R 双方通信的协议级别,可能是CODE、COREPLUS、LANMAN1、LANMAN2、或NT1
- %d 为当前请求提供服务的进程ID
- %a 客户端机器的类型,例如:Win95、Samba、OS2、WinNT、Win2K3
- %I 客户端IP地址
- %i Samba服务器IP地址
- %T 当前日期和时间
- %D 当前用户所在的域或工作组
- %$ Samba服务器的环境变量
- %S 当前服务名,例如用户正在浏览资源,则这个%S就是$IPC
- %P 当前服务的根目录
- %u 当前服务中的用户名
- %g 当前服务中的用户所在主要组
- %H %u用户所在的家目录(注意是Linux系统用户和目录)
建立一个可匿名访问的文件共享服务器
配置Samba主配置文件
# vi /usr/local/samba/lib/smb.conf
[global]
workgroup = workgroup
server string = Samba server
security = share
[software share]
path = /var/software
comment = "Shared Software"
read only = yes
guest ok = yes
配置动态链接库路径
# vi /etc/ld.so.conf
将Samba要用到的链接库路径加入到ld.so.conf:
/usr/local/samba/lib/
# ldconfig 重新载入链接库信息
检查Samba是否配置正确
# /usr/local/samba/bin/testparm
如果没有什么错误提示,我们就可以尝试启动服务了。
建立共享目录和创建测试文件
# mkdir –p /var/software
# cd /var/software
# touch test1
启动Samba服务
# /usr/local/samba/sbin/nmbd start
# /usr/local/samba/sbin/smbd start
检查Samba服务的监听状态
# netstat -anput|grep mbd
使用Linux主机访问Samba
使用Windows主机访问Samba
注意:如果您不能正常访问,很可能是防火墙的问题,请检查。
建立一个比较安全的文件共享服务器
配置Samba主配置文件
# vi /usr/local/samba/lib/smb.conf
[global]
workgroup = workgroup
server string = Samba server
security = user 提升用户级别为user
hosts allow = 192.168.1. 192.168.81. 指定可访问共享的IP范围
username map = /usr/local/samba/lib/smbusers 指定用户映射文件路径
[software]
path = /var/software
comment = "Shared Software"
read only = no
public = no 设置访问非公开
vaild users = test,@root 指定有效的用户和用户组
write list = root 具有写入权限的用户
directory mask = 0744 指定创建目录的默认权限
create mask = 0600 制定创建文件的默认权限
添加可用用户
# useradd test
# /usr/local/samba/bin/smbpasswd -a test
# /usr/local/samba/bin/smbpasswd -a root
这里test和root用户的samba密码都是testsamba
拷贝用户名称映射文件
# cp /root/samba-3.6.1/packaging/RHEL-CTDB/setup/smbusers /usr/local/samba/lib/
启动Samba服务
# /usr/local/samba/sbin/nmbd start
# /usr/local/samba/sbin/smbd start
使用Linux主机访问Samba
使用Windows主机访问Samba
到此Samba的搭建、配置、应用就告一段落了。。