run command como diferente nologin user

2

Estou usando o plug-in maven antrun para executar sshexec para copiar um tar e extraí-lo para um diretório de destino em um servidor remoto.

O comando que eu corro para extrair é:

/bin/sh -c 'tar -vxzf /path/to/${artifact}.tar.gz -C path/to/target/directory;'

Isso usado funciona bem até que o proprietário do diretório de destino seja alterado para um novo usuário configurado como nologin. Estou tentando descobrir como executar esse comando como o novo usuário.

Eu tentei modelá-lo depois da resposta da Basiléia

/bin/su -s /bin/sh -c 'tar -vxzf /path/to/${artifact}.tar.gz -C path/to/target/directory;' ${newUser}

Mas isso me pede uma senha, o que não funciona, já que é um usuário nologin.

Além disso, eu não sou especialista em Linux, mas se eu apenas tentar simplesmente executar este comando do meu diretório home como o usuário antigo (que tem acesso sudo), isso falhará

sudo -u ${newUser} tar -vxzf /path/to/${artifact}.tar.gz -C path/to/target/directory;

No entanto, se eu for para o diretório de destino e executar o mesmo comando exato do usuário antigo, ele funcionará. Eu estou supondo que talvez, se eu entender essa diferença de comportamento, isso me ajude a obter a resposta?

    
por mdo123 10.08.2017 / 01:51

1 resposta

1

Não me parece que o problema aqui tenha algo a ver com o novo usuário ser um usuário do sistema ou um usuário sem login. Parece que a explicação mais provável para o que aconteceu é que, como o proprietário do diretório de destino foi alterado, agora não há um usuário que tenha permissões de leitura para o diretório de origem e grave permissões no diretório de destino.

Como você tem privilégios sudo no host em questão, você tem muitas opções para resolver isso.

  1. Você pode conceder ao usuário original permissões de gravação para o diretório de destino e executar o comando tar como esse usuário.

  2. Você pode conceder ao novo usuário de login permissões de leitura sem login e executar o comando tar como esse usuário.

  3. Você pode executar o comando tar com o sudo e, em seguida, definir a propriedade como o que você deseja que seja posteriormente.

Por exemplo, algo como o seguinte deve funcionar:

sudo tar -vxzf /path/to/${artifact}.tar.gz -C /path/to/target/directory

sudo chown -R "${newUser}:${newUser}" /path/to/target/directory

Se você quiser usar um pouco mais de sutileza e evitar a necessidade de executá-lo como root, atualize sua pergunta para incluir as permissões e informações de propriedade dos diretórios em questão, bem como as associações de grupos das contas de usuários relevantes. .

    
por 12.11.2017 / 15:28