No sftp, como definir a permissão padrão para todos os arquivos em uma pasta?

5

Eu quero definir a permissão padrão para todos os arquivos em uma pasta, incluindo os recém-carregados, para um determinado valor, digamos 644, em vez de fazer "chmod 644" o tempo todo.

Existe algum comando que torne isso possível?

    
por user866435 06.09.2011 / 01:51

4 respostas

4

Alternativamente, você pode definir o umask para todos os logins do sftp no arquivo de configuração do sshd (/ etc / ssh / sshd_config na minha caixa Debian). Para isso, adicione -u 022 à linha do subsistema sftp da seguinte forma:

Subsystem sftp /usr/lib/openssh/sftp-server -u 022

De man sftp-server :

-u umask
     Sets an explicit umask(2) to be applied to newly-created files and directo‐
     ries, instead of the user's default mask.
    
por 08.02.2012 / 21:04
4

Eu passei um tempo considerável procurando por uma resposta mais completa para essa pergunta. Configurar uma umask diferente para o sftp é bom, mas não é uma resposta universal, já que o umask irá restringir somente permissões e não conceder permissões adicionais. As permissões exatas de um arquivo enviado via sftp dependem também das permissões do arquivo original e do cliente usado para o upload.

Como exemplo, configurei o umask no meu servidor sftp (OpenSSH, em um servidor Red Hat) para 0002, mas se eu fizer upload de um arquivo de texto com as 0600 permissões no sistema de origem usando o cliente sftp do OpenSSH, ainda terá 0600 permissões no destino. Notavelmente, isso significa que não posso, tanto quanto seja do meu conhecimento, garantir que os arquivos enviados a este servidor sftp tenham permissões de grupo, o que, por extensão, também não pode usar listas de controle de acesso (ACL) para estender permissões a outros usuários ou grupos. .

Para tentar dois métodos que resolveriam isso, embora em ambos os casos eles sejam mais soluções do que soluções:

  • Crie um cron job para definir manualmente as permissões desejadas após o fato. Simples o suficiente, mas assíncrono, mesmo que você possa executá-lo com freqüência.
  • Use inotify para monitorar os diretórios de destino usados pelo servidor sftp e defina as permissões desejadas para quaisquer arquivos criados em eles. Isso deve ser praticamente imediato, mas pode ter outras limitações, como no caso de um grande número de arquivos ou diretórios.

Eu encontrei um post no blog do site positon.org que explica bem a opção inotify, com exemplos e até mesmo scripts init. É melhor ler lá, mas no caso do site desaparecer, o comando é:

inotifywait -mrq -e CREATE --format %w%f /tmp/mytest/ | while IFS= read -r FILE; do chmod g=u "$FILE"; done

Por mais simples que seja, eu ainda estaria muito interessado em uma maneira, por recurso ou truque, de obter o mesmo resultado dentro do sftp ou pelo menos do shell, sem envolver utilitários separados.

    
por 12.05.2016 / 15:41
0

Os arquivos de permissão são criados com depende do seu umask . Para obter 644 permissões, defina sua umask como 022 ( umask 022 ).

Para tornar esta mudança permanente, coloque esse comando nos servidores remotos ~/.profile (dependendo do seu shell).

    
por 06.09.2011 / 02:05
0

O .profile estará no diretório inicial da sua conta de usuário. Quando o ssh estiver no seu diretório home, mas você também pode fazer com que o shell mude para o diretório inicial digitando:

cd

Se você está no linux e seu shell de usuário é bash, como a maioria das pessoas, você provavelmente não terá um .profile, mas você pode ter um .bash_profile e .bashrc. Configure o umask em um desses arquivos em vez de criar um .profile.

    
por 06.09.2011 / 08:50