Usando kornshell ou Perl para contornar as permissões necessárias pelo root

1

Eu tenho um problema em que preciso alterar a propriedade e as permissões de um arquivo existente em mais de 200 servidores. Eu pertenço a dois grupos diferentes e preciso alterar a propriedade de um grupo para outro. Também preciso que as permissões sejam 644. Isso pode ser feito facilmente se eu tiver acesso root, mas não. Então, em vez disso, eu preciso copiar o arquivo como um usuário e, em seguida, remover o arquivo antigo e, em seguida, renomear o arquivo copiado recentemente para o nome do arquivo antigo. Isso se torna um tanto tedioso, então eu quis criar um script para automatizar essas tarefas. Eu pensei que kornshell faria o truque, mas meu script não parece estar fazendo nada. Aqui está o que eu tenho até agora:

lockhosts.sh

#!/usr/bin/ksh
sudo su - oradba
cd config
chmod 644 hostenv.cfg
chown orainst hostenv.cfg
exit
sudo su - orainst
cd config
cp -p hostenv.cfg hostenv.cfgnew
rm hostenv.cfg
mv hostenv.cfgnew hostenv.cfg

Achei que isso funcionaria porque esses são todos os comandos que preciso executar para alterar com êxito a propriedade / permissões do arquivo.

Tudo que preciso fazer é alterar o arquivo hostenv.cfg deste :

-rwxrw---- 1 oradba  dba  4433 May  1 21:43 hostenv.cfg

Para isso :

-rw-r--r-- 1 orainst dba  4433 May  1 21:43 hostenv.cfg

O que posso fazer para corrigir meu script? Além disso, se eu precisar criar solicitações de usuário no meu script para pedir senhas, tudo bem, mas achei que o sistema me perguntaria.

Aqui está o que acontece quando tento executar o meu script:

lockhost.sh

Meu usuário é alterado para oradba e nada mais acontece ... Até eu digitar exit ...

exit

logout
chmod: changing permissions of 'hostenv.cfg': Operation not permitted
chown: changing ownership of 'hostenv.cfg': Operation not permitted
    
por etho201 03.06.2014 / 21:39

1 resposta

2

O problema é que seu sudo su ... gera outro shell, e somente quando você exit dele tenta continuar o script.

Assumindo que sua configuração sudo permite isso, você pode fazer isso:

sudo -iu oradba 'cd ... && chmod ... && chown ... '
sudo -iu orainst '...'

Os && podem ter sido substituídos por ponto-e-vírgula, é apenas assim que você garante que chmod não será tentado, a menos que cd seja bem-sucedido e assim por diante.

Se a configuração de sudo não permitir, você poderá fazer isso:

sudo su -c 'cd ... & chmod ... && chown ... ' - oradba
sudo su -c '...' - orainst
    
por 03.06.2014 / 21:49