当前位置:首页>Linux>Linux搭建共享磁盘 + SFTP 文件传输服务

Linux搭建共享磁盘 + SFTP 文件传输服务

  • 2026-10-10 13:06:43
Linux搭建共享磁盘 + SFTP 文件传输服务

在企业或开发环境中,常常需要一个安全、稳定、可远程访问的共享存储空间,用于文件上传、同步或备份

在 CentOS 7 系统上:

  1. 搭建 Samba 共享目录(局域网内 Windows/Linux 可挂载)
  2. 配置 SFTP 服务(通过 SSH 安全上传/下载文件)

两者共用同一个共享目录 /app/shared,既支持图形化访问(Samba),也支持命令行/工具上传(SFTP)。


一、准备工作

确保你的服务器已联网,并以 root 用户或具备 sudo 权限的用户登录。

# 更新系统(可选)yum update -y

二、创建共享目录与用户组

# 创建共享目录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:

vi /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 服务

systemctl restart sshd

六、测试 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 权限,无法执行命令,提升安全性
  • SFTP 使用 SSH 加密,比 FTP 更安全

八、常见问题

Q:SFTP 登录失败?A:检查是否设置了系统密码(passwd smbuser),而非仅 Samba 密码。

Q:文件权限混乱?A:确保目录有 SGID 位(chmod 2775),且 umask 设置合理。

Q:能否让多个用户访问?A:可以!将多个用户加入 sambashare 组,并在 Samba 的 valid users 中添加他们。

最新文章

随机文章