一、为什么我需要samba
笔者最近在玩S3C2440,这块芯片呢,需要使用linux环境下的arm-linux-gcc进行程序编译。然后呢,笔者的主力笔记本跑的是windows,便携本渣渣的性能又不允许跑虚拟机,所以笔者额外搭建了一个实体linux编译服务器。于是每次笔者的开发流程是这样的:使用VSCode编辑工程代码-》打开MobaXtern使用SSH登陆编译服务器-》使用sftp上传工程文件到linux编译目录-》运行make编译它-》把编译好的文件下载回本地电脑-》使用oflash烧录到芯片然后测试。一旦程序哪怕有一点小问题,笔者需要再重复一次以上过程,可想而知有多心累。
好了,有了samba,这一切都不是事,通过samba的远程目录共享服务(当然,samba的能耐不止如此,这个严格来说年纪比笔者还大的老古董会的当然不少,想了解更多可以访问:https://www.samba.org/),笔者只需要一个VSCode就可以完成整个开发流程,具体就是:使用VSCode编辑编译服务器下共享目录中的工程-》打开VSCode的终端SSH到编译服务器(需要预先在windows中装好openssh)并且把工程make一下-》使用VSCode的终端调用oflash烧录共享目录中生成的hex文件到芯片并调试。是的,再也不需要打开一堆软件窗口和文件窗口了,唯一需要打开的只是VSCode(我大VSCode天下第一)。
二、所以我要怎么用samba搭建远程目录共享服务
很可惜啊,为了搭建个远程目录共享服务笔者查阅了一堆资料,然而查到的资料要不就是远古时期写下的老古董,经过历次linux指令更新早已走不通;要不就是复制粘贴之流,估计作者本身都没验证过可行性;有些则是确实有用,不过却写的残缺不全,只提到了部分流程,比如只说了服务端如何搭建,却不提windows端的配置流程。于是笔者折腾了一晚,总结了一个比较完整的适用于Centos8.0和windows10的流程。下面就开始吧(是的,前面都是我无聊写着凑字数的废话,下面才是正文,哈哈)。
三、比较正经的samba目录共享服务端搭建流程
1、在linux上安装samba
这个就很简单了,一般Centos用户只需要如下一个指令:
sudo yum -y install samba #对于ubuntu的簇拥们,你们应该需要sudo apt-get install samba
2、编辑 /etc/samba/目录下的smb.conf
用什么编辑器就无所谓了,比如笔者用的nano,所以指令是这样:
sudo nano /etc/samba/smb.conf #如果你用vim, 那么就是sudo vim /etc/samba/smb.conf
打开后呢,在文件的结尾添加以下内容:
[share_name] #随便起一个你喜欢的共享名字
path = /home/share_dirct #填写任何你希望分享的目录,之后需要新建这个目录专门用来分享
pablic = yes
browseable = yes
writeable = yes
create mask = 644 #往共享目录创建文件时的默认文件权限
directory mask = 755 #往共享目录创建目录时的默认目录权限
valid users = username #用来登陆共享目录的用户名,可以填多个,需要之后新建一个对应的用户
write list = username #对共享目录拥有写权限的用户,可以填多个
编辑保存后,可以用以下指令检查一下配置文件,确保自己编辑没有出错:
testparm
3、创建共享目录与登陆共享目录用的用户
其实在访问目录时,你是以某个linux用户的身份在访问,所以需要创建访问共享目录用的用户,指令如下:
mkdir /home/share_dirct #创建之前在smb.conf里的path后写入的目录作为分享目录,目录如果已经存在则忽略这一步
chmod 777 /home/share_dirct #修改目录权限,这样我们就可以远程对共享目录进行读写了
sudo adduser username #创建之前在smb.conf里的valid users里指明的远程访问用户,用户已存在则忽略这一步
sudo smbpasswd -a username #为远程访问用户添加远程访问密码,注意,和linux用户的登陆密码是两个概念
4、关闭linux的防火墙
其实对于防火墙比较了解的话,完全可以不关防火墙,只开放samba需要的端口即可,可惜笔者对防火墙并不熟悉,而且应该也没人会攻击我的编译服务器吧,所以我选择简单的关掉它,指令如下:
systemctl stop firewalled #停止防火墙 此指令适用于Centos7和Centos8, 不同linux发行版指令可能不同,需要自己查
systemctl disable firewalld #你这个防火墙下次开机也不许启动
上面使用的systemctl指令是个很有用的指令,用法可以参考这篇博客:https://www.cnblogs.com/moxiaoan/p/5683743.html 。
5、关闭SELinux
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。
https://baike.baidu.com/item/SELinux
嗯,看起来很厉害的样子,不过这东西会导致我们无法远程访问samba的共享目录,所以笔者选择关了它。我们需要编辑 /etc/sysconfig 目录下的selinux文件,找到其中的SELINUX项,将=后面改为disable,指令如下:
sudo nano /etc/sysconfig/selinux #使用nano编辑器打开文件
修改文件内容就很简单了,这里就不详细说了,反正改完记得保存就是。
6、重启linux,启用samba服务
重启一下linux,然后键入以下指令,服务端就配置OK了:
systemctl restart smb #启用samba服务
systemctl enable smb #加入启动项,省的每次开机都要重新启动一次
四、适用于windows10的用户端配置流程
很多教程只说服务端怎么搞定好不好!用户端怎么做只字不提,用户端不会配还不是不能用,而且windows10最坑的地方是取消了对smb1.0协议的默认支持,导致笔者当时配置时也一头雾水,明明按照教程做了,别人的windows7访问的好好的,笔者的windows10就各种连接不上!!!气死偶嘞!!!各种查资料总算搞明白了。
1、为windows10添加smb文件共享支持
打开windows10的控制面板->程序和功能->启用或关闭windows功能,将SMB1.0/CIFS File Sharing Support勾选上,然后确定等它安装好就行。
2、映射共享目录到磁盘目录
打开此电脑,在侧边栏的网络上右键,选择弹出菜单中的 映射网络驱动器 项
在弹出的窗口中设置分配的盘符,在目录输入框中填入如下格式:\\你的linux服务器的ip地址\共享名字,这里的共享名字是前面配置smb.conf时在[share_name]中填写的共享名字。然后之下两个勾选框需要勾上,最后点确定,如下图:
然后在弹出的窗口中先点击 更多选项 选择其下的 使用其他账户 ,然后输入你在smb.conf文件中 valid users 一项中填入的用户名,密码填入你使用 smbpasswd 指令设置的对应用户密码,最后点击确定即可,如下图:
最后在 此电脑 中的网络位置处就可以看到映射的共享目录了,如下图:
五、一些废话
我在前面说的够多了,这里什么都没有,就这样,写完收工。