samba服务只要是为了实现linux主机提供一种类似于windows的网上邻居的功能。
windows提供网络共享主要是通过SMB/CIFS协议实现的
smb à service message block
cifs à common internet filesystem
windows在一个局域网中通过netbios来实现的名字解析,以此来实现在局域网中没有DNS的情况下主机间共享文件。
在linux/unix中实现文件共享的方法是NFS,但如果在linux和windows之间共享问价的话就有点困难了
要想实现让两个系统之间来共享文件,就出现了samba服务,来共享linux中的文件夹,让windows可以挂载。
samba共有三个进程 smbd,nmbd,winbindd
nmbd 通知windows的网上邻居自己的主机名,有点类似于netbios的功能
winbindd 当linux假如windows域中会启动此进程
协议端口 137,138,445等
samba-client,samba-common,samba,其中前两个是作为客户端的工具,而samba则是作为服务器的软件包。还有个辅助软件包samba-swat用来实现通过web的方式来管理samba服务
port 137/udp(netbios),138/udp(netbios) ,139/tcp(netbios),445/tcp(smb服务)接受SElinux的控制
接下来我们看一下samba的主配置文件其中分为三部分:[global],[homes],[printers]其中#开头的是注释内容,以;开头的是可以启用的内容
[printers] 是否共享打印机
语法测试testparm,同时可以显示生效的语法
比较重要的选项[global]中:
workgroup定义工作组(加入windows的工作组)
server string 服务器的描述
interfaces 监听的网卡地址或端口,默认会监听所有的端口和地址
host allow 允许的主机网段的地址
同样在smb.conf中也存在宏如 %v 显示smb的版本号,%m访问客户机的主机名称。
max log size日志文件的大小,
security 安全级别(主要用于验证用户的方式),常见的share(共享,允许来宾账号随意访问),user(默认的,必须提供的smb的用户名和密码),domain(通过域的验证),server(服务器集中认证),ads(作为域控中通过Kerberos加密的集中验证身份)。
passdb backend 密码的加密方式,默认是tdbsam。一般smb的用户是系统的用户,但密码并不是系统的密码
load printers 是否加载打印机
在[homes]中:
browseable 是否可以被其他用户看见
valid users 有效合法的用户
valid users
[printers]的选项(smb的最常用的选项):
printable 是否可以打印,作为一个打印机这一项是必须yes的
自定义一个共享:假如我们想共享/sharing 而且其目标显示为share其操作为:
1. 首先更改工作组在[global]中
2. 在主配置文件中添加如下内容
3. 创建目录mkdir /sharing
4. testparm
5. 启动服务 service smb start 通过查看端口 137,138,139,445就可以知道smb是否启动了
6. 提供用户和其密码,前面说过其账号是系统账号,但密码是自己有重新创建的,可以通过命令smbpasswd生成
smbpasswd
-x USERNAME 删除用户
-d USERNAME 禁用用户
-e USERNAME 启用账户
eg:smbpasswd -a redhat 然后输入密码
其用户名存在于/etc/samba/smbusers文件中。在使用中先使用setenforce 0关闭SElinux
默认在windows中进入共享的文件夹有两个文件夹和一个共享打印机,在和登录用户名相同的文件夹中创建的文件,生成在用户的家目录中而在另一个目录中是没有写权限的,如果想要加上写权限,需在刚才的配置文件中添加writable=yes 同时让用户对/sharing有写权限,然后重启服务,就可以写文件了。
使用linux的smb客户端使用命令smbclient
smbclient
-L HOST(IP)列出主机上所有共享的资源,默认是以匿名用户访问的。可以同时使用-U指定用户名,以某个用户的身份来列出资源
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这样就可以通过SElinux对share目录的限制了,但这时用户有不能访问家目录了,还是由于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接口来管理,它通过tcp的901端口来访问,默认是非独立守护进程而其只能通过127.0.0.1来访问