Conceder permissões de usuário a todos os arquivos e pastas


9

Eu quero ter um usuário que tenha acesso a todos os arquivos e pastas do sistema. Isso tem como objetivo usar o RSYNC em uma máquina local para fazer backup de uma máquina remota.

No momento estamos usando o usuário backupse embora tenhamos adicionado este usuário para os grupos sudoe adminrsync ainda retorna mensagens como:

rsync: opendir "/ location / to / folder" falhou: permissão negada (13)

rsync: send_files falhou ao abrir "/ location / to / file": permissão negada (13)

Alguma idéia de como damos backupspermissão ao usuário para acessar tudo (exceto adicionar o usuário a todos os grupos de todos os tempos - o servidor remoto que estamos tentando fazer backup é um servidor de hospedagem dedicado, onde cada conta tem seu próprio usuário no sistema).

Obrigado por qualquer ajuda.


11
Você pode dar exemplos de caminhos? Se houver /proc, /devetc, erros são esperados.
8272 Phil

adicionar o usuário backupspara sudoe adminnão mudar nada.
Favadi

@ Phil Estou tentando fazer backup de todo o diretório / home. Os arquivos / diretórios que estão falhando são aqueles /home/a/c/account/users/mail:usernamecom permissões semelhantes drwx------e de propriedade de mail:4096. Presumo que, porque o usuário backupsestá no grupo sudoou adminnão tem acesso, porque não há permissões de acesso para grupos? Não sei, mas está com erro em pastas / arquivos como esse.
Thomas Clayson

Favadi @ Eu já fiz isso ... ainda não está funcionando.
Thomas Clayson

Você terá que executar o rsynccomando com sudo.
8272 Phil

Respostas:


6

A adição do usuário backupsao grupo de usuários sudonão concede automaticamente à conta o acesso a todos os arquivos no sistema. Dá ao usuário a permissão para executar o sudocomando.

Como você está usando autenticação de chave pública (presumivelmente sem uma senha), eu abordaria isso com segurança e facilidade de implementação em mente. O uso sshpermite restringir o usuário a executar apenas comandos muito específicos. Nesse caso, você pode permitir que o usuário backupsexecute rsynccom permissões de superusuário.

Você já realizou a troca de chaves e a autenticação verificada foi bem-sucedida. No authorized_keysarquivo no host remoto do qual você está fazendo backup do /homediretório, você pode adicionar uma command=diretiva à chave usada pelo usuário backups. Essa diretiva permitirá que esse comando seja executado apenas quando essa chave for usada para autenticação. Portanto, o primeiro campo da chave seria semelhante a este:

command="/path/to/sudo /path/to/rsync -az /home /local/folder" ssh-rsa AAAAB3NzaC1yblahblahblah

Você pode ir ainda mais longe e adicionar mais opções à chave, como from=myhost,no-pty,no-X11-forwarding.

Isso deve fornecer uma segurança decente e não exigir que você modifique as permissões subjacentes do sistema de arquivos. Você provavelmente precisará jogar com o comando que você coloca no authorized_keysarquivo até que funcione conforme o esperado; pode demorar um pouco para envolver seu cérebro. O comando especificado no authorized_keyssubstituirá basicamente as rsyncopções que você passará do host de conexão.

Muita informação boa em man sshd. Você deseja ler especificamente a seção AUTHORIZED_KEYS FORMAT.


Ok, eu estou seguindo, eu acho. Adicionar essa diretiva ao arquivo allowed_keys permitirá que você execute um comando remoto com permissões de superusuário, certo? Como eu alteraria o comando rsync -e ssh -az backups@domain.com:/home /location/of/local/folderpara instruí-lo a executar como superusuário na máquina remota? Ou será feito automaticamente? Obrigado pelo seu tempo e ajuda. :)
Thomas Clayson

11
A diretiva não permite executar automaticamente o comando como superusuário. Quando essa chave específica é usada para autenticação, restringe o usuário apenas ao comando especificado. As permissões de superusuário vêm de "sudo". Tecnicamente, você pode colocar todo o comando "rsync" no arquivo allowed_keys e apenas iniciar a conexão ssh a partir do host de backup. Todo o processo seria iniciado automaticamente após a conclusão da autenticação. Gostaria de iniciar a conexão com algo como "backups ssh @ remotehost sudo rsync"
George M

Demora um pouco para envolver seu cérebro, mas é bem legal quando ele finalmente clica e você percebe o que pode fazer.
George M

2

Uma opção é executar um servidor rsync no sistema remoto.

Basicamente, crie um rsync.confcom e uid=rootdepois use rsync -az rsync://domain.com.

Consulte http://pastebin.com/5hQx1mRV para obter um exemplo de outra pessoa que escreveu e Configurando o daemon rsync para obter alguns princípios básicos da ativação de um servidor no Ubuntu.

Observe que você deve considerar a segurança disso. Uma abordagem melhor é provavelmente fazer com que o sistema remoto seja enviado ao sistema local.


Parece muito bom obrigado. Isso sincronizará tudo da /backup/lcpasta no servidor remoto? Eu mudo um pathpouco /homepara fazer isso funcionar?
Thomas Clayson

Obrigado pela edição cara. O único problema com isso é que não podemos garantir um endereço IP estático onde estamos, e queremos fazer isso via cron para que isso aconteça o tempo todo. Se pressionarmos, ele poderá parar de funcionar se o nosso endereço IP mudar. : /
Thomas Clayson

@ ThomasClayson: É para isso que serve o DNS dinâmico. :)
Warren Young

1

Talvez você possa usar o ACL se o sistema de arquivos subjacente o suportar.

Você deve adicionar o backup do grupo na ACL de cada arquivo e diretório. Mas, para ser adicionado automaticamente aos arquivos e diretórios criados recentemente, você deve primeiro definir a ACL padrão para todos os diretórios existentes. Então, no servidor remoto:

sudo find /home -type d -print0 | xargs -0 setfacl -d -m group:backup:r-x

Então você deve ter permissão rx para todos os diretórios existentes e ler arquivos. Você pode fazer isso com 2 comandos (sem o -d desta vez)

sudo setfacl -R -m group:backup:r-- /home
sudo find /home -type d -print0 | xargs -0 setfacl -m group:backup:r-x

Isso lhe dará permissão extra para ler os arquivos no backup do grupo sem alterar o usuário e o grupo existentes que possuem cada arquivo.

Nota: para acelerar a localização | Comando xargs, você pode adicionar a seguinte opção ao comando xargs: -P ncom n o número de processos paralelos. Você pode configurá-lo para o número de cpu que você possui na sua máquina + 1.


Os xargs paralelos não aceleram as coisas neste caso, porque o gargalo é de E / S, não de CPU.
Mikel

O Linux usa caches na memória antes de confirmar as alterações no disco, para que pareça mais rápido do ponto de vista do usuário. E mesmo um pequeno disco rígido de notebook pode lidar com a carga de configurar várias ACL em paralelo. Não é tanto a E / S. Experimente :)
Huygens

Acabei de ler aqui superuser.com/a/422954/53206 que você pode simplesmente usar: sudo setfacl -Rm d:group:backup:r-X,group:backup:r-X /home:) muito mais simples!
Huygens
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.