最近机房改建,很多数据需要转移,打算用samba来处理,特此分享,希望能大家多多建议!
这个帖子只是为了介绍samba的具体操作,对于Samba的一些原理性的基础知识这里不做介绍。
有兴趣的可以参考51CTO上Samba专题http://os.51cto.com/art/200512/12843.htm
首先说一下我的环境:
- 操作系统:centos 64位(系统编码格式为LANG="zh_CN.UTF-8")
- ssh客户端工具:secureCRT(编码格式默认为UTF-8,后面会对当前对话窗口进行字符编码改为GB2312安装
1、首先安装samba,我这里直接采用了yum的方式,其他方式安装也一样。
- [root@Samba_Test ~]# yum install samba
2、安装完成Samba后我们开始配置,Samba使用了139.445端口,正常使用Samba服务必须开启这两个端口
- 将139、445端口加入iptables允许列表(推荐方式)
- [root@Samba_Test ~]# vi /etc/sysconfig/iptables
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
- [root@Samba_Test ~]#service iptables restart
3、设置好iptables后,我们将smb服务加入开机启动
- 编辑/etc/rc.local,将service smb start添加到rc.local
4、接下来我们开始添加账户,由于samba需要依赖系统本地账户,所以我们先添加本地系统账户,我们这里添加账户“SambaTest”为例:
- adduser SambaTest (添加系统账户)
- [root@Samba_Test ~]# useradd SambaTest
smbpasswd-a SambaTest(创建samba账户)
- [root@Samba_Test ~]# smbpasswd -a SambaTest
- New SMB password:
- Retype new SMB password:
- Added user SambaTest.
5、到这里我们就可以使用创建好的SambaTest来访问共享,默认我们会看到一个以SambaTest命名的目录被共享出来
被共享的文件必须使用777权限
关闭selinux
- (及时生效,重启后必须手工再次关闭):setenforce 0
- 永久生效,需要重启,修改/etc/selinux 文件
- setenforce 1 设置SELinux 成为enforcing模式
- setenforce 0 设置SELinux 成为permissive模式
不关闭selinux和修改777权限会造成samba只能访问目录而不能访问文件,也不能对目录进行修改
6、测试没有问题了,我们再来看看samba的配置文件如果是使用yum的方式安装,"smb.conf"文件默认为/etc/samba/smb.conf因为大多使用samba的环境都在于要在linux和windows下之间的文件访问,那么编码的不一致就是一个很大的问题,笔者曾经为了能够让编码一致做过很多测试,但是目前还是没能很好的解决。这里我介绍一种方法,能保证在windows中看到的共享能够是中文,在secureCRT中secureFX中使用GB2312的编码方式看到的看到的是中文,系统使用的编码方式为LANG="zh_CN.GB2312", 在系统本地看到的中文是乱码,欢迎大家能够给我提出宝贵的意见,具体配置如下:
- [root@Samba_Test ~]# vi /etc/sysconfig/i18n
- LANG="zh_CN.GB312"
smb.conf配置
- #------------------ Global Settings ------------------
- [global]
- dos charset = GBK
- unix charset = GBK
- display charset = GBK
- #----------------- Network Related Options ----------
- #新建的共享目录
- [文件共享]
- comment = 文件共享(SambaTest)
- path = /home/文件共享
- browseable = yes
- writable = yes
- write list =SambaTest
保存后配置文件重启samba
- [root@Samba_Test ~]# service smb restart
刷新共享目录,会出现下图所示
7、简单整理下比较常用的配置注释
[global]全局配置
(74行) workgroup = WORKGROUP 这是设置工作组
server string = Samba Server Version %v 工作组的说明而已,注释
username map=/etc/samba/smbusers 指名系统帐号跟虚拟帐号的对应关系文件夹位置(默认没有这个文件的)
日志选项
(88行) # logs split per machine
log file = /var/log/samba/%m.log 日志存放地方
# max 50KB per log file, then rotate
max log size = 50 设置日志文件最大尺寸,单位KB
使用Samba服务器的每个客户机的日志分别保存在与客户主机同名的“%m.log”文件中,“%m”变量表示客户端主机的名称,其中,当samba服务器刚刚建立好后,只有两个日志文件,分别是nmbd.log和smbd.log,它们分别记录nmbd和smbd进程的运行日志。
nmbd.log是用来管理群组还NETBOIS解析的
smbd.log是用来管理samba服务器共享目录,文件与打印等信息
当客户端通过网络访问samba服务器后,会自动添加客户端机器的相关日志
安全选项
(101行) security = user
passdb backend = tdbsam
smb passwd file =/etc/samba/smbpasswd
Samba用户和密码文件(这行要自己加)
“security”值有4个含义
1、share 表示用户不需要账户及密码即可登入Samba服务器(需要匿名登录就设置他)
2、user 表示由提供服务的Samba服务器负责检查账户及密码(Samba默认的安全等级,登录需要帐号和密码)
3、server 表示检查账户及密码的工作指定由另一台Windows服务器或Samba服务器负责,就是说需要转交给其他服务器来验证
4、domain 表示指定Windows域控制服务器来验证用户的账户及密码
共享目录 Share Definitions
[eo] 这个是共享文件夹名字(可以随便取)
comment = sharefile directory 共享文件夹的说明,注释而已
path = /hdtv 实际上共享的是这个目录,使用绝对路径
public=yes/no 设置是否匿名访问
read only=yes/on 是否只读(不能读取不代表不能写入,要看写入权限开没有)
writeable = yes/on 是否写入(只要设置能写入,读取权限可以不设置)
valid users = user1,user2 指定能够进入此资源的特定用户
#valid users=用户名/@组名(如果加@符号就代表组名,只有加入这个组的成员才能访问资源,加入组命令在下面有讲解,多用户用“,”隔开)
invalid users = user1,user2 指定不能使用该共享资源的用户和组
read list = user1,user2 指定只能读取该共享资源的用户和组
write list = user1,user2 指定读取和写该共享资源的用户和组
public = user1,user2 指定该共享资源能给游客帐号访问和
guest ok类似
hide dot files = yes/no 指明是否隐藏“.”开头的文件