Eu tenho dois usuários e uma pasta compartilhada no meu servidor Ubuntu:
Usuário writer , que tem acesso de gravação a /var/shared . É um aplicativo que faz alterações de arquivos nesta pasta, de maneira remota, com a chave SSH.
O usuário reader é usado por vários clientes com a chave SSH, uma chave que eles podem obter sem minha permissão. Por isso, preciso restringir comandos disponíveis neste shell.
Eu preciso restringir os comandos acessíveis para reader user, portanto, ele pode usar somente os protocolos sftp e rsync (sem comandos padrão como mkdir , ls top , ..); Somente o diretório /var/shared deve ser legível e deve ser um caminho raiz, por exemplo, não há necessidade de cd , já é / em sftp ou rsync.
Como escrever um script de shell para poder aplicá-lo com usermod -s para o usuário reader que dará tal comportamento? Não consigo encontrar nenhuma amostra. Como fazer com que writer permaneça "preso" a /var/share , então os caminhos são iguais?
Já tentei as diretivas sshd_config Match, ForceCommand internal-sftp e ChrootDirectory . Isso requer que ChrootDirectory seja de propriedade de raiz e não gravável (755 ou menos), mas também não suporta rsync
Eu tentei o rssh , mas ele simplesmente não funciona para diretórios fora do diretório home para usuários logados. Então eu não pude chroot usuários para o mesmo diretório com permissões diferentes ...
Eu tentei usar o arquivo command=".." ssh-rsa.... em authorized_keys , mas não entendi como posso ativar o comportamento que preciso, só verifico o script rrsync dos documentos do rsync. Este método não possui o recurso chroot que eu preciso.
Bash e C ++ (se necessário) são bem-vindos. Saída de ldd /bin/bash :
linux-vdso.so.1 => (0x00007fff7e9d1000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f79dfd8b000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f79dfb87000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f79df7bd000)
/lib64/ld-linux-x86-64.so.2 (0x000055bd0767c000)