AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 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

Por que os clientes SFTP não podem renomear um arquivo em seu diretório inicial montado pelo NFS?

  • 772

Eu tenho uma instância do Amazon Linux executando SSH atuando como um servidor SFTP. Os clientes efetuam login e são colocados em chroot em um diretório montado por NFS. Os usuários podem ler, gravar e excluir arquivos, mas a renomeação de arquivos falha com um "erro de protocolo" não específico.

Aqui está uma cópia do meu sshd_configarquivo:

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

Eu vi referência ao sftp renomear não funcionando quando a origem e o destino estão em sistemas de arquivos separados, mas esse não é o caso aqui. Também vi referências à renomeação de sftp que não funcionam em sistemas de arquivos que não oferecem suporte a links físicos, mas acho que nosso servidor NFS (AWS File Storage Gateway) deve funcionar bem. Estou perdido, qualquer ajuda é apreciada.

sshd sftp
  • 1 1 respostas
  • 1850 Views

1 respostas

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

    Graças à dica de @Kenster, encontrei o problema. Eu estava enganado ao presumir que o NFS do AWS File Storage Gateway montava hard links suportados, já que a documentação afirma claramente que não.

    Eu tinha tanta certeza de que era esse o caso que acabei rastreando as chamadas do sistema com strace. Se você anexar um cliente sftp ao seu servidor durante o ssh, obtenha o pid do processo sftp atual com ps -eaf | grep sftp. Em seguida, você pode rastrear as chamadas do sistema com strace e salvar a saída em um arquivo com este comando: strace -ff -p 2116 -o sftp_rename.logonde -ff segue os processos filhos, -p é o pid e -o é o arquivo de saída.

    Isso fornecerá uma saída realmente terrível, mas o que achei interessante foi este trecho:

    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)
    

    Que testei com um comando de link simples para criar um link físico, que falhou.

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

    O que me levou de volta à documentação da AWS. Porém, isso não é tudo, aparentemente a renomeação do SFTP funcionará com certos clientes (como o Paramiko) que implementam um CMD_EXTENDEDprotocolo específico do fornecedor, como o Paramiko faz :

        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
        )
    

    Não parece haver nenhuma maneira de forçar o uso da posix-renameopção para todos os clientes, mas pelo menos sabemos o que aconteceu e por quê.

    • 2

relate perguntas

  • Por que partes das chaves SSH públicas (e privadas) se sobrepõem?

  • Grave na pasta com um usuário via SFTP, mas leia somente com outro usuário

  • ssh: conectar ao host abc-int.xxx.com porta 22: Tempo limite da conexão esgotado Não foi possível ler o pacote: Conexão redefinida pelo ponto

  • Midnight Commander: conexão sftp usando aliases da configuração ssh

  • Como comparar diferentes formatos de impressão digital SSH (hash de chave pública)?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve