原文链接如下:https://blog.csdn.net/weixin_40156933/article/details/79487856
写点无聊的记录,可以跳过##
从寒假开始频繁搞树莓派开发,到现在差不多用了两个月了,而最近才开始学习搭建服务器。本来我是觉得学东西不要从头学起,从0学到1反而学得杂乱且漫长,所以干脆从0.5来回跳着学,就是直接做项目开始。但是!我错了!qwq好多东西还是得有基础的知识啊!
好,说回来为什么要做这个东西。前阵子晚上洗澡的时候想到一个想法:既然服务器说到底就是把资源放在网络上给别的计算机使用,既然是个Linux就能轻松搭服务器(不像以前windows还得我去搞个serv-U),既然刚好我电脑里都闲置着一个CentOS,那就直接在虚拟机上搭个服务器呗。刚好新学期开始了,社团又要开始培训了,社团祖传的服务器又坏了。。。OK,搞!马上冲出了浴室,结果发现这东西网上已经很多啦。。
正篇开始
1.材料
一个VMware虚拟机,已导入centos系统镜像构建虚拟机。
2.安装过程
(1)安装samba
$ sudo yum -y samba
#然后查看samba及其组件是否安装成功
$ rpm -qa|grep samba
#显示如下信息
samba-common-tools-4.6.2-12.el7_4.x86_64
samba-common-libs-4.6.2-12.el7_4.x86_64
samba-libs-4.6.2-12.el7_4.x86_64
samba-client-libs-4.6.2-12.el7_4.x86_64
samba-client-4.6.2-12.el7_4.x86_64
samba-common-4.6.2-12.el7_4.noarch
samba-4.6.2-12.el7_4.x86_64
#说明安装完成,samba-common包含了配置文件,samba-client就是linux下访问samba服务端的客户端啦
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
(2)创建共享文件夹
$ sudo mkdir /home/username/sambashare
$ sudo chmod 777 /home/username/sambashare
- 1
- 2
777代表给所有用户rwx
权限,当然如果共享的文件只是用来执行和读就可以设置为555,可避免文件被恶意篡改。另外,分享的文件夹一定要放在/home/username
下才能访问,因为在Windows下登录samba服务器是以对应系统用户的“名义”去登录的,要是放在其它系统用户无法访问的文件夹下,对应的samba服务器用户也无法访问。
(3)配置samba的配置文件
$ sudo vim /etc/samba/smb.conf
- 1
在文件尾部填入以下内容:
[share]
path = /home/username/smbshare
public = Yes
writable = Yes
valid users = username
create mask = 0644
force create mode = 0644
directory mask = 0755
force directory mode = 0755
available = Yes
#share这个名字是可以改的,就是你到时访问的文件夹名,path就是第二步那个共享文件夹
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
(4)为当前用户设置登录密码
$ sudo touch /etc/samba/smbpasswd
$ sudo smbpasswd -a username
- 1
- 2
输入两次密码后会提示“已添加用户”,用户名为(3)中填写的valid users
且必须是系统已有用户。如果要添加其他用户只要输入sudo smbpasswd -a other_username
再为新用户设置密码即可。
#其他用户管理命令
smbpasswd -d 冻结用户,就是这个用户不能在登录了
smbpasswd -e 恢复用户,解冻用户,让冻结的用户可以在使用
smbpasswd -n 把用户的密码设置成空.要在global中写入 null passwords -true 允许免密登录
smbpasswd -x 删除用户
- 1
- 2
- 3
- 4
- 5
3.调试
(1)启动samba服务器并本地测试
#启动服务器,start的位置是一个参数,可以是restart/stop/status
$ sudo systemctl start smb.service
#利用客户端本地测试,localhost不用换成具体地址也行,系统会识别为本地地址
$ smbclient -L //localhost/share
- 1
- 2
- 3
- 4
注意一定要启动再访问,否则会报错Connection to localhost failed (Error NT_STATUS_CONNECTION_REFUSED)
启动成功的显示是这样的:
Redirecting to /bin/systemctl status smb.service
● smb.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2018-03-08 14:07:22 CST; 4min 35s ago
Main PID: 7329 (smbd)
Status: "smbd: ready to serve connections..."
CGroup: /system.slice/smb.service
├─7329 /usr/sbin/smbd
├─7330 /usr/sbin/smbd
├─7331 /usr/sbin/smbd
└─7334 /usr/sbin/smbd
Mar 08 14:07:17 localhost.localdomain systemd[1]: Starting Samba SMB Daemon…
Mar 08 14:07:22 localhost.localdomain smbd[7329]: [2018/03/08 14:07:22.202527, 0] …/lib/util/become_daemon.c:124(daemon_ready)
Mar 08 14:07:22 localhost.localdomain systemd[1]: Started Samba SMB Daemon.
Mar 08 14:07:22 localhost.localdomain smbd[7329]: STATUS=daemon ‘smbd’ finished starting up and ready to serve connections
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
成功连接上本地samba服务器,会提示输入密码,之后显示samba服务器状态(也可通过命令$ systemctl status smb.service
查看状态):
Domain=[LOCALHOST] OS=[Windows 6.1] Server=[Samba 4.6.2]
Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers share Disk IPC$ IPC IPC Service (Samba 4.6.2) 1234aa4321 Disk Home Directories
Domain=[LOCALHOST] OS=[Windows 6.1] Server=[Samba 4.6.2]
Server Comment
--------- -------
Workgroup Master
--------- -------
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
(2)设置好selinux
$ getsebool -a | grep samba
#显示出工具状态,有这一行samba_enable_home_dirs --> off,就是将它on就行了
$ setsebool -P samba_enable_home_dirs on
- 1
- 2
- 3
(3)将samba添加到防火墙列表
不太建议直接关了防火墙,毕竟要给其它主机远程共享还是。。
$ sudo firewall-cmd --list-services
$ sudo firewall-cmd --permanent --add-service=samba
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-services
- 1
- 2
- 3
- 4
(4)windows下测试
在同一局域网内的一台主机上打开映射王略驱动器,填入\your_ip\share,会提示输入账密登录,说明已成功映射到局域网中了。
(5)设置一下开机自启
$ systemctl enable smb.service
$ systemctl restart smb.service
- 1
- 2
4.网络设置####
完成上一步的本次测试后,接下来进行Windows下的测试时一般会遇到一个问题,在本机Windows上测试没问题,但在局域网内其它主机上测试失败,这是因为虚拟机的网络配置没做好。
(1)公有地址和私有地址
在网际协议IPV4中,公有地址分配给注册并向Inter NIC提出申请的组织机构,通过这个地址可以直接访问因特网;而私有地址属于非注册地址,分配给组织内部机构使用,这一类地址不能直接访问英特网,必须将此私有地址转换为局域网对外的同一的公有地址,这个过程叫Network Address Translation,也就是NAT,一般由路由器完成这个过程。所有私有地址:
A类:10.0.0.0–10.255.255.255
B类:172.16.0.0–172.31.255.255
C类:192.168.0.0–192.168.255.255
像笔者电脑如果在实验室直接连接深大校园网,分配的ip就是172.31.100.172,而在宿舍连接,分配的ip就是172.30.65.131,这说明深大的校园网是通过B类网络的方式将路由器部署在校园各个区域的。而当笔者使用小米路由器时,手机和树莓派分配到的ip一般是192.169.xxx.xxx,这说明我买的路由器是C类。
(2)VMware虚拟机的两种网络模式
虚拟机有两种常见的网络连接模式,一种是NAT模式,一般虚拟机分配到的ip是192.168.xxx.xxx这种的,这个地址是主机内部局域网的私有地址,而主机与虚拟机对外访问的地址则是主机在校园网或者因特网。另一种模式是桥接模式,即将虚拟机直接连接物理网络,在主机所在的局域网内为虚拟机分配一个ip。两种模式各有各的好处,NAT模式由于对外访问的ip是主机ip,所以两者共享同一网络共同访问因特网,而桥接模式就是两台校园网或者因特网内的独立主机,网络状况互无关系。
(3)所以当虚拟机的地址是主机内部局域网的192.168.xxx.xxx这种私有地址,那么主机外局域网上的其它主机肯定无法识别这个地址,需要将虚拟机改为桥接模式,将虚拟机连接到外部局域网上并获取ip,其它主机才能通过这个ip地址定位网络上的这一台虚拟机并访问其贡献目录。
闲言闲语
总之,一个突发奇想,学到的东西远远超过我刚开始以为的。
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-2011a91181.css" rel="stylesheet">
</div>
**
- 另外在标注几句:
1.(4)第二行代码里面的username不是用username去敲,而是你的当前登录用户。 3.(1)第二行代码里面的share,就是你之前共享的文件夹。若当时取名不叫share,此处当然也不叫share。(其余文章都写得挺好的,按照文章一步一步都实现出来了,非常感谢原作者)
**