Definindo permissões de grupos padrão via SFTP

1

Estou configurando um servidor de arquivos no qual os usuários fazem login via SFTP. Eu quero que todos os usuários tenham as mesmas permissões para ler e gravar qualquer arquivo. Como todos têm contas diferentes com senhas diferentes, acabo com algo assim:

-rw-r-----   1 user1   sharing  308 Jul  6 12:03 test2.rtf
-rw-r-----   1 user2   sharing  308 Jul  6 12:16 test3.rtf

O grupo é chamado de sharing , que contém todos os usuários. O problema é quando os arquivos são gravados, a permissão padrão para grupos é somente leitura.

Eu tentei definir o umask em sshd_config :

Subsystem sftp /bin/sh -c 'umask 0002; /usr/lib/openssh/sftp-server'
Match Group sharing
    ChrootDirectory /files/
    ForceCommand internal-sftp -u 002
    AllowTCPForwarding no
    X11Forwarding no

O facl do diretório é este:

# file: .
# owner: root
# group: sharing
# flags: -s-
user::rwx
group::rwx
group:sharing:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::---

também nesses lugares:

init.d/rc:umask 002
init.d/ssh:umask 002
bash.bashrc:umask 002

Se eu fizer login via SFTP, recebo permissões de 640. Se eu desabilitar o sftp e logar como user1 via ssh, e tocar em um novo arquivo, eu recebo permissões de 660 - que é o que eu quero.

Então, como posso fazer isso funcionar via SFTP?

Isto é debian 7 btw.

    
por DAB 06.07.2015 / 19:54

2 respostas

1

Antecedentes

Este é um problema permanente de sftp e compartilhamento de arquivos. Isso ocorre porque as permissões resultantes são baseadas na permissão original do arquivo no lado do usuário e o argumento umask ( -u ) não está forçando essas permissões, mas apenas removendo as permissões indesejadas. Isso significa que somente se o usuário tentar carregar o arquivo com permissão 0777 , ele será aplicado e desclassificado para 0775 . Caso contrário, é apenas deixado como estava. Por exemplo, se o usuário tiver um arquivo armazenado em seu sistema de arquivos com permissão 0700 , ele também aparecerá após o upload como 0700 .

Solução

Recentemente, resolvemos esse problema no Fedora aplicando o patch que está forçando a permissão exata dos novos arquivos enviados, que é baseado neste:

link

Isso estará disponível no CentOS em poucos meses, não tenho certeza sobre o debian.

Solução alternativa

Não há outra solução elegante, exceto algum script de execução periódica (de cron ), que está corrigindo as permissões erradas. Seria um one-liner no bash, mas eu acho que você pode pensar em alguns. Eu posso elaborar mais sobre isso se você estiver interessado.

    
por 08.07.2015 / 09:32
1

Consegui fazer isso funcionar no debian usando o bindfs - que ainda é meio hacky, mas funciona. Basicamente, ele monta um diretório em outro e você pode forçar todas as permissões a se comportar como quiser. Portanto, independentemente de como o arquivo é escrito no diretório real, o diretório servido pelo sftp sempre será gravável. Agora todos os meus clientes podem gravar em arquivos que outros usuários criaram: D

    
por 08.07.2015 / 18:12