概述
文件共享服务器,就是通过网络提供文件共享服务,提供文件下载和上传服务(类似于FTP服务器)。通常来说一个公司对外部公网会使用基于FTP协议的文件传输服务,对研发内网会使用基于CIFS协议的文件共享服务。
CIFS是由微软开发的一款SMB协议的衍生品,时至今日,CIFS实现的协议已经很少被使用,更多的则是经过升级的SMB2或SMB3。
创建共享
探讨协议不是本篇的核心,重要的是了解共享文件的实现方式,下面直接开始实验,演示如何创建共享:
(环境:Windows2003(服务器端),Windows XP(客户端))
第一步先将两台虚拟机放到同一个网络中,这里将XP与2003的网络适配器一项均设置为VMnet1。然后配置两个虚拟机的IP地址,让它们位于同一网段中。关掉防火墙,保证可以ping通。
接下来进入C盘新建一个文件夹,右键属性->共享,选择共享此文件夹,并设置共享名。点击确定,这样该文件夹就变成了一个共享文件夹。
设置完后,会发现该文件夹图标下面多了一个小手,就是共享文件夹的标志,接下来可以在文件夹中创建文件,图片等资源。便可让其它用户访问。
访问共享
在了解了如何创建共享,接下来就是如何访问共享。
(环境:Windows2003(服务器端),Windows XP(客户端))
老规矩,第一步,在Windows 2003上创建一个用户账号
Win+R进入运行窗口,输入服务器的地址,格式如下:
Code1
2\\10.1.1.2
这里服务器的地址为10.1.1.2,加上"\\"用来说明访问的是CIFS服务接着会尝试链接到服务器,再输入方才创建的用户,并确认。
接下来会进入到服务器上的共享文件夹,可以看到,用户访问共享文件夹看到的是文件夹的共享名,并不是真实的文件夹名,同时可以进入共享文件夹中查看共享的文件。
需要说明的是,在登入共享服务器后,短期内再登录是会自动登录共享服务器的,不需要再次输入账号密码,因此如果试图换一个用户访问共享服务器,需要注销当前用户再登入,不过大多数情况下不需要考虑这点。
共享权限
在了解了创建共享与访问共享后,下面介绍一下共享文件的权限。例如,当我们试图删除共享文件夹上的文件时,就会出现如下错误。
有意思的是,出现了写拷贝错误,写拷贝我们在学习内核时遇到过,防止进程修改文件,从而将物理页属性为写拷贝的文件复制到一个新的物理页上,让进程指向新的物理页,这样就不会导致原本的文件被修改了。扯多了~~
回到共享权限上来,回到Windows 2003上,共享文件夹右键->属性->权限,这就是共享文件夹的权限列表了,可以看到有一个Everyone组,它这里一共就只有3个权限。
那么是如何计算用户访问共享文件夹时的权限呢?这里给出结论:
- 当用户由远程登录时(本例:通过Windows XP登录):将共享文件夹的权限与NTFS权限取交集,为用户最终的权限。
- 当用户由本地登录时(本例:通过Windows 2003登录):仅受到文件NTFS权限的影响。
在共享文件夹中,由于文件的ACL的User组里没有给修改权限,因此用户删除不了图片。
如果想要用户能够删除,添加共享文件夹中的文件,只需要修改NTFS权限就可以(取消继承,单独给用户或者用户所在组设置权限),一般情况下,共享权限都会给完全控制,这样看的就也是文件本身的NTFS权限了。另一个要说明的是,若用户单独被拿出来设置NTFS权限,这个权限给的不是用户,而是用户的SID,通过指令
1 | whoami /user |
查看当前用户的SID。
隐藏共享
什么是隐藏共享?在命令行键入指令
1 | net share |
便可以查看该系统中所有共享文件夹。其中后面带$
符号的就属于隐藏共享。
可以看到,我们唯一的分区C盘,以及C盘下的目录均被设置为了共享,这其实是非常可怕的,这意味着它人在知道了域管理员账号密码的情况下,可以远程访问服务器内所有的文件内容。微软当初设计时,是为了方便用户能够远程控制自己的电脑,但实际上,没有多少人用这些功能,反倒是方便了黑客。
关于工作环境
方才提到了域管理员,这里简单说明一下。计算机中有一个工作组的概念,平时我们的工作组为WORKGROUP,如下图所示。
WORKGROUP是一种人人平等的工作组,但还有一种工作组,叫做域工作组,这种工作组里面有一个拥有至高无上权力的域管理员,可以不经过许可不知道密码的情况下登录域中任何的成员计算机。
访问隐藏共享
访问隐藏共享与常规访问区别不大,仅需要添加一个$
符号。然后输入账号密码登录即可。
设置隐藏共享
设置隐藏共享也比较简单,类似赋值语句PHP的赋值语句,只是把$
符号放到后面。如下图所示,重新给C盘设置隐藏共享:
关闭共享
这隐藏共享开着显然不安全,大部分情况下是用不到的,而且还会给黑客可趁之机,下面就介绍几种关闭共享的办法。
临时关闭
可以通过指令
1 | net share 共享名 /del |
临时关掉共享。如下图所示:
但是这种关闭属于临时关闭,重启后,这些共享又会再次开启。
注册表关闭
为了屏蔽系统隐藏共享自动开启的功能,需要使用注册表编辑器。Win+R,并输入regedit进入注册表编辑器。跟依次进入如下路径:
1 | 我的电脑\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters |
进入后,右键新建一个DWORD类型的值,并命名为AutoShareServer,将其值设置为0。
这样重启之后,就可以关闭之前临时关闭的共享文件夹了
关闭445端口
经过先前的操作,共享文件夹都关闭了,但是还有一个隐藏共享的IPC未被关闭,这个比隐藏共享文件夹更加危险,所以我们得将其关掉。与之相关的,则是445端口,该端口就是与共享服务相关的端口,只需将其关闭,就可以防止因共享服务而受到攻击。
方法如下,Win+R,并输入services.msc,找到名称为Server,将其禁用。这样445端口的共享服务就给关了。
除了在服务中禁用掉Server,还有一种方法,仅能在Windows7或者Windows10这样高版本的系统管用,就是设置入站规则。在控制面板中,找到Windows Defender防火墙,选择高级设置,然后新建规则,类型选择端口,在特定本地端口填写445,选择阻止连接。由于TCP和UDP是分开应用的,因此要设置两遍。下面以TCP为例演示一遍如何设置:
端口小结
至此,我们已经学习了3个端口的知识,这里稍作总结:
1 | 3389: 远程桌面 |
参考资料
参考教程:
参考链接: