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
浙公网安备 33010602011771号