首页 > 代码库 > 【Linux笔记】samba源码安装及基本使用说明

【Linux笔记】samba源码安装及基本使用说明

前段时间项目中碰到从windows机器上传多媒体文件至linux服务器的需求(人工审核并触发同步),调研了几种上传机制或实现方案:

1) http方式上传至WebServer
用PHP或Python脚本上传给WebServer,但由于多媒体文件动辄几百兆,PHP由于最长执行时间的限制首先被排除,另外由于用脚本上传需要增加失败重试等控制逻辑,Python虽然可以实现这些功能,但考虑到开发成本及服务的稳定性,并不是最优方案

2) flash方式上传
例如百度云web端就使用了flash方式上传,通过chrome调试工具可以看到,百度云web端的上传按钮调用的是swfupload,关于swfupload的介绍,可以参考这里或这里),但由于之前对该方案完全没有了解,开发成本太高,所以只能放弃  -_-

3) ftp方式上传
在Linux服务器搭建ftp服务器,在Windows客户机安装ftp客户端工具,鼠标拖拽即可实现文件上传。但由于厂里网络拓扑的特殊性及服务器运维规范,这种方式虽然技术是可以实现业务需求,但实现起来比较麻烦

4) 其它开源的文件同步工具
开源工具中首先想到Samba,在考虑业务需求和机器业务规范后,发现samba可以方便地实现需求。

本文下面的部分是在Samba源码安装及基本配置方法的笔记。

1. Samba是什么
Samba是一套开源软件,可以在安装了不同操作系统的机器间共享文件或打印机。尤其是需要在Window客户机与Linux服务器间共享文件时,samba显得尤为方便。更系统性的介绍可以参考官网或wiki pedia

2. 源码安装步骤
以v4.1.9为例,源码编译/安装步骤(安装需要root权限)如下:
1) 从samba官网下载最新版本源码,解压,进入源码目录
2) 确保系统默认的python版本为2.7+且编译python时配置了--enable-shared,否则后续编译samba时会报错
3) 执行命令: ./configure && make && make install,samba会被默认安装在/usr/local/samba/路径下
4) 根据实际业务需求,配置/usr/local/samba/etc/smb.conf,如设置共享目录及用户等
5) 依次启动samba相关的2个守护进程:

shell> /usr/local/samba/sbin/smbd -s /usr/local/samba/etc/smb.conf -D
shell> /usr/local/samba/sbin/nmbd -s /usr/local/samba/etc/smb.conf -D
备注1:上述启动命令中的/xxx_path/smb.conf是安装完samba后配置文件的实际路径
备注2:可通过echo $?查看进程启动状态,或通过ps aux | grep db查看进程是否已存在,还可通过netstat -tnlp查看smbd是否处于端口侦听状态(tcp端口139和445,至于为何侦听两个端口,可参考这里的Firewall Configuration部分) ;nmdb占用的是udp 137端口
6. 终端执行/usr/local/samba/bin/smbclient -U% -L localhost,测试samba守护服务是否正常,如未报错,表明samba服务已成功启动

官方的Install Guide可以参考这里

3. Samba基本配置
samba的配置文件典型路径为/etc/samba/smb.conf或/usr/local/samba/etc/smb.conf,文件语法与windows的.ini类似:文件包含以"[]"为期数标识的多个sections,每个section下配置项遵守key = value的格式。
samba.conf中,每个section代表samba服务器的一个meta-service或共享配置。其中,[global]较为特殊,它包含的配置项会影响整个samba服务器的配置;[homes]或[printers]被称为meta-service,前者默认将每个用户自己的home目录设置为该用户可写的共享目录,后者则提供了打印队列支持并配置了来自各samba客户端的打印任务的存放路径。
我们可以根据实际需要,配置多个section,比如:

[Shared]
   comment = Global Share - All Users
   path = /samba/shared
   read only = No
   guest ok = Yes
   public = Yes
   browseable = Yes
   create mask = 0666
   directory mask = 0777
上述配置的作用是:所有用户(包括guest和public用户)均可浏览或读写/samba/shared目录,在该共享目录下创建新目录的默认权限是777,创建新文件的默认权限是666
下面的配置可以关闭默认的"打印机和传真"共享目录
   load printers = no
   printcap name = /dev/null
   ## hide printers and faxes share
   disable spoolss = yes
其它隐藏文件或文件夹的配置方法,可以参考官网文档的说明

4. Samba用户管理
Samba的用户管理与linux系统的用户管理有一定依赖,即Samba的用户必须也是Linux系统添加的用户,但密码可以独立。
添加新用户的典型步骤是:
1) 以linux root帐号执行adduser命令添加linux系统用户和登录linux系统的密码(该用户名也是登录samba的用户名)
2) 用smbapasswd工具为上步添加的新用户设置登录samba的密码
3) 在smb.conf正确的section中,设置共享目录的有效用户,典型配置如下

[video-upload]
   comment = Shared Director for 3rd-party videos
   path = /home/slvher/cooperate-uploads
   valid users = slvher
   public = no
   writable = yes
   printable = no
   hide dot files = yes
   create mask = 0766
更新完配置文件smb.conf后,重启smbd和nmbd进程,此时,我们就可以在windows客户机通过登录samba服务器来共享文件了

5. Windows客户机访问Samba服务
在前述步骤均正确执行的前提下,可以通过在windows机器运行命令行输入\\samba-svr-ip\slvher并在弹出的对话框中输入用户名/密码来登录samba服务器。
登录成功后,会打开一个共享文件夹,用鼠标拖拽文件即可触发samba自动同步

【参考资料】
1. Samba官网
2. Installing Samba on a Unix System
3. online-doc: using_samba: ch09. Users and Security 

【Linux笔记】samba源码安装及基本使用说明