Posso estender o poder do sudo para as diretórios / arquivos de distinação no bash shell?

1

Eu tenho 2 servidores Ubuntu: 12.04.5 LTS e 16.04.1 LTS, em uma rede local, onde sou administrador dos dois servidores e posso ser o superusuário deles. Digamos que cada servidor seja A e B e eu faça o login no servidor A agora.

Quando eu quero copiar um arquivo de A para um diretório em B, onde a autoridade root de B é necessária para colocar o arquivo, como posso fazer isso?

Meu teste foi o seguinte, mas não funcionou devido à falta de autoridade para o servidor B:

sudo scp /foobar/foo/bar.txt user@serverB:/bar.txt
scp: /bar.txt: Permission denied

O poder do sudo afeta apenas a permissão da fonte e não afeta a permissão do diretório de destino.

É claro que, se eu alterar a permissão do diretório de destino adequadamente, posso copiar o arquivo sem nenhum erro de permissão. Mas mudar a permissão toda vez que copio arquivos é um pouco chato.

E o login root não é permitido para ambos os servidores, pois a configuração padrão do Ubuntu é assim.

Se algum de vocês conhece algum bom caminho, por favor me ensine. Eu uso o shell bash.

    
por Taiki Bessho 25.01.2017 / 12:15

3 respostas

2

Se você puder ler o arquivo na máquina de origem como um usuário comum (em vez de root), considere um pull scp em vez de um push:

serverB:~$ sudo scp user@serverA:/foobar/foo/bar.txt /bar.txt

Se você não conseguir ler o arquivo na máquina de origem, precisará executar as duas etapas descritas. Não há como o sudo funcionar em mais de uma máquina.

    
por 25.01.2017 / 12:24
2

Umm ... por que você não cria um diretório no servidor B onde você não precisa de direitos elevados, copia o arquivo para esse local e simplesmente o move para onde quiser quando logado no servidor B. KISS .

    
por 25.01.2017 / 12:22
1

Eu recomendo que você use rsync , então você pode usar sudo na máquina de distensão, siga esta instrução:

  1. Descubra o caminho para o rsync: which rsync
  2. Edite o arquivo / etc / sudoers: sudo visudo
  3. Adicione a linha <username> ALL=NOPASSWD:<path to rsync> , em que username é o nome de login do usuário que rsync usará para fazer logon. Esse usuário deve poder usar o sudo

Em seguida, na máquina de origem, especifique que sudo rsync será usado:

rsync ... --rsync-path="sudo rsync" ...

Usá-lo sem o NOPASSWD na máquina de destino resultará na mensagem

sudo: no tty present and no askpass program specified
    
por 25.01.2017 / 12:23