SFTP账号连接出现错误fatal: bad ownership or modes for chroot directory component “/“ [postauth]

目录

一、当前环境

二、问题背景

三、报错分析

四、解决问题


一、当前环境

CentOS 7.3

OpenSSH_7.4p1 (如果低于4.8p1,需要自行升级安装)

sftp group组 sftpusers

sftpadmin用户隶属于sftpusers组

sftp账号 testuser

二、问题背景

出于安全考虑sftp服务器上root账号需要禁用SSH远程连接,想使用sftpadmin账号通过脚本自动下载所有sftp账号home目录upload文件夹下的文件到本地保存并从服务器上删除。

因为当前sftpadmin账号没有删除其他账号home目录下upload文件夹内文件的权限,所以将所有sftp账号home目录下的upload文件夹权限改成了775,希望实现下载文件保存后并删除。批量更改后,发现所有账号都无法通过winscp软件连接到sftp服务器。

三、报错分析

连接不上,登录服务器直接查看/var/log/secure 里面的日志

tail /var/log/secure -n 20  # 可以只查看最近20条记录
Oct 26 18:37:11 centos-machine sshd[24928]: pam_unix(sshd:session): session opened for user TEST2022 by (uid=0)
Oct 26 18:37:12 centos-machine sshd[24928]: fatal: bad ownership or modes for chroot directory component "/" [postauth]
Oct 26 18:37:12 centos-machine sshd[24928]: pam_unix(sshd:session): session closed for user TEST2022

可能导致的原因:错误的目录权限设定会导致在log中出现”fatal: bad ownership or modes for chroot directory XXXXXX” 的内容。

目录的权限设定有两个要点:
1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限

如果不能遵循以上 2 点,即使是该目录仅属于某个用户,也可能会影响到所有的 SFTP 用户。

四、解决问题


所以遵循以上两个原则

ChrootDirectory 这里是 /data/sftp/testuser


1、我们将 /data/sftp/testuser的所有者设置为root,所有组设置为sftpusers

chown root:sftpusers /data/sftp/testuser 


2、我们讲/opt/sftp/testuser的权限设置为755,所有者root有写入权限,而所有组sftp无写入权限

chmod 755 /data/sftp/testuser

设置sftp用户登入后可写入的目录  在upload文件夹里上传文件

这里目录是 /data/sftp/testuser/upload

1、我们将 /data/sftp/testuser/upload的所有者设置为testuser,所有组设置为sftpusers

chown testuser:sftpusers /data/sftp/testuser/upload

2、我们将/opt/sftp/testuser的权限设置为755,所有者testuser有写入权限,而所有组sftpusers无写入权限

chmod 755 /data/sftp/testuser/upload

完成后重启sshd服务

systemctl restart sshd

到这里问题解决,testuser(包含其他账号)已经可以通过sftp客户端登录并可以上传文件到upload目录。

<think>好的,我现在需要帮助用户解决SSH登录时出现的“fatal: bad ownership or modes for chroot directory component '/mysql/' [postauth]”错误。首先,我得回忆一下用户提供的引用内容,特别是关于chroot目录权限的问题。 根据引用[2],错误是因为chroot目录的所有权或权限设置不符合SSHD的要求。用户提到的路径是“/mysql/”,所以首先应该检查这个目录的所有者和权限。根据引用[5],ChrootDirectory需要特定的权限设置,比如目录的所有者必须是root,并且其他用户不能有写入权限。 接下来,我需要分步骤思考解决方法。首先,确认目录的所有权是否正确。用户可能将目录的所有者设置为了非root用户,比如mysql用户,这会导致问题。然后检查目录的权限,是否设置为755,即drwxr-xr-x。如果有其他权限,比如组用户有写权限,或者其他人有写权限,就会触发错误。 另外,根据引用[4],类似的问题出现在/root/.ssh目录时,权限问题也会导致认证失败。所以同样适用于这里的chroot目录。需要确保整个路径上的所有父目录(比如/mysql的上级目录)的权限也符合要求,即不能有组或其他用户的写权限。 可能的解决方案步骤包括: 1. 修改目录所有者为root。 2. 设置目录权限为755。 3. 检查父目录的权限是否也符合要求。 4. 确保目录下的文件或子目录的正确权限,但chroot目录本身必须严格限制。 5. 重启SSH服务应用更改。 用户可能需要执行的具体命令是: - sudo chown root:root /mysql/ - sudo chmod 755 /mysql/ - 检查父目录如/mysql的上层路径权限,确保每个目录都是root所有且权限为755或更严格。 此外,根据引用[3],错误的权限设定会导致此类错误,所以需要强调严格遵循权限要求。最后,建议用户应用更改后重启sshd服务,并测试连接是否成功。</think>要解决 SSH 登录时出现的错误 `fatal: bad ownership or modes for chroot directory component "/mysql/" [postauth]`,需按照以下步骤检查和修复目录权限: --- ### **1. 检查目录所有权** - **要求**:`/mysql/` 目录及其所有父目录(如 `/`)必须为 **root 用户和 root 组** 所有。 - **修复命令**: ```bash sudo chown root:root /mysql/ # 修改目录所有者 ``` --- ### **2. 设置目录权限** - **要求**:`/mysql/` 目录权限应为 `755`(即 `drwxr-xr-x`),且 **不允许其他用户或组写入**。 - **修复命令**: ```bash sudo chmod 755 /mysql/ # 设置目录权限为755 ``` --- ### **3. 检查父目录权限** - **要求**:从根目录 `/` 到 `/mysql/` 的每一级父目录(如 `/`、`/mysql`)均需满足以下条件: - 所有权为 `root:root` - 权限为 `755` 或更严格(如 `750`) - **检查命令**: ```bash namei -l /mysql/ # 查看路径中所有目录的权限和所有者 ``` --- ### **4. 验证目录结构** - **要求**:`/mysql/` 目录本身不能是软链接,且必须是**空目录**(若需挂载子目录,需通过 `mount --bind` 实现)。 - **验证方法**: ```bash ls -ld /mysql/ # 确认目录类型和内容 ``` --- ### **5. 重启 SSH 服务** 完成修改后,重启 SSH 服务以应用配置: ```bash sudo systemctl restart sshd # 适用于systemd系统 ``` --- ### **错误原因解析** SSH 对 chroot 目录的权限要求严格,以防止权限滥用。若目录被非 root 用户拥有,或权限过松(如允许写入),SSH 会拒绝连接以保障安全性[^2][^5]。此机制常见于 SFTP 或受限 Shell 环境配置中[^3]。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值