首页 > 代码库 > samba详解

samba详解

Samba详解 

原文  http://blog.csdn.net/seward_wang/article/details/12614263

samba-client.i386
samba-common.i386
samba.i386
samba-swat.i386

1、安装软件包
# yum install samba* -y

配置目录 /etc/samba

man smb.conf

# vim /etc/samba/smb.conf

[global]
        workgroup = MYGROUP
        server string = Samba Server Version %v
        security = user
        passdb backend = tdbsam
        load printers = yes
        cups options = raw

[homes]
        comment = Home Directories
        browseable = no
        writable = yes
[printers]
        comment = All Printers
        path = /var/spool/samba
        browseable = no
        guest ok = no   # <--- yes匿名可以访问,no拒绝匿名访问
        writable = no   # <--- yes 资源可以写,no只读
        printable = yes

[share]
comment = This is rhce testing
path = /common
browseable = yes # <---让资源可见
hosts allow = .example.com  # <---只允许example.com域下的用户访问
valid users = user1  # <---该资源只对user1用户有效,别的用户不能访问
writable = yes  # <--资源可写
2、创建目录并且修改selinux上下文

# mkdir /common
# chmod 775 /common

# chcon -R -t samba_share_t /common
# setsebool -P samba_export_all_ro on
或者
# setsebool -P samba_export_all_rw on

3、创建samba独立的帐号
注意:这些帐号必须是系统上本身就拥有的帐号

[  useradd user1  ]

# smbpasswd --help

# smbpasswd  -a user1 <---添加user1到smb专用的帐号数据文件里
4、设定iptables
samber有两个进程:
nmbd 137 , 138
smbd 139 , 445

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 137,138,139,445 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dports 137,138,139,445 -j ACCEPT
5、测试
# service smb restart

# smbclient -L //192.168.0.249 -U user1   <--列出可以访问的资源
# smbclient //192.168.0.249/share -U user1 <--访问名字叫share的资源
如果共享的目录是公共的目录,也就是该目录也被别的服务共享,selinux上下文这样设定:
# chcon -t public_content_t /common
# chcon -t public_content_rw_t /common/pub

总结:
如果/common目录被nfs,vsftp,samba同时共享出去
selinux设定:
如果要求对该目录有写的权限:
chcon -R -t public_content_rw_t /common
如果是只读:
chcon -R -t public_content_t /common

文件系统权限:
如果要求对该目录有写的权限:
chmod 775 /common
chown root:XXXX /common   《 --XXXX代表通过samba在该目录写文件的哟用户所在的组
iptables设定(samba,nfs,ftp):

modprobe ip_conntrack_ftp  <- --非常重要
echo "modprobe ip_conntrack_ftp"  >> /erc/rc.d/rc.local iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 20,21,137,138,139,445,875,32803,32769,892,662,2020,111,2049 -j ACCEPT

iptables -P INPUT DROP

练习:

1、通过samba共享/common目录,要求不允许t113.org域的所有用户访问。只允许user2访问该资源

[share]
comment = "test"
path = /common
hosts deny = .t113.org
valid users = user2

useradd user2
smbpasswd -a user2

2、分别通过smbclient访问用户的家目录资源,测试是否支持上传等操作
给我找到和samba家目录有关的selinux布尔值设定
getsebool 命令 找到
# getsebool  -a | grep samba
samba_domain_controller --> off
samba_enable_home_dirs --> off  《-----
samba_export_all_ro --> off
samba_export_all_rw --> on
samba_share_nfs --> off
use_samba_home_dirs --> off  《-----
virt_use_samba --> off

setsebool -P samba_enable_home_dirs=1
setsebool -P use_samba_home_dirs=1

3、通过samba共享/share目录,要求所有人都可以访问,而且匿名也可以访问,并且匿名也可以上传文件。

[pub]
comment = "Public source"
path = /share
guest ok = yes
browseable = yes
writable = yes

# chcon -t public_content_rw_t /share/

还需设定目录权限和selinux策略
chmod 777 /share
setsebool -P allow_smbd_anon_write=1

测试
# smbclient -L //192.168.0.249
# smbclient  //192.168.0.249