samba

samba
 

samba服务只要是为了实现linux主机提供一种类似于windows的网上邻居的功能。

windows提供网络共享主要是通过SMB/CIFS协议实现的

smb à service message block

cifs à common internet filesystem

windows在一个局域网中通过netbios来实现的名字解析,以此来实现在局域网中没有DNS的情况下主机间共享文件。

linux/unix中实现文件共享的方法是NFS,但如果在linuxwindows之间共享问价的话就有点困难了

要想实现让两个系统之间来共享文件,就出现了samba服务,来共享linux中的文件夹,让windows可以挂载。

samba共有三个进程 smbdnmbdwinbindd

smbd 实现文件共享

nmbd 通知windows的网上邻居自己的主机名,有点类似于netbios的功能

winbindd linux假如windows域中会启动此进程

协议端口 137,138,445

 
软件包

samba-clientsamba-commonsamba,其中前两个是作为客户端的工具,而samba则是作为服务器的软件包。还有个辅助软件包samba-swat用来实现通过web的方式来管理samba服务

 
服务的脚本/etc/init.d/smb
主配置文件/etc/samba/smb.conf

port 137/udp(netbios)138/udp(netbios) 139/tcp(netbios)445/tcpsmb服务)接受SElinux的控制

配置文件

接下来我们看一下samba的主配置文件其中分为三部分:[global][homes][printers]其中#开头的是注释内容,以;开头的是可以启用的内容

[global]定义全局配置,对后面的配置都是生效的,但后面的配置可以覆盖全局配置
[homes]定义用户是否能够访问其家目录

[printers] 是否共享打印机

语法测试testparm,同时可以显示生效的语法

比较重要的选项[global]中:

workgroup定义工作组(加入windows的工作组)

server string 服务器的描述

interfaces 监听的网卡地址或端口,默认会监听所有的端口和地址

host allow 允许的主机网段的地址

log file

同样在smb.conf中也存在宏如 %v 显示smb的版本号,%m访问客户机的主机名称。

max log size日志文件的大小,

security 安全级别(主要用于验证用户的方式),常见的share(共享,允许来宾账号随意访问),user(默认的,必须提供的smb的用户名和密码),domain(通过域的验证),server(服务器集中认证),ads(作为域控中通过Kerberos加密的集中验证身份)。

passdb backend 密码的加密方式,默认是tdbsam。一般smb的用户是系统的用户,但密码并不是系统的密码

load printers 是否加载打印机

[homes]中:

comment 注释信息

browseable 是否可以被其他用户看见

writable 是否可以上传(最终的权限取决于还有对目录的权限)

valid users 有效合法的用户

valid users

[printers]的选项(smb的最常用的选项):

command
path 共享的缓冲的打印机
guest ok 匿名用户是否可以访问

printable 是否可以打印,作为一个打印机这一项是必须yes

 

自定义一个共享:假如我们想共享/sharing 而且其目标显示为share其操作为:

1.          首先更改工作组[global]

2.          在主配置文件中添加如下内容

               [share]
                     comment=my share folder
                     path=/sharing
                     browserble=yes
                     guest ok=yes

3.          创建目录mkdir /sharing

4.          testparm

5.          启动服务 service smb start 通过查看端口 137,138,139,445就可以知道smb是否启动了

6.          提供用户和其密码,前面说过其账号是系统账号,但密码是自己有重新创建的,可以通过命令smbpasswd生成

 
 

smbpasswd

          -a USERNAME 添加用户

          -x USERNAME 删除用户

          -d USERNAME 禁用用户

          -e   USERNAME 启用账户

egsmbpasswd -a redhat 然后输入密码

其用户名存在于/etc/samba/smbusers文件中。在使用中先使用setenforce 0关闭SElinux

 

默认在windows中进入共享的文件夹有两个文件夹和一个共享打印机,在和登录用户名相同的文件夹中创建的文件,生成在用户的家目录中而在另一个目录中是没有写权限的,如果想要加上写权限,需在刚才的配置文件中添加writable=yes 同时让用户对/sharing有写权限,然后重启服务,就可以写文件了。

 

使用linuxsmb客户端使用命令smbclient

smbclient

    -L HOST(IP)列出主机上所有共享的资源,默认是以匿名用户访问的。可以同时使用-U指定用户名,以某个用户的身份来列出资源

    -U username%passwd

smbclient同时可以提供类似于ftp的登录方式,如:

smbclient //HOST/share -U username%passwd 来登录HOST上的共享的share文件夹,其操作完全类似与ftp

 
访问控制

对于samba的访问控制,通过定义hosts allow对允许的账户进行控制。切记,samba中对于一个网段的控制如192.168.0.0网段,我们只需要写192.168.0.就可以了

testparm还可以测试特定的主机的访问权限,命令的使用:testparm /etc/samba/smb.conf HOSTNAME(主机名称) IP 来显示远程主机对本主机对其的访问权限。还可以使用iptables对其进行控制。

对于访问控制除了writable外还有write list 可以指定对用户,对组(组名前加@+)用户与用户之间用空格隔开。

当打开SElinux时通过smbclient连接不上这时候我们执行命令chcon  -R -t samba_share_t /sharing/ 其意义为将这个文件夹在SElinux中类型改为samba_share_t这样就可以通过SElinuxshare目录的限制了,但这时用户有不能访问家目录了,还是由于SElinux的原因,通过命令getsebool命令可以查看,使用命令setsebool -P samba_enable_home_dirs=1来开启限制,这样就可以访问用户的家目录了。

挂载共享的目录

mount -t cifs //192.168.0.172/share /mnt -o username=redhat

linux中挂在时候用\\

 
 

关于samba-swat这是用来管理samba的程序,而且提供了web接口来管理,它通过tcp901端口来访问,默认是非独立守护进程而其只能通过127.0.0.1来访问 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章