在企业或开发环境中,常常需要一个安全、稳定、可远程访问的共享存储空间,用于文件上传、同步或备份
在 CentOS 7 系统上:
- 搭建 Samba 共享目录(局域网内 Windows/Linux 可挂载)
- 配置 SFTP 服务(通过 SSH 安全上传/下载文件)
两者共用同一个共享目录 /app/shared,既支持图形化访问(Samba),也支持命令行/工具上传(SFTP)。
一、准备工作
确保你的服务器已联网,并以 root 用户或具备 sudo 权限的用户登录。
二、创建共享目录与用户组
# 创建共享目录mkdir -p /app/shared# 设置 SGID 位:确保新创建的文件自动继承父目录的组chmod 2775 /app/shared# 创建专用用户组groupadd sambashare# 将目录归属到该组chgrp sambashare /app/shared
三、创建专用系统用户(禁止 Shell 登录)
出于安全考虑,我们创建一个不能登录系统 Shell 的用户,仅用于文件访问:
# 创建无家目录、无登录权限的用户useradd -M -s /sbin/nologin smbuser# 将共享目录所有权赋予该用户和组chown -R smbuser:sambashare /app/shared
四、配置 Samba 共享(局域网访问)
1. 安装 Samba
yum install -y samba samba-common samba-client
2. 设置 Samba 密码
注意:Samba 密码独立于系统密码
smbpasswd -a smbuser # 输入两次密码,例如:Smb@123456smbpasswd -e smbuser # 启用该用户
3. 配置 /etc/samba/smb.conf
先备份原配置:
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
编辑配置文件,在末尾添加:
[shared] comment = CentOS 7 Samba Shared Folder path = /app/shared browseable = yes writable = yes guest ok = no valid users = smbuser create mask = 0664 directory mask = 0775
4. 启动并启用服务
systemctl start smb nmbsystemctl enable smb nmb
5. 防火墙放行(如启用)
firewall-cmd --permanent --add-service=sambafirewall-cmd --reload
现在,Windows 或 Linux 客户端可通过 \\Linux服务器IP\shared 访问共享(替换为你的实际 IP)。
五、配置 SFTP 服务(安全文件上传/下载)
很多场景下,我们希望开发者或 CI/CD 工具能通过 SFTP(基于 SSH 的文件传输协议)上传文件到共享目录。下面进行配置。
1. 为 smbuser 设置系统密码(用于 SFTP 认证)
注意:SFTP 使用的是系统账户密码,不是 Samba 密码!
passwd smbuser# 输入密码,例如:Sftp@123456(建议与 Samba 密码不同)
2. 修改 SSH 配置以启用 internal-sftp
编辑 /etc/ssh/sshd_config:
找到 Subsystem sftp 行,注释掉原行,添加新行:
# Subsystem sftp /usr/libexec/openssh/sftp-serverSubsystem sftp internal-sftp
使用 internal-sftp 更安全,且便于后续限制用户目录(Chroot)。
3. (可选但推荐)限制 smbuser 仅能访问共享目录
在 sshd_config 末尾追加:
Match User smbuser ChrootDirectory /app/shared ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
⚠️ 若使用 Chroot,请确保 /app/shared 的权限严格为 root 所有(这是 OpenSSH 的安全要求):
chown root:sambashare /app/sharedchmod 755 /app/shared
但这样会导致 Samba 写入失败。因此,若需同时支持 Samba 和 SFTP,建议暂不启用 Chroot,或使用更复杂的 bind mount 方案。
✅ 本文为简化操作,暂不启用 Chroot,仅启用 SFTP 基础功能。
4. 重启 SSH 服务
六、测试 SFTP 连接
从另一台机器使用 SFTP 客户端连接:
sftp -oPort=22 smbuser@Linux服务器IP
输入系统密码后,即可上传/下载文件:
sftp> put local_file.txt /shared/sftp> get /shared/config.ini .sftp> quit
✅ 文件将直接存入 /app/shared,Samba 用户也能立即看到!
七、权限说明与最佳实践
- 所有通过 Samba 或 SFTP 创建的文件,组均为
sambashare create mask = 0664 和 directory mask = 0775 确保组内成员可读写- 用户
smbuser 无 Shell 权限,无法执行命令,提升安全性
八、常见问题
Q:SFTP 登录失败?A:检查是否设置了系统密码(passwd smbuser),而非仅 Samba 密码。
Q:文件权限混乱?A:确保目录有 SGID 位(chmod 2775),且 umask 设置合理。
Q:能否让多个用户访问?A:可以!将多个用户加入 sambashare 组,并在 Samba 的 valid users 中添加他们。