工作一年多,对于编译和码代码用的这台ubuntu的设置越來越不喜欢。因为之前从来没有在linux上做过开发,诸如分区和很多其他的配置,就比如这个samba的配置和本地搭建的一些服务器的配置,有很多不合理的地方。当初啥都不懂,都是网上各种找教程,一个不行就另一个,总有一个成功的。实际配置起来之后,用得有不顺手的地方也都忍了。最近感觉不行,作为一个程序猿,即使眼下只会搬砖,也应该要不断地跳出自己的舒适圈,寻求个人工作效率的提升和对新事物的理解,如是日积月累,才不至于终日搬砖。
同时我也有一直有写博客的想法,因为我觉得即使很多东西在网上都可以找到,后人写得也许都只是重复,但是只是看到,只是用过,未经自己整理和真正理解的东西终归不是自己的,而且我们应该在前人的基础上越做越好。想法虽然很好,但是却一直懒得动手,现在借着这次,从这一篇简单的内容入手,作为我个人开始写博客的里程碑,请原谅我的罗嗦,因为这个起点,我总是希望纪念一下。
进入正题,重装14.04的系统后,自然仍然要从那台windows的工作pc上访问编译用的ubuntu。这里我仍然沿用了之前使用的samba,不过我没有了解过其他windows上访问linux文件系统的手段,以后应该会补上。但是samba无疑很强大的,但也是很复杂的。不过我的配置一开始就遇到问题,花了大半天找配置文件的错误,最后重装了samba和几个库搞定了,汗颜。但我还是把整个过程说明一下,因为我自己查资料时,网上的很多都是只有一条龙的配置流程,对于每一步为什么这么配置,这么配置有什么影响,是否有其他的配置方法都没有说明。通过我对配置项的了解,我觉得很有必要说明一下,尤其对于新手来说,可以省去很多的麻烦。
配置步骤
安装samba
sudo apt-get install samba system-config-samba
其中system-config-samba是samba配置文件的图形化配置工具,你可以自由选择是否安装。
选择共享目录并设置配置,设置配置我知道的主要有三种方法(只是后两种方法也都是通过一个图形化的方式更改smb.conf这个配置文件而已)
直接修改配置文件 /etc/samba/smb.conf ,修改前最好备份下
- 在配置文件中参考如下的形式添加一个[section],下面再接一系列的参数指定section的性质,更详细的配置我会在下面描述了用户的概念之后再做一些具体的说明。
[wolkdir]
path = /home/cwghdw/share 此处为这个section在linux上对应的文件夹的路径
browseable = yes 决定是否可读
public = yes 决定是否可以允许所有访问用户登陆
writable = yes 决定是否允许匿名访问的用户写入 - 在smb.conf的默认配置中,就有 [homes]的section可供参考,可以把home目录和所有用户目录都共享出来,对于在局域网内办公的samba配置是非常合适的选择,具体的可读写的能力都是可以进一步配置的。
- 另外默认配置中初始就有一些printers字段,这些可能是和共享打印机的配置相关,我也不清楚,总之samba的功能是非常强大的,因为 man smb.conf 可以看到7600行,orz。
- 在配置文件中参考如下的形式添加一个[section],下面再接一系列的参数指定section的性质,更详细的配置我会在下面描述了用户的概念之后再做一些具体的说明。
在文件系统中修改文件夹的share配置
- 我个人是安装了kde的桌面环境,因为感觉封装得比较强大。安装了samba之后,kde的资源管理器中可以直接在文件夹的property中设置目录是否进行share,提供了与上述smb.conf中对应的允许他人创建和删除该目录下文件的选项(writable)以及是否允许访客登陆的选项(public)
- 某一个用户目录下的目录设置是ok的,但是对home目录貌似不生效。不清楚是否是我设置的原因
- unity桌面下应该也会有对应的配置
使用图形化参数配置工具samba进行配置
- 但注意这个里面可能存在错误配置,比如security=share,对于我当前ubuntu 14.04系统通过apt-get 方式安装的samba是无效的,通过testparm测试经过上述配置后生成的smb.conf会报错,故而重新再启动samba这个图形化配置工具的时候就失败了,这还让我郁闷了好一阵。
创建一个账户
很多的samba配置的介绍忽略了这一步,因为如果设置smb.conf中的public = yes,则不需要这一步,但是我个人建议设置,因为以guest的方式登陆,则所有对linux文件系统里的修改都会以other的身份进行操作,创建的目录也都会是nobody:nogroup的形式。 设置后可以在section的配置中指定valid user。
注意这里创建的用户必须是本地已经存在的用户,对文件和目录的操作的权限的判断和写入都会以登录的用户的身份来确定。是可写还是,可读,如果是原文件的owner,就会开放对应的权限。这对于配置局域网内的共享目录实在是非常必要且方便的。具体配置如下(这里貌似还有其他很多方法,我不一一列举):
- 在 /etc/samba/目录下
- sudo touch smbpasswd
- sudo smbpasswd -a xxxxx (xxxxx可以是系统管理员用户,也可以是当前系统里的其他用户)
- 随后是设置密码,这个密码不同于user账户的密码,是专门用于对应user访问samba共享目录的。
- 在 /etc/samba/目录下
重新启动服务器,不过在linux下直接重新启动samba貌似没有效果。
最好 sudo service smbd reload + sudo service nmbd reload 重启这两个主要服务。
/etc/init.d/smbd restart 和/etc/init.d/nmbd restart 也一样。关于测试
smbclient -L host 可以列出对应主机上所有的共享文件夹或者说网络文件系统的服务。
smbclient //localhost/{对应的section的名称} 可以本地测试文件是否已经被共享出来,并可以执行samba提供的一系列命令
section即在[]中的名称。
Windows下访问
\\ubuntu主机ip or 名称\section名称
其他说明
- testparm
- testparm是一个安装samba后就默认安装的工具,可以用于检查smb.conf的语法格式是否正确
- smb.conf的语法规则 —— section的配置
- comment 显示备注
- writable = yes/no 决定是否可写
- Browseable = yes/no 决定是否可读
- valid user = 某个用户名称 ——推荐使用这种方式,创建和修改文件都会是对应用户的用户名。然后默认创建文件和目录的权限是644,可以通过如下两个配置项修改权限,通过samba访问时,创建和修改会以如下权限进行:
- create mask = 0755
- directory mask = 0755
- valid user = @允许某个组的成员访问。
- 注意这里的用户只能是linux当前的用户,否则配置会报错。通过smbpasswd -a cwghdw 的方式添加用户cwghdw到smb。windows上就可以通过这个用户名和密码来访问samba共享出来的文件夹。
- public = yes 允许所有访问用户登录
- 会在testparm中以 guest ok的方式呈现。
- windows 访问时没有权限使用网络资源 的问题解决办法
- 网上有很多的说明是针对centOS的,说关闭selinux,貌似与ubuntu无关。
- 个人处理方式如下,重装下列package解决问题。 orz
- sudo apt-get install –reinstall libsmbclient libsmbclient-dev libtevent-dev libtalloc2 samba