Eu uso o etckeeper para manter minhas várias configurações de SO sob controle de versão. Até agora, eu estava contente em usar apenas um repositório Git local para acompanhar as alterações, mas me ocorreu que não estava aproveitando ao máximo esse recurso e decidi que seria útil configurar um repositório remoto para manter cópias desses repositórios para que as /etc
configurações estejam disponíveis em outras máquinas.
No servidor remoto, criei um repositório vazio (garantindo que apenas o git
usuário possa acessar seu conteúdo):
sudo -u git -H git init --bare ~git/repos/anthony-etc.git
chmod -R 700 ~git/repos/anthony-etc.git/
O daemon SSH no servidor remoto foi configurado para permitir que os usuários (incluindo o git
usuário) usem apenas chaves para autenticação – e eu já havia carregado minha chave pública pessoal para .authorized_keys
o git
usuário no servidor.
Na máquina local, adicionei isso como repositório remoto:
sudo git remote add origin [email protected]:/home/git/repos/anthony-etc.git/
Como apenas um superusuário pode modificar arquivos no /etc
diretório (incluindo seu .git
subdiretório), todos os comandos do Git são executados usando sudo
.
Antes de tentar enviar usando SSH, verifiquei se poderia usar meu agente de autenticação SSH atual:
$ sudo ssh-add -l
Could not open a connection to your authentication agent.
Isso falhou ao ser executado usando sudo
e eu queria saber como eu poderia configurar sudo
para trabalhar com o agente de autenticação SSH que já estou usando como não superusuário.
A razão pela qual não funcionou foi porque a
SSH_AUTH_SOCK
variável usada para armazenar o nome do arquivo do soquete de domínio Unix do agente SSH não estava no ambiente ao executar comandos viasudo
.Por padrão, a
env_reset
opção está habilitada nasudo
política de segurança e muitas distribuições GNU/Linux tornam isso explícito enviando com a seguinte linha em seu/etc/sudoers
arquivo de configuração:Isso garante que os comandos sejam executados em um ambiente mínimo com a maioria das variáveis de ambiente do usuário chamador removidas no ambiente restrito.
Variáveis específicas podem ser incluídas na lista de permissões para que sejam preservadas no ambiente. Por segurança, uso o
visudo
comando para editar osudoers
arquivo de configuração. Além disso, em vez de modificar/etc/sudoers
diretamente, adiciono modificações personalizadas a um arquivo separado no/etc/sudoers.d/
diretório. Para fazer isso, eu corrosudo visudo -f /etc/sudoers.d/custom
para que a configuração contenha a seguinte linha:Agora, a execução
sudo ssh-add -l
mostra que posso me conectar ao agente de autenticação e posso prosseguir e atualizar o repositório remoto: