文件共享协议理解
- 任务:简要解释 SMB/CIFS 和 SFTP 这两种文件共享协议的作用和主要区别。
- SMB(Server Message Block)/CIFS(Common Internet File System)
- 是一种网络文件共享协议,主要用于在局域网内实现文件和打印机等资源的共享。它允许不同计算机之间通过网络访问彼此的文件、目录,就像访问本地文件一样方便
- 典型应用场景:在 Windows 网络环境中,如,在企业内部的 Windows 办公网络里,员工的电脑可以通过 SMB 协议访问文件服务器上的共享文件夹,实现文档的集中存储和多人协作编辑;学校的计算机教室中,教师机能通过该协议向学生机共享教学资料等
- CIFS 脱胎于 SMB,CIFS 兼容性较好,是不同操作系统和网络环境提供一种通用的文件共享解决方案
- SFTP(SSH File Transfer Protocol)
- 基于 SSH(Secure Shell)的文件传输协议,它利用 SSH 的安全特性,在文件传输过程中提供加密保护,确保数据在网络传输时的安全性,防止被窃听或篡改。
- 典型应用场景:常用于 Linux 系统以及跨平台环境下的安全文件传输。比如,在 Linux 服务器之间进行文件备份和同步时、在开发者需要从本地向远程 Linux 服务器上传代码或下载日志文件时,使用 SFTP 可以保证传输的文件不被非法获取
- 区别
- SMB/CIFS:Windows 网络原生,使用方便;局域网环境下,传输文件高效;但是安全性有所不足
- SFTP:兼容性较好;由于加密消耗,性能会有所下降;功能相对来说比较单一,专注于文件上传、下载;基于 ssh 协议,数据传输稳定、可靠
- 具体操作:
- 描述 SMB/CIFS 的典型应用场景(例如在 Windows 网络中)。
- 描述 SFTP 的典型应用场景(例如在 Linux 和跨平台环境中)。
Samba 服务配置(SMB/CIFS)
-
任务:安装并配置 Samba,实现局域网内文件的共享访问。
-
具体操作:
- 在你的 Linux 服务器上安装 Samba。
sudo yum install samba samba-client samba-common- 创建一个专用于 Samba 的用户,并设置密码。
1 2 3[root@localhost frps]# sudo useradd sambauser [root@localhost frps]# sudo smbpasswd -a sambauser ......- 修改
/etc/samba/smb.conf配置文件,创建一个共享目录,并确保只有你创建的用户可以访问。
1 2 3 4 5 6sudo mkdir -p /home/samba/share sudo chown sambauser:sambauser /home/samba/share sudo chmod 755 /home/samba/share sudo vim /etc/samba/smb.conf # 重启生效 sudo systemctl restart smb nmb1 2 3 4 5 6 7 8[myshare] # smb.conf comment = My Samba Share path = /home/samba/share valid users = sambauser writable = yes browseable = yes create mask = 0755 directory mask = 0755- 验证:在另一台局域网内的电脑(例如 Windows 或 macOS)上,通过网络邻居或文件管理器访问你的共享目录,并上传一个文件进行测试。
Windows 需要在控制面版里启用 SMB、重启
注意:直接在地址栏输入
\\192.168.109.100即可!!上传了一个文件到 sambauser,OK

SFTP 服务配置
-
任务:利用 SSH 服务配置 SFTP,实现安全的文件传输和管理。
-
具体操作:
- 确保你的服务器上已安装 SSH 服务。
sudo yum install openssh-server
- 创建一个专用于 SFTP 的新用户,并设置密码。
- 修改
/etc/ssh/sshd_config文件,配置 SFTP 子系统,并限制 SFTP 用户只能访问其主目录,无法登录 Shell。
1 2 3 4 5 6 7 8sudo systemctl start sshd sudo useradd sftpuser sudo usermod -s /sbin/nologin sftpuser # 限制登录系统 shell! cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 备份一下配置文件 vi /etc/ssh/sshd_config sudo systemctl restart sshd # 重启生效1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20# 注释掉原来的 SFTP 子系统配置 # Subsystem sftp /usr/lib/openssh/sftp-server # 配置新的 SFTP 子系统,使用 internal-sftp # 相比原来的 sftp-server,更便于配置和限制。 Subsystem sftp internal-sftp # 匹配 SFTP 用户(这里是 sftpuser) # 对用户 sftpuser 应用后续的配置 Match User sftpuser # 强制使用 internal-sftp,无法执行 shell ForceCommand internal-sftp # 限制用户只能访问其主目录 ChrootDirectory %h # 允许用户进行的操作,这里设置为允许读写等 # 禁止 TCP 转发和 X11 转发,增强安全性 AllowTcpForwarding no X11Forwarding no # 这下面还有配置,要剪切到前面,不能放在 Match 下面!- 验证:使用一个 SFTP 客户端(例如 FileZilla 或 WinSCP)连接到你的服务器,使用 SFTP 用户登录,尝试上传文件,并确认无法执行 Shell 命令。
- 碰到的一些问题
- 需要将 ChrootDirectory(即目录,/home/sftpuser,两级都一样) 的权限设置为 755,并且归属于 root
sudo chown root:root /home/sftpuser- sshd -t 检查 config 的语法、看日志,又发现 usedns 不能在 matchuser 块内,移动一下
- 就可以了

权限精细化管理
-
任务:在 Samba 共享中,配置更细致的权限。
-
具体操作:
- 创建一个 Samba 组。
1 2 3 4 5 6sudo groupadd sambagrp # 添加系统组 sudo smbgroupadd sambagrp # 添加 samba 组 sudo mkdir -p /home/samba/groupshare # 共享目录 sudo chgrp sambagrp /home/samba/groupshare # 归组 sudo chmod 770 /home/samba/groupshare # 设置权限 sudo vim /etc/samba/smb.conf1 2 3 4 5 6 7 8 9[groupshare] comment = Group Share Directory path = /home/samba/groupshare valid users = @sambagrp write list = @sambagrp browseable = yes read only = no create mask = 0660 directory mask = 07701 2 3 4 5sudo systemctl restart smb nmb # 重启一下 # 加一个用户 sudo useradd groupuser1 sudo usermod -a -G sambagrp groupuser1 # a 是添加,G是修改用户所属的扩展群 sudo smbpasswd -a groupuser1- 配置一个共享目录,允许该组内的所有用户读写,但禁止其他用户访问。
- 验证:用一个新用户尝试访问,确认其被拒绝;用组内用户访问,确认可以正常读写。
1 2net use # 看连了什么 net use \\192.168.109.100 /delete # 先把原来的断开

WebDAV 配置
-
任务:搭建一个支持 WebDAV 协议的文件服务器,通过 HTTP/HTTPS 协议访问文件。
-
具体操作:
- 选择一个支持 WebDAV 的工具(例如 Nginx 或 Caddy),进行安装。
1 2 3 4 5 6 7 8#wget https://github.com/caddyserver/caddy/releases/download/v2.7.6/caddy_2.7.6_linux_amd64.tar.gz #tar -xzf caddy_2.7.6_linux_amd64.tar.gz #sudo mv caddy /usr/bin/ # 失败了,还是用 docker 吧 sudo mkdir -p /var/www/webdav sudo chown -R $USER:$USER /var/www/webdav # 设置目录所有者,方便后续操作 vi ~/caddy-webdav/Caddyfile # 也失败了,插件不会配,专用 Nginx参考 如何在 CentOS 7 服务器上通过 Nginx 部署 WebDAV
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23# 下载nginx wget1 https://github.com/nginx/nginx/archive/refs/tags/release-1.26.3.tar.gz # 解压nginx tar xvf release-1.26.3.tar.gz # 切换到nginx目录,下载nginx-dav-ext-module cd nginx-release-1.26.3/ wget1 https://github.com/arut/nginx-dav-ext-module/archive/refs/tags/v3.0.0.tar.gz # 解压nginx-dav-ext-module tar -xvf v3.0.0.tar.gz # 编辑安装 nginx,并且要指定插件!注意路径 auto/configure --prefix=/etc/nginx \ --conf-path=/etc/nginx/nginx.conf \ --sbin-path=/usr/sbin/nginx \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-stream --with-http\_dav\_module --with-http\_ssl\_module --with-http\_v2\_module \ --add-module=./nginx-dav-ext-module-3.0.0 # 编译剩余步骤 make && make install nginx -V # 验证1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19# vim /lib/systemd/system/nginx.service [Unit] Description=A high performance web server and a reverse proxy server Documentation=man:nginx(8) After=network.target nss-lookup.target [Service] Type=forking PIDFile=/run/nginx.pid # master... 要删掉! ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; #master\_process# on;' ExecStart=/usr/sbin/nginx -g 'daemon on; #master\_process on#;' ExecReload=/usr/sbin/nginx -g 'daemon on; #master\_process on#;' -s reload ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid TimeoutStopSec=5 KillMode=mixed [Install] WantedBy=multi-user.target1 2 3 4 5# 重加载systemd配置 systemctl daemon-reload systemctl enable nginx.service systemctl start nginx.service systemctl status nginx.service1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37# vim /etc/nginx/nginx.conf server { listen 8089; listen [::]:8089; server\_name localhost; # 认证方式 auth\_basic realm\_name; # 存放认证用户名、密码文件 auth\_basic\_user\_file /etc/nginx/.webdav/auth.list; # webdav服务访问的根目录 root /cherry\_data; dav\_methods PUT DELETE MKCOL COPY MOVE; dav\_ext\_methods PROPFIND OPTIONS LOCK UNLOCK; dav\_access user:rw group:rw all:r; client\_body\_temp\_path /tmp/webdav; client\_max\_body\_size 0; create\_full\_put\_path on; #添加索引指令,如果忘记这项配置,nginx访问会提示403 location /{ root /cherry\_data; autoindex on; autoindex\_format html; autoindex\_exact\_size off; autoindex\_localtime on; charset utf-8,gbk; } }1 2 3 4 5 6 7 8 9 10 11 12 13# 最后 nginx -s reload cd /etc/nginx/ mkdir .webdav cd .webdav/ # 设置用户名为admin echo -n 'admin:' | tee -a auth.list openssl passwd -apr1 | tee -a auth.list Password: #首次输入 Verifying - Password: #再次输入 mkdir /cherry\_data chmod 777 /cherry\_data # 访问的目录- 配置一个 WebDAV 共享目录,并设置基础认证。
- 验证:使用支持 WebDAV 的客户端(例如 Windows 的网络位置)或浏览器访问,输入用户名和密码,确认可以管理文件。
- 用 windows 映射挂载的时候,发现不能用 http 协议,得改一下注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\ParametersBasicAuthLevel 1改2- Win + R,services.msc;Webclent 重启


性能与安全性
-
任务:对你的文件服务器进行简单的性能测试和安全加固。
-
具体操作:
- 性能:使用
dd命令或其他工具,测试在 Samba 和 SFTP 上传大文件的速度,并进行简单对比。
Samba:
1 2 3 4 5 6 7 8 9 10 11 12 13 14PS C:\Users\calendar\Downloads> fsutil file createnew ./test 1073741824 已创建文件 C:\Users\calendar\Downloads\test PS C:\Users\calendar\Downloads> Measure-Command { Copy-Item -Path "C:\Users\calendar\Downloads\test" -Destination "\\192.168.109.100\groupshare" } Days : 0 Hours : 0 Minutes : 0 Seconds : 9 Milliseconds : 823 Ticks : 98231516 ...... TotalSeconds : 9.8231516 TotalMilliseconds : 9823.1516stfp:

-
安全:
- 为 SFTP 服务配置基于密钥的认证,禁用密码登录。
-
密钥工具生成密钥,
sftpuser/.ssh目录,创建authorized_keys文件,将复制的公钥内容粘贴进去并保存。 -
禁用密码:PasswordAuthentication 设置为 no
- 简要说明这种认证方式比密码认证更安全的原因。
密码认证存在被暴力破解、泄露等风险;而基于密钥的认证使用非对称加密,私钥仅存于客户端且难以破解,公钥即使暴露也无法用于登录,极大提升了安全性,能有效防范密码相关的攻击手段。
- 性能:使用