Pular para conteúdo

SFTP_CHMOD - Alterar Permissões de Arquivo no Servidor SFTP

O que é este Node?

O SFTP_CHMOD é o node responsável por modificar permissões Unix/Linux de arquivos em servidor SFTP. Permite configurar read, write, execute para owner, group e others.

Por que este Node existe?

Controlar acesso a arquivos é fundamental para segurança. O SFTP_CHMOD existe para:

  1. Segurança: Restringir quem pode ler/modificar arquivos sensíveis
  2. Compliance: Implementar políticas de acesso (ex: apenas owner pode modificar)
  3. Automação: Ajustar permissões após upload (ex: tornar script executável)
  4. Colaboração: Permitir grupo específico acessar arquivo

Como funciona internamente?

Quando o SFTP_CHMOD é executado, o sistema:

  1. Conecta via SSH: Túnel criptografado
  2. Valida Permissões: Confirma formato octal (ex: 644, 755, 600)
  3. Executa Chmod: Comando SFTP chmod via SSH
  4. Atualiza Atributos: Servidor altera permissões do arquivo
  5. Registra: Log SSH audita mudança de permissões
  6. Se falhar: Erro (sem permissão para alterar)
  7. Se sucesso: Permissões atualizadas

Código interno (sftp-executor.service.ts - não implementado ainda):

private async chmodFile(sftp: SFTP, remotePath: string, mode: string): Promise<any> {
  // Converter string octal para número
  const modeNum = parseInt(mode, 8);

  await sftp.chmod(remotePath, modeNum);

  return {
    success: true,
    path: remotePath,
    mode: mode,
    modifiedAt: new Date().toISOString(),
    protocol: 'sftp'
  };
}

Permissões Unix (Formato Octal)

Octal Binário Permissões Significado
7 111 rwx Read + Write + Execute
6 110 rw- Read + Write
5 101 r-x Read + Execute
4 100 r-- Read only
0 000 --- Sem permissão

Formato: [owner][group][others]

Exemplos: - 644 = Owner: rw-, Group: r--, Others: r-- (arquivos comuns) - 755 = Owner: rwx, Group: r-x, Others: r-x (scripts executáveis) - 600 = Owner: rw-, Group: ---, Others: --- (arquivos privados)

Quando você DEVE usar este Node?

Use SFTP_CHMOD sempre que precisar de alterar permissões de arquivos:

Casos de uso

  1. Proteger Dados: "Definir 600 em arquivo de senhas (só owner lê/escreve)"
  2. Script Executável: "Definir 755 em script.sh após upload"
  3. Compartilhar com Grupo: "Definir 664 para grupo poder modificar"

Quando NÃO usar SFTP_CHMOD

  • Servidor Windows: Windows não usa permissões Unix
  • Sem Necessidade: Se permissões padrão são adequadas
  • Servidor FTP: FTP padrão não suporta chmod (use SFTP)

Parâmetros

Campo Tipo Obrigatório Descrição
host string Sim Servidor SFTP
port number Não Porta SSH (padrão: 22)
username string Sim Usuário SSH
password string Condicional Senha
privateKey string Condicional Chave SSH
operation string Sim Deve ser "chmod"
remotePath string Sim Arquivo a modificar
mode string Sim Permissões (formato octal: "644", "755", etc)
outputVariable string Não Variável resultado

Exemplo 1: Tornar Script Executável Após Upload

Objetivo: Upload script e torná-lo executável (755)

JSON para Importar

{
  "name": "Upload e Chmod Script",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "sftp_upload",
      "type": "sftp",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Upload Script",
        "parameters": {
          "host": "sftp.server.com",
          "username": "deploy",
          "password": "pass",
          "operation": "upload",
          "localFilePath": "/tmp/deploy.sh",
          "remoteFilePath": "/scripts/deploy.sh"
        }
      }
    },
    {
      "id": "sftp_chmod",
      "type": "sftp",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Tornar Executável",
        "parameters": {
          "host": "sftp.server.com",
          "username": "deploy",
          "password": "pass",
          "operation": "chmod",
          "remotePath": "/scripts/deploy.sh",
          "mode": "755"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "✅ Script enviado e configurado como executável (rwxr-xr-x)"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "sftp_upload" },
    { "source": "sftp_upload", "target": "sftp_chmod" },
    { "source": "sftp_chmod", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: ✅ Script enviado e configurado como executável (rwxr-xr-x)

Exemplo 2: Proteger Arquivo de Configuração

Objetivo: Definir permissões 600 (só owner acessa)

JSON para Importar

{
  "name": "Proteger Arquivo Sensível",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "sftp_chmod",
      "type": "sftp",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Proteger Config",
        "parameters": {
          "host": "sftp.app.com",
          "username": "admin",
          "privateKey": "/home/admin/.ssh/id_rsa",
          "operation": "chmod",
          "remotePath": "/etc/app/database.conf",
          "mode": "600"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "🔒 Arquivo protegido! Apenas owner pode ler/escrever (rw-------)"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "sftp_chmod" },
    { "source": "sftp_chmod", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: 🔒 Arquivo protegido! Apenas owner pode ler/escrever (rw-------)

Resposta do Node

{
  "success": true,
  "data": {
    "sftp_result": {
      "success": true,
      "path": "/scripts/deploy.sh",
      "mode": "755",
      "modifiedAt": "2025-01-15T11:30:00.000Z",
      "protocol": "sftp"
    }
  }
}

Boas Práticas

SIM:

  • Use 600 para arquivos com senhas/chaves
  • Use 644 para arquivos de leitura geral
  • Use 755 para scripts executáveis
  • Use 700 para diretórios privados

NÃO:

  • Não use 777 (todos podem ler/escrever/executar - inseguro!)
  • Não altere permissões de arquivos de sistema
  • Não use 000 (ninguém acessa, nem owner)

Dicas

💡 Dica 1: Permissões Unix: primeiro dígito = owner, segundo = group, terceiro = others.

💡 Dica 2: 7=rwx, 6=rw-, 5=r-x, 4=r--, 0=---

💡 Dica 3: Após upload de script, sempre faça SFTP_CHMOD com "755" para torná-lo executável.

💡 Dica 4: Para arquivos com credenciais, use "600" (rw-------). Evita vazamento.

Próximos Nodes

SFTP_UPLOAD - Upload antes de chmod → SFTP_LIST - Listar para ver permissões atuais → SFTP_EXISTS - Verificar se arquivo existe antes de chmod