OpenSSH的Chroot设置

修改  /etc/ssh/sshd_config
#注释原本的Subsystem设置
#Subsystem    sftp    /usr/libexec/openssh/sftp-server
 
#启用internal-sftp
Subsystem       sftp    internal-sftp
 
Match Group   ftpuser
ChrootDirectory   /vhost
ForceCommand    internal-sftp
 
 
 
需要注意的是/vhost目录所有者必须为root, 并且目录权限必须为755, 否则组内用户无法登陆
组内用户仅对 /vhost内部的目录有权限,所以需要对子目录设置为775权限,如果设置chroot前内部目录已经存在,
不能通过chmod统一设置(会覆盖掉一些权限为777的目录), 此时可以通过acl命令
为目录设置额外权限
apt-get install acl
setfacl -R -d -m g:ftpuser:rwx /vhost   #对所有子目录设置默认ACL权限,从目录下创建文件会继承
setfacl -R -m g:ftpuser:rwx /vhost      #对子目录下所有文件及目录设置ACL权限
可以通过getfacl查看ACL权限是否设置成功
<think>我们正在配置Windows OpenSSH服务端的ChrootDirectory,并且特别关注如何为SYSTEM用户设置权限。在Windows中,OpenSSH服务通常以SYSTEM账户运行,因此我们需要确保SYSTEM账户对Chroot目录有适当的权限。 根据OpenSSH的官方文档和Windows权限模型,ChrootDirectory必须满足以下条件: 1. 目录的所有者必须是SYSTEM或Administrators。 2. 目录不能有其他用户的写权限(除了SYSTEM和Administrators)。 3. 目录必须允许SYSTEM账户完全控制(因为SSH服务以SYSTEM身份运行)。 4. 目录的父目录也必须满足相同的权限要求(直到根目录)。 具体步骤: 1. 创建Chroot目录(如果尚未创建): ``` mkdir D:\ssh ``` 2. 设置目录权限: 我们需要使用icacls命令设置权限。由于SYSTEM账户是服务运行账户,必须拥有完全控制权限。同时,为了安全,我们移除继承权限,并设置最小权限。 以管理员身份打开PowerShell,执行以下命令: ```powershell # 移除继承权限,并复制现有权限 icacls "D:\ssh" /inheritance:r # 授予SYSTEM账户完全控制权限(递归) icacls "D:\ssh" /grant "NT AUTHORITY\SYSTEM:(OI)(CI)F" # 授予Administrators组完全控制权限(递归) icacls "D:\ssh" /grant "Administrators:(OI)(CI)F" # 移除其他所有用户的权限(可选,但为了安全,我们可以移除Users组的权限,如果不需要的话) icacls "D:\ssh" /remove "Users" ``` 注意:`(OI)`代表对象继承,`(CI)`代表容器继承,`F`代表完全控制。 3. 配置sshd_config: 打开`C:\ProgramData\ssh\sshd_config`文件,添加或修改以下配置: ``` Subsystem sftp internal-sftp Match Group chrootgroup # 或者使用Match User指定用户 ChrootDirectory D:/ssh ForceCommand internal-sftp AllowTcpForwarding no PermitTunnel no X11Forwarding no ``` 注意:这里使用正斜杠`D:/ssh`,并且目录路径是绝对路径。 4. 创建用户和组(如果需要): 将需要被chroot的用户加入一个组(例如chrootgroup),然后在Match语句中使用该组。 5. 重启服务: ```powershell Restart-Service sshd ``` 6. 测试: 使用一个属于chrootgroup组的用户登录,检查是否被限制在D:\ssh目录内。 重要提示: - 在ChrootDirectory下,用户需要访问一些必要的文件和目录(如shell、命令等)才能进行交互式登录。但是,如果我们使用的是SFTP(ForceCommand internal-sftp),则不需要这些,因为SFTP不需要shell。 - 如果用户需要交互式shell,则需要在ChrootDirectory内创建必要的目录结构(如bin, lib等)并复制所需的程序及其依赖。在Windows中,这通常很复杂,因此通常建议仅使用SFTP。 对于SYSTEM用户,我们主要关注的是服务运行账户(SYSTEM)对目录的权限。上述权限设置已经满足了SYSTEM账户完全控制的需求。 如果遇到登录问题,请检查事件查看器(Event Viewer)中的Windows日志>应用程序,查找来自OpenSSH的错误信息。 引用说明: - 根据OpenSSH文档,ChrootDirectory必须由root(在Windows中对应SYSTEM或Administrators)拥有,且其他用户不能有写权限[^1]。 - Windows权限设置使用icacls命令,确保最小权限原则[^4]。 相关问题: 1. 如何解决Windows OpenSSH ChrootDirectory配置后用户登录失败的问题? 2. 在Windows环境下,如何为ChrootDirectory内的用户提供基本的shell访问? 3. 如何配置Windows OpenSSH以允许SFTP用户上传文件到ChrootDirectory? 4. Windows OpenSSHChrootDirectory与Linux下的配置有哪些主要差异?</think>### Windows OpenSSH ChrootDirectory配置指南(适配SYSTEM用户) 在Windows OpenSSH服务中为`ChrootDirectory D:/ssh`配置SYSTEM用户权限时,需严格遵循以下步骤: #### 1. **目录权限设置(核心步骤)** ```powershell # 移除所有继承权限 icacls "D:\ssh" /inheritance:r # 授予SYSTEM用户完全控制权限(必须) icacls "D:\ssh" /grant "NT AUTHORITY\SYSTEM:(OI)(CI)F" # 授予Administrators组完全控制权限(可选) icacls "D:\ssh" /grant "Administrators:(OI)(CI)F" # 移除其他所有用户权限(关键安全措施) icacls "D:\ssh" /remove "Users" /remove "Authenticated Users" /remove "Everyone" ``` **权限要求**: - **SYSTEM用户必须拥有完全控制权限**(F标志),因为OpenSSH服务以SYSTEM身份运行[^1] - 禁止其他任何用户写入权限(W标志) - 目录所有权必须属于SYSTEM或Administrators[^4] #### 2. **sshd_config配置** ```config # 启用SFTP子系统 Subsystem sftp internal-sftp # 应用Chroot规则 Match Group chrootgroup # 或指定用户 Match User username ChrootDirectory D:/ssh # 必须使用正斜杠 ForceCommand internal-sftp AllowTcpForwarding no PermitTunnel no X11Forwarding no ``` #### 3. **用户目录创建(可选)** 若需为不同用户创建独立目录: ```powershell mkdir D:\ssh\user1 icacls "D:\ssh\user1" /grant "username:(OI)(CI)M" # M=修改权限 ``` #### 4. **服务重启与验证** ```powershell Restart-Service sshd # 测试连接 sftp -v user@localhost ``` #### 5. **关键注意事项** 1. **路径格式**:配置文件中必须使用`D:/ssh`(正斜杠),Windows路径需转换 2. **权限继承**:必须禁用子目录权限继承(`/inheritance:r`) 3. **SYSTEM权限**:确保SYSTEM拥有完全控制(F),否则服务无法访问目录[^1] 4. **日志监控**:检查事件查看器中的SSH错误日志: ```powershell Get-WinEvent -LogName Application -ProviderName OpenSSH | Where-Object {$_.Level -le 3} ``` > 配置完成后,用户将被严格限制在`D:\ssh`目录内,且SYSTEM用户拥有必要的服务访问权限[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值