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)