Sinalizadores setuid e setgid são ignorados por scripts de shell, por motivos de segurança.
Eu tenho uma VM VMWare que acessa diretamente alguns discos. Para executar (sem executar o vmware como su, que tem seus próprios problemas), eu preciso alterar a propriedade dos dispositivos. Eu fiz isso manualmente usando o Nemo , então eu sei o que precisa ser feito.
Escrevendo um script de shell para fazer isso, escrevi
chown john:john /dev/disk/by-id/blahblah /dev/anotherblah /dev/lastoneblah
Salvei-o como um arquivo drive-owner
, defino o bit de execução, depois, em um shell de raiz, mudei seu proprietário para root e configure o sinalizador de modo especial de + s.
O resultado, de acordo com ls, é -rwsr-sr-x
.
Se eu executar isso de um shell normal (não-raiz), recebo erros de chown, Operação não permitida . Ele roda sem reclamação de um shell de root.
Pareço estar faltando a parte que executa o script como root automaticamente. Eu pensei que era o propósito e função da permissão "setuid", e + s é como especificá-lo .
O que estou perdendo?
Sinalizadores setuid e setgid são ignorados por scripts de shell, por motivos de segurança.
Siga estas etapas:
sudo
chmod +x script_path
chmod 777 script_path
@hildred observou isso em um comentário acima. Vou expandi-lo em uma resposta, pois acho que é a resposta correta e altamente recomendada.
O super comando
… allows specified users to execute scripts (or other commands) as if they were root; or it can set the uid, gid, and/or supplementary groups on a per-command basis before executing the command. It is intended to be a secure alternative to making scripts setuid root. Super also allows ordinary users to supply commands for execution by others; these execute with the uid, gid, and groups of the user offering the command.
(ênfase minha).
Tags permissions shell-script