Samba是Linux、Unix与Windows之间进行交互操作的软件组件,Samba是基于GPL协议的自由开源软件。自1992年以来,Samba开始通过SMB/CIFS协议为Windows、OS/2、Linux,以及众多其他支持该协议的操作系统提供安全、稳定、快速的文件与打印服务,在使用winbind将Linux/Unix无缝整合到活动目录环境中,Samba也是一个重要组件。
所需软件包括:Samba(服务器端软件包)、Samba-client(客户端软件包)和Samba-common(Samba公共文件软件包)。其中,Samba由smbd和nmbd两个守护进程组成,两个进程的启动脚本是独立的。smbd服务进程为客户端提供文件共享和打印机服务。另外,该进程还负责用户权限验证以及锁功能,smbd默认监听的端口是TCP协议的139与445,Samba通过smb服务启动smbd进程。nmbd进程提供NetBIOS名称服务,以满足基于Common Internet File System(CIFS)协议的共享访问环境。Samba通过nmb服务启动nmbd进程,该进程默认使用的是UDP137端口。
由于iptables与SELinux默认策略会阻止远程用户对Samba的访问,目前先暂时关闭这些服务,以确保共享服务的正常使用。
配置Samba文件服务器
1.关闭防火墙与Selinux
setenforce 0
sed -i “/SELINUX=/c SELINUX=disable” /etc/sysconfig/selinux
service iptables off
chkconfig iptables off
2.安装Samba软件
yum install -y samba
3.创建共享目录
mkdir /common
chmod 777 /common
echo “hello world” > /common/smb.txt
4.修改配置文件
vi /etc/samba/smb.conf,在文件末尾添加对common的共享设置。
[common] #共享名称为common
comment = common share #共享注释
path = /common #指定共享路径
browseable = yes #所有人可见
guest ok = no #拒绝匿名访问
writable = yes #支持写入数据
5.创建访问账号
客户端访问Samba共享时所使用的账户名称就是服务器操作系统中真实存在的系统账户,但不同于微软的共享设置,访问Samba共享的密码必须是独立的Samba密码,而不可以使用系统密码,这样即使有人获得了Samba账户和密码,也不能使用这些信息登录服务器本机的操作系统。所以,成功访问Samba服务器还需要使用smbpasswd命令将系统用户添加到Samba,并设置相应的密码。
useradd -s /sbin/nologin smbuser
smbpasswd -a smbuser
smbpasswd用法如下:
smbpasswd [选项] 账户名称
选项:-a 添加账户并设置密码
-x 删除SMB账户
-d 禁用SMB账户
-e 启用SMB账户访问Samba共享
客户端访问
1.windows客户端访问
通过“开始”-“运行”菜单或直接按win+R快捷键开启运行对话框,在该对话框中输入\\IP(其中的IP为Samba服务器的IP地址),单击“确定”按钮访问Samba共享,如果是基于用户名和密码的访问,系统会提示输入账户与密码,登录成功后可以看到Samba共享了两个目录,一个是common目录,另一个是smbuser账户的家目录。
2.Linux客户端访问
Linux客户端使用smbclient命令可以访问服务器上的共享资源。
yum install -y samba-client
smbclient -L //192.168.88.108 #查看192.168.88.108主机共享信息,不用输入密码,直接回车
smbclient -U smbuser //192.168.88.108/common
有时候,挂载Samba共享目录实现如本地文件系统一样的使用体验是很有意义的,使用root管理员身份运行mount命令可以挂载这样的文件系统,将挂载信息写入fstab文件可以实现永久挂载的目的。
mkdir /common
mount -t cifs //192.168.88.108/common /common -o username=smbuser,password=’password’
如果出现报错:
mount: block device //192.168.88.108/common is write-protected, mounting read-only
mount: cannot mount block device //192.168.88.108/common read-only
则:yum install -y cifs-utils
Samba配置文件详解
Samba所有的设置都在/etc/samba/smb.conf配置文件中进行,通过对配置文件的修改,可以将Samba配置为一台匿名文件服务器、基于账户的文件服务器或打印服务器,默认情况下,Samba会开启本地账号家目录共享与打印机共享,配置文件中以#或;开头的行为注释行,配置文件分为若干段,除了global(全局配置段)之外的其余所有段用来描述共享资源,全局段中的配置代表全局有效,是全局的默认设置。但如果全局配置段中的设置项与共享段中的设置项有冲突,则共享设置段中的设置为实际有效值。下面具体说明配置文件中各个配置选项的含义。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | [global] #定义全局策略 workgroup = MYGROUP #定义工作组 server string = Samba Server Version %v #服务器提示字符,默认显示为Samba版本,建议修改默认值以防止针对版本的网络攻击 ;interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 #通过interfaces选项指定Samba监听哪些网络接口 ;hosts allow = 127. 192.168.12. 192.168.13. EXCEPT 192.168.13.13 #hosts allow指定仅允许哪些主机有权访问Samba服务器资源,该参数可以放置在全局段 #也可以放置在共享段。与此相反的选项是hosts deny,用来设置黑名单列表,这里 #可以指定允许访问的主机名、IP地址或网段,当指定网段时可以使用192.168.12.或 #192.168.12.0/255.255.255.0两种格式,使用EXCEPT可以指定例外的IP地址 log file = /var/log/samba/log.%m #定义日志文件,因为使用了Samba变量%m,所以每个访问共享的主机都会产生独立的 #日志文件,%m会被替换为客户端的主机名。 max log size = 50 #定义日志单个文件最大容量为50KB security = user #设置security选项将影响客户端访问samba的方式,是非常重要的设置之一。security #可以被设置为user、share、server或domain,user代表通过用户名、密码验证访问者的 #身份,账户需要是服务器本机系统账户;share代表匿名访问;server代表基于验证身份 #的访问,但账户信息保存在另一台SMB服务器上;domain同样是基于验证的访问,账户信 #息保存在活动目录中 passwd backend = tdbsam #账户与密码的存储方式,smbpasswd代表使用老的明文格式存储账户及密码;tdbsam #代表基于TDB的密文格式存储;ldapsam代表使用LDAP存储账户资料 deadtime = 10 #客户端在10分钟内没有打开任何Samba资源,服务器会自动关闭会话,在大量并发访问环 #境中,这样的设置可以提高服务器性能 display charset = UTF8 #设置显示使用的字符集为UTF8 max_connections = 0 #设置最大连接数,0代表无限制,若设置该规则超过此限制的连接请求服务器将拒绝连接 guest account = nobody #设置匿名账号为nobody load printers = yes #是否共享打印机 cups options = raw #打印属性 [home] #共享名称 comment = Home Directories #注释,共享的描述信息 browseable = no #共享目录是否可以被浏览 writable = yes #共享目录是否可以进行写操作 [printers] #打印机共享 comment = All Printers path = /var/spool/samba #打印机共享池 browseable = no guest ok = yes writable = no printable = yes [common] #共享名称为common comment = common share #注释,共享描述信息 path = /common #指定共享路径 valid users = tom jerry #有效账户列表 create mask = 0750 #客户端上传文件的默认权限 directory mask = 0750 #客户端创建目录的默认权限 browseable = yes #共享目录是否对所有人可见 writable = no write list = tom #写权限账户列表,这里tom可写 admin users = tom #该共享的管理员,具有完全权限 invalid users = root bin #禁止root与bin访问common共享 guest ok = no #是否允许匿名访问,仅当全局设置为security=share有效 |