AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 425973
Accepted
Jon Buys
Jon Buys
Asked: 2018-02-23 11:55:07 +0800 CST2018-02-23 11:55:07 +0800 CST 2018-02-23 11:55:07 +0800 CST

为什么 SFTP 客户端不能在其 NFS 挂载的主目录中重命名文件?

  • 772

我有一个运行 SSH 的 Amazon Linux 实例作为 SFTP 服务器。客户端登录,并被 chroot 到 NFS 挂载的目录中。用户可以读取、写入和删除文件,但重命名文件失败并出现非特定的“协议错误”。

这是我的sshd_config文件的副本:

Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
UsePrivilegeSeparation yes

KeyRegenerationInterval 3600
ServerKeyBits 1024

SyslogFacility AUTH
LogLevel INFO

LoginGraceTime 120
PermitRootLogin prohibit-password
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes

IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no

PermitEmptyPasswords no

ChallengeResponseAuthentication no

PasswordAuthentication yes

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no

AcceptEnv LANG LC_*

# Subsystem sftp /usr/lib/openssh/sftp-server -u 0002
Subsystem sftp internal-sftp -l DEBUG -u 002 -d %u

UsePAM yes
Match Group sftpusers
    ChrootDirectory /autohome
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp -l DEBUG -u 002 -d %u

当源和目标位于不同的文件系统上时,我已经看到对 sftp rename 的引用不起作用,但这里不是这种情况。我还看到对 sftp rename 的引用在不支持硬链接的文件系统上不起作用,但我认为我们的 NFS 服务器(AWS 文件存储网关)应该没问题。我很茫然,任何帮助表示赞赏。

sshd sftp
  • 1 1 个回答
  • 1850 Views

1 个回答

  • Voted
  1. Best Answer
    Jon Buys
    2018-02-24T08:53:18+08:002018-02-24T08:53:18+08:00

    感谢@Kenster 的提示,我发现了这个问题。我错误地假设 AWS 文件存储网关 NFS 挂载支持硬链接,因为文档明确指出它不支持。

    我非常确定我最终使用 strace 跟踪系统调用就是这种情况。如果在 ssh 连接到服务器时将 sftp 客户端附加到服务器,则使用 .d 获取当前 sftp 进程的 pid ps -eaf | grep sftp。然后,您可以使用 strace 跟踪系统调用并使用以下命令将输出保存到文件中:strace -ff -p 2116 -o sftp_rename.log其中 -ff 跟踪子进程,-p 是 pid,-o 是输出文件。

    这会给你一些看起来很糟糕的输出,但我发现有趣的是这一点:

    write(7, "\0\0\0L\0\0\0\3\0\0\0Drename old \"/testuse"..., 80) = 80
    lstat("/testuser/test/asdfasdf.txt", {st_mode=S_IFREG|0664, st_size=159, ...}) = 0
    link("/testuser/test/asdfasdf.txt", "/testuser/test/as.txt") = -1 ENOTSUPP (Unknown error 524)
    

    然后我用一个简单的链接命令对其进行了测试,以创建一个硬链接,但失败了。

    # ln asdfasdf.txt link.txt
    ln: failed to create hard link ‘link.txt’ => ‘asdfasdf.txt’: Unknown error 524
    #
    

    这让我回到了 AWS 的文档。但这还不是全部,显然 SFTP 重命名将与实现供应商特定CMD_EXTENDED协议的某些客户端(如 Paramiko)一起使用,正如Paramiko 所做的那样:

        oldpath = self._adjust_cwd(oldpath)
        newpath = self._adjust_cwd(newpath)
        self._log(DEBUG, 'posix_rename({!r}, {!r})'.format(oldpath, newpath))
        self._request(
            CMD_EXTENDED, "[email protected]", oldpath, newpath
        )
    

    似乎没有任何方法可以强制posix-rename所有客户端使用该选项,但至少我们知道发生了什么以及为什么。

    • 2

相关问题

  • 为什么部分 SSH 公钥(和私钥)重叠?

  • 通过 SFTP 与一个用户一起写入文件夹,但仅与其他用户一起读取

  • ssh:连接到主机 abc-int.xxx.com 端口 22:连接超时无法读取数据包:对等方重置连接

  • 午夜指挥官:使用来自 ssh 配置的别名的 sftp 连接

  • 如何比较不同的 SSH 指纹(公钥哈希)格式?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve