Estou fazendo backup de servidores em um servidor de backup. Cada servidor cujo backup é feito tem sua própria conta no servidor de backup e os arquivos são sincronizados. É importante que as permissões permaneçam intactas (usando o rsync -p) para simplificar as restaurações.
Estou tentando criar um script que pode ler os arquivos e criar algumas estatísticas. Não gosto que esse script seja executado no usuário raiz e também é impossível executá-lo para todos os usuários de backup, pois o script deve ser capaz de ler todos os arquivos de todos os usuários. No entanto, isso cria um problema quando um arquivo é, por exemplo, chmodded 600. Não quero tocar nas permissões, mas outro usuário, exceto o root e o proprietário, não pode lê-lo.
Um usuário específico - não root - deve poder ler todos os arquivos em um diretório ou partição, independentemente dos níveis de permissão (e o proprietário dos arquivos não deve ter como evitá-lo). Existe uma maneira de conseguir isso? Estou executando o FreeBSD com um volume ZFS.
fonte
Respostas:
Use
sudo
.Se o seu
sudoers
arquivo listar um comando exato e específico, o comando deverá ser chamado exatamente como listado nosudoers
ou será negado.Por exemplo:
Neste exemplo, o usuário
backup
pode executar o comando exatamente como mostrado:Se eles chamarem em
sudo rsync...
vez dosudo /usr/bin/rsync
comando falhar, ou se os sinalizadores ou caminhos forem diferentes, o comando falhará.Se você está fazendo isso em um script, deseja habilitar o uso sem senha desses comandos:
Para mais, consulte a
sudoers(5)
página de manual emCmnd_list
.fonte
pfexec
. Mas já que você está no BSD,sudo
terá que fazer.Você pode escrever uma
suid
versãocat
executável apenas pelo seu usuário de backup (tornar um grupo exclusivo para o usuário de backup e tornar o executável legível apenas por esse grupo). Issocat
permitiria apenas a leitura de arquivos no diretório em que você está interessado. (Você provavelmente deseja proibir links simbólicos e tomar cuidado com truques como esse/dir/../otherdir/
.)Em seguida, seu script pode usar este executável para ler arquivos sem ter privilégios de root.
fonte
AVISO: Como Stephane apontou nos comentários abaixo, os proprietários dos arquivos ainda poderão revogar a ACL.
Se você tiver acesso root à máquina, poderá fazer isso com ACLs :
Isso dará
USERNAME
acesso de leitura a todos os arquivos e diretórios abaixo/path/to/directory
.fonte
O Bindfs é um sistema de arquivos FUSE que fornece visualizações de uma árvore de diretórios com permissões e propriedades diferentes. Não há porta para o FreeBSD, mas você pode compilar a partir da fonte.
Para fornecer ao usuário
backupper
(e somente esse usuário) uma visão de/some/files
onde todos os arquivos são legíveis, monte uma visualização legível em todo o mundo/some/files
em um diretório privado debackupper
.fonte
O ZFS possui alguns mecanismos para isso.
Um dos mecanismos ainda está em andamento e ainda não foi implementado, mas permite que um conjunto de dados seja montado com uma substituição de 'proprietário'. Nesse caso, você pode clonar um instantâneo, montá-lo com o proprietário substituído pelo usuário de backup, fazer backup e destruir o clone. A desvantagem é que você não faz backup da propriedade real dos arquivos.
A melhor solução é provavelmente as ACLs do estilo ZFS nfsv4
fonte
Eu tenho duas idéias de como resolver esse problema usando tecnologias específicas do FreeBSD, embora eu também não tenha tentado:
Use Capsicum. Este é o meu método preferido. Além disso, como foi portado recentemente para o Linux, também deve funcionar lá. Seria assim:
Use controle de acesso obrigatório. Isso não funciona no Linux AFAIK e é mais complicado de configurar. Seria assim:
ugidfw adicionar assunto uid root jailid BACKUP_JAIL_ID mode rsx
fonte