SFTP的具体配置命令(如Linux下如何限制SFTP用户只能传文件不能登陆Shell)以及FTPS的证书生成步骤,

当前操作系统centos

限制SFTP用户和生成FTPS证书的详细操作步骤。这两套方案可以分别解决不同的安全需求

方案一:配置SFTP用户(只能传文件,不能登录Shell)

这是最推荐的方案,使用OpenSSH自带的 internal-sftp 和 ChrootDirectory 功能,非常安全且配置简单。

核心目标:创建一个用户,只能通过SFTP在指定目录下上传/下载文件,无法SSH登录,也无法访问系统的其他目录。

操作步骤

创建专用用户并禁止Shell登录

首先,创建一个用户并为其设置密码。关键在于使用 /sbin/nologin 作为登录Shell,这样用户就无法通过SSH登录到系统了。

bash

  # 创建用户,指定家目录和登录Shell
  useradd -m -s /sbin/nologin sftpuser
  # 设置密码
  passwd sftpuser

** 创建并设置目录(关键步骤)**
这是最容易出错的地方。用于锁定用户(Chroot)的根目录必须由 root 用户拥有,并且权限不能高于 755,否则用户将无法登录。

    bash

    # 1. 创建SFTP的根目录(用户被锁定的地方)
    mkdir -p /data/sftp/sftpuser
    chown root:root /data/sftp/sftpuser
    chmod 755 /data/sftp/sftpuser

2. 在根目录下创建一个子目录,用于用户实际读写文件

mkdir /data/sftp/sftpuser/upload
# 这个子目录的拥有者改为用户自己,用户才能在此写入文件
chown sftpuser:sftpuser /data/sftp/sftpuser/upload

修改SSH服务配置
编辑 /etc/ssh/sshd_config 文件:

  bash

   vi /etc/ssh/sshd_config

       找到并注释掉原有的 Subsystem 行,然后在下方添加 internal-sftp:
       text

       #Subsystem sftp /usr/libexec/openssh/sftp-server
       Subsystem sftp internal-sftp

在文件末尾添加以下配置来限制特定用户或用户组:
text

限制名为 sftpuser 的用户

  Match User sftpuser
         ChrootDirectory /data/sftp/sftpuser
         ForceCommand internal-sftp
         AllowTcpForwarding no
         X11Forwarding no


提示:如果有多个SFTP用户,推荐先创建一个组(如 groupadd sftpusers),然后将用户加入该组,最后在配置中使用 Match Group sftpusers,这样管理更方便。

重启SSH服务并测试
重启服务使配置生效:

    bash

    systemctl restart sshd

在另一台机器上测试连接,你会发现登录后只能看到 /upload 目录,且无法执行任何Shell命令。

    bash

    sftp sftpuser@你的服务器IP

方案二:为FTPS生成SSL证书

如果你的场景必须使用FTP协议(如老旧系统对接),可以给vsftpd配置SSL证书,升级为加密的FTPS。以下是在CentOS上生成和使用自签名证书的方法。
操作步骤

** 生成自签名证书**
使用 openssl 命令生成一个包含私钥和证书的PEM文件。这个证书有效期365天,用于测试环境或内部系统是足够的。

  bash

   # 生成一个2048位RSA密钥和自签名证书,合并保存为一个文件
   openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
       -keyout /etc/vsftpd/vsftpd.pem \
       -out /etc/vsftpd/vsftpd.pem

   # 设置证书文件的权限,确保安全
  chmod 600 /etc/vsftpd/vsftpd.pem

执行命令时,系统会提示你输入国家、地区、组织等信息,可以按实际情况填写,或直接回车跳过。

** 配置vsftpd启用SSL/TLS**
编辑vsftpd的配置文件 /etc/vsftpd/vsftpd.conf,添加或修改以下关键配置:
ini


    # 启用SSL
    ssl_enable=YES
    # 指定证书和私钥文件(二者在同一个文件里)
    rsa_cert_file=/etc/vsftpd/vsftpd.pem
    rsa_private_key_file=/etc/vsftpd/vsftpd.pem

    # 强制所有登录和数据传输使用SSL,保证安全
    force_local_logins_ssl=YES
    force_local_data_ssl=YES

    # 禁用不安全的旧协议,只启用TLS
    ssl_tlsv1_2=YES
    ssl_tlsv1_3=YES
    ssl_sslv2=NO
    ssl_sslv3=NO

根据你的网络环境,可能还需要配置被动模式端口范围,并在防火墙中放行这些端口。

** 重启vsftpd服务**
bash
systemctl restart vsftpd

之后用FileZilla等客户端连接时,选择 "要求显式的FTP over TLS" ,并信任该自签名证书即可。

总结与选择建议

方案	安全级别	配置难度	适用场景
SFTP用户限制	极高(基于SSH,加密传输+权限隔离)	中等	通用首选,适用于绝大多数现代环境。可完美替代FTP。
FTPS证书生成	高(FTP协议加SSL加密)	中等	仅当有老旧系统或特定程序强制要求使用FTP协议时。

如果只是日常使用,强烈建议优先采用方案一(SFTP),它安全且配置好后一劳永逸。如果因为特殊原因必须使用FTP,再参考方案二配置FTPS

posted @ 2026-09-06 12:52  JacobJacob  阅读(11)  评论(0)    收藏  举报