Linux单个用户配置安装SFTP

本文详细指导如何在Linux系统中为sftp用户创建专用目录,配置sshd_config以限制权限,包括添加用户、组,设置Chroot和ForceCommand,确保数据安全。

参考:https://www.cnblogs.com/bky185392793/p/7365809.html

一.添加用户和组

groupadd sftp
useradd -g sftp -s /sbin/nologin -M sftp
passwd sftp

-g:加入主要组 -s指定用户登入后所使用的shell -M:不要自动建立用户的登入目录,密码自己定

二,创建sftp用户活动的目录

(1)创建sftp用户的根目录和属主.属组,修改权限(755)

mkdir /data/
cd /data/
mkdir sftp
chown root:sftp sftp
chmod 755 /data/sftp/

(2)在sftp的目录中创建可写入的目录

cd sftp/
mkdir file
chown sftp:sftp file

三.修改sshd_config配置文件cd /etc/ssh/

cd /etc/ssh/
vim sshd_config
#Subsystem	sftp	/usr/libexec/openssh/sftp-server
Subsystem      sftp    internal-sftp
# Example of overriding settings on a per-user basis
Match User sftp
	X11Forwarding no
	AllowTcpForwarding no
#	PermitTTY no
	ForceCommand internal-sftp
        ChrootDirectory /data/sftp

把Subsystem sftp /usr/libexec/openssh/sftp-server注释
配置解释:

Subsystem sftp internal-sftp     #使用sftp服务使用系统自带的internal-sftp
Match Group sftp                 #匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割
ChrootDirectory /data/sftp/%u    #用chroot将用户的根目录指定到/data/sftp/%u,%u代表用户名,这样用户就只能在/data/sftp/%u下活动
ForceCommand internal-sftp       #强制执行内部sftp,并忽略任何~/.ssh/rc文件中的命令
AllowTcpForwarding no            #不允许转发TCP协议,默认是yes,如果用户可以shell访问则建议为yes
X11Forwarding no                 #是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。如果允许X11转发并且sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,此指令默认值为"no"。需要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器。如果启用了 UseLogin ,那么X11转发将被自动禁止。

四.重启服务

# systemctl restart sshd

五.测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<think> 根据用户需求,用户希望手动安装SFTP服务并修改其端口。结合提供的引用内容,引用[1]中提到了修改OpenSSHsshd_config文件来更改端口,并重启服务。引用[2]提到了创建用户,但这是针对FTP的,不过创建用户的步骤类似。引用[3]是关于SSL证书安装的,与当前问题关联不大。 因此,我将要参考引用[1]的内容,同时结合常规的SFTP安装步骤,给出手动安装SFTP(这里以Windows OpenSSH为例)并修改端口的步骤。注意,SFTP通常是SSH的一部分,因此安装SFTP服务通常意味着安装SSH服务器,因为SFTP通过SSH协议运行。 以下是步骤: 1. 安装OpenSSH服务器(如果尚未安装): - 在Windows 10 1809及以上版本或Windows Server 2019中,可以通过“设置”->“应用”->“可选功能”->“添加功能”来安装OpenSSH服务器。 - 或者,通过PowerShell安装:以管理员身份运行PowerShell,执行: ```powershell Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 ``` 2. 启动并设置OpenSSH服务: - 启动服务: ```powershell Start-Service sshd ``` - 设置服务自动启动: ```powershell Set-Service -Name sshd -StartupType 'Automatic' ``` 3. 修改SFTPSSH)端口: - 打开配置文件:`C:\ProgramData\ssh\sshd_config`(注意,引用[1]中的路径可能是旧版本,新版本通常在ProgramData下)。 - 找到`#Port 22`这一行,去掉注释(删除前面的`#`),并将22改为想要的端口,例如8029。 - 保存文件。 4. 重启OpenSSH服务: ```powershell Restart-Service sshd ``` 5. 防火墙配置: - 允许新端口通过防火墙(例如8029): ```powershell New-NetFirewallRule -Name "OpenSSH-Server (Custom Port)" -DisplayName "OpenSSH Server (Custom Port)" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 8029 ``` 6. 创建SFTP用户(参考引用[1]和引用[2]的步骤): - 创建Windows用户(例如用户名为sftp_user): ```powershell New-LocalUser -Name "sftp_user" -Password (Read-Host -AsSecureString "输入密码") -FullName "SFTP User" -Description "Account for SFTP access" ``` - 设置用户密码(在创建时输入)。 - 将用户添加到OpenSSH的允许用户列表中(可选,如果不添加则所有用户都可以尝试登录): 在`sshd_config`文件中,可以添加一行: ``` AllowUsers sftp_user ``` 然后重启服务。 7. 测试连接: - 使用SFTP客户端(如WinSCP或FileZilla)连接,地址为服务器IP,端口为新端口(如8029),用户名和密码为创建的用户凭证。 注意:引用[1]中还提到了使用`mkpassword`工具添加用户到OpenSSH的passwd文件,但新版本的OpenSSH for Windows已经不再使用passwd文件,而是直接使用Windows账户系统。因此,只需创建Windows用户并确保其可以登录即可。 如果用户需要限制SFTP用户只能访问特定目录(即chroot),则还需要在sshd_config中配置Subsystem和ChrootDirectory,但这超出了用户当前问题的范围。 最后,根据引用[1]的提示,如果以后要添加更多用户,只需创建新的Windows用户,并确保在sshd_config中允许该用户(通过AllowUsers)或者允许用户组(AllowGroups)。 以上步骤适用于Windows系统。如果用户需要Linux下的步骤,请告知,但根据引用内容,用户提供的引用都是Windows相关的。 §§相关问题§§ 1. 如何配置SFTP用户的chroot(限制用户只能访问指定目录)? 2. 在Windows OpenSSH中,如何配置公钥认证以替代密码登录? 3. 修改SFTP端口后连接不上,如何排查问题? </think> ### 手动安装SFTP并修改端口的方法(Windows环境) #### 一、安装OpenSSH服务1. **启用OpenSSH功能**: - 打开 PowerShell(管理员身份) ```powershell # 安装OpenSSH服务器组件 Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 ``` 2. **启动并配置服务**: ```powershell # 启动SSH服务 Start-Service sshd # 设置开机自启 Set-Service -Name sshd -StartupType 'Automatic' ``` --- #### 二、修改SFTP端口(关键步骤) 1. **编辑配置文件**: - 打开文件:`C:\ProgramData\ssh\sshd_config`(新版本路径)或`C:\Program Files\OpenSSH\etc\sshd_config`(旧版本) - **找到并修改以下行**: ```ini #Port 22 → Port 8029 (示例端口) ``` 取消注释并替换为目标端口(如8029)[^1] 2. **重启服务生效**: ```powershell Restart-Service sshd ``` --- #### 三、添加SFTP用户 1. **创建系统用户**: ```powershell # 创建用户(示例用户名为sftpuser) New-LocalUser -Name "sftpuser" -Password (ConvertTo-SecureString "YourPassword" -AsPlainText -Force) ``` > ✅ 确保不勾选"下次登录必须改密码" 2. **授权访问SFTP**: ```powershell # 将用户添加到OpenSSH授权列表 cd "C:\Program Files\OpenSSH\bin" .\mkpassword -l -u sftpuser >> ..\etc\passwd ``` > ⚠️ `-u`参数添加单个用户,无参数则添加所有系统用户[^1] --- #### 四、防火墙配置 ```powershell # 放行新端口(以8029为例) New-NetFirewallRule -Name "SFTP_CustomPort" -DisplayName "SFTP (Port 8029)" -Direction Inbound -Protocol TCP -LocalPort 8029 -Action Allow ``` --- #### 五、连接测试 使用客户端(如WinSCP)连接: - 服务器:`sftp://your_ip:8029` - 用户名/密码:创建的SFTP凭证 > 💡 **诊断命令**: > ```powershell > # 检查端口监听 > netstat -ano | findstr ":8029" > # 查看日志 > Get-WinEvent -LogName "OpenSSH/Operational" -MaxEvents 20 > ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值