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.

Thomas Clayson
fonte
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.

George M
fonte
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 [email protected]:/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.

Mikel
fonte
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.

Huygens
fonte
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