Tag: sftp

  • Integração SFTP x SharePoint

    Surgiu uma demanda por parte de um cliente: eles receberiam arquivos de parceiros através de SFTP e havia a necessidade de que esses arquivos subissem para o SharePoint. A solução foi utilizar um servidor Windows com OpenSSH e OneDrive para fazer essa integração.

    Uma conta Microsoft dedicada foi criada para conectar o servidor ao OneDrive, digamos sftp@exemplo.com. O site e a biblioteca no SharePoint foram criados e foi adicionado um atalho para a biblioteca ao OneDrive dessa conta.

    O OneDrive foi configurado através de uma outra conta local criada sem privilégios de administrador, com nome de sftp. O atalho para a biblioteca “sftp-1drv” aparece como algo do tipo C:\Users\sftp\OneDrive \sftp-1drv.

    Então, o serviço de SSH é instalado através do PowerShell com:

    PS C:\Users\Administrator> Add-WindowsCapability -Name OpenSSH.Server~~~~0.0.1.0 -Online

    Alguns requisitos:

    • Cada usuário do SFTP deve ter acesso à sua própria pasta e o acesso a outras deve ser restringido.
    • Nenhum dos usuários deve ter acesso ao prompt de comando através de SSH.
    • Por segurança, o acesso por senha deve ser impedido, permitindo apenas o acesso através de par de chaves pública-privada.

    Os dois primeiros podem ser alcançados adicionando a seguinte configuração ao arquivo de configuração do OpenSSH localizado em C:\ProgramData\ssh\sshd_config:

    Match Group "SFTP Users"
           ChrootDirectory "C:\Users\sftp\OneDrive\sftp-1drv\%u"
           ForceCommand internal-sftp
           AllowTcpForwarding no

    Onde %u é o nome de usuário e “SFTP Users” é o grupo ao qual os usuários pertencem.

    O grupo pode ser criado com:

    C:\Windows\System32> net localgroup "SFTP Users" /add

    O acesso através de senha pode ser desabilitado configurando o seguinte parêmetro:

    PasswordAuthentication no

    Após configurado, marque o serviço para iniciar com o sistema e inicie-o:

    PS C:\Windows\Administrator> Set-Service -Name 'sshd' -StartupType 'automatic'
    PS C:\Windows\Administrator> Start-Service sshd

    A permissão da pasta precisa ser configurada no NTFS para permitir o acesso dos membros do grupo “SFTP Users”:

    C:\Windows\Administrator> icacls "C:\Users\sftp\OneDrive\sftp-1drv" /grant "SFTP Users":(OI)(CI)(F)

    Agora, usuários precisam ser criados. O que precisa ser feito:

    • Criar o usuário;
    • Incluí-lo ao grupo SFTP Users;
    • Criar a pasta do usuário no SharePoint;
    • Gerar as chaves RSA ou Ed25519 para acesso ao SFTP;
    • Permitir o acesso ao usuário através do par de chaves criado;
    • Copiar a chave privada para o SharePoint para que a chave seja passada ao usuário.

    Para copiar a chave privada para o SharePoint, foi criada uma pasta separada para isso em C:\Users\sftp\OneDrive\sftp-1drv\_chaves_sftp.

    O procedimento então foi parcialmente automatizado através de um batch script simples que recebe o nome de usuário como argumento:

    if not exist "%userprofile%\.ssh" (
    mkdir "%userprofile%\.ssh"
    )
    net user "%1" /add
    net user "%1" $enha@12321
    net localgroup "SFTP Users" "%1" /add
    :: a linha abaixo é necessária para que a pasta do perfil do usuário seja criada pelo sistema
    runas /user:"%1" "cmd /c exit"
    mkdir "C:\Users\sftp\OneDrive\sftp-1drv\%1"
    ssh-keygen -t ed25519 -f "%userprofile%\.ssh\%1" -N ""
    type "%userprofile%\.ssh\%1" > "C:\Users\sftp\OneDrive\sftp-1drv\_chaves_sftp\%1.pem"
    mkdir "C:\Users\%1\.ssh"
    type "%userprofile%\.ssh\%1.pub" > "C:\Users\%1\.ssh\authorized_keys"

    O script cria o usuário com a senha $enha@12321 e pede essa senha para executar o cmd como o novo usuário criado. Isso é feito porque o Windows precisa de um primeiro login interativo para criar a pasta do perfil do usuário e é necessário para que seja criado o arquivo authorized_keys no perfil do usuário.

    Na execução do script para criação de novos usuário, a pasta é criada e a chave fica acessível através do OneDrive, bastando baixar a chave e fazer o acesso via SFTP.