Comportamento estranho do script bash

2

Eu tenho dois scripts bash, que são binários idênticos, têm as mesmas permissões, são exclusivos na minha unidade e não são encontrados em sudoers . Ainda um passa o teste uid para raiz, o outro não. Se eu chamar o primeiro com ./ na pasta bin, ele se comportará como o segundo.

O script (sync-samuel):

#!/usr/bin/env bash

echo "[$0]"
whoami

if [ "$(id -u)" != "0" ]; then
    echo "This script must be run as root"
    exit 1
fi

id -u
exit

A saída:

samuel@xeon:~$ sync-samuel
[sudo] password for samuel: 
[/home/samuel/bin/sync-samuel]
root
0
samuel@xeon:~$ sync-samuel2
[/home/samuel/bin/sync-samuel2]
samuel
This script must be run as root
samuel@xeon:~$ cd bin
samuel@xeon:~/bin$ ./sync-samuel
[./sync-samuel]
samuel
This script must be run as root

As permissões:

-rwxr-xr-x 1 samuel samuel  435 Feb  1 22:36 sync-samuel
-rwxr-xr-x 1 samuel samuel  435 Feb  1 22:37 sync-samuel2

Arquivo:

samuel@xeon:~/bin$ file sync-samuel
sync-samuel: a /usr/bin/env bash script, ASCII text executable
samuel@xeon:~/bin$ file sync-samuel2
sync-samuel2: a /usr/bin/env bash script, ASCII text executable

Alguém sabe, o que desencadeia esse comportamento ou como posso ver as propriedades estendidas desses dois arquivos? Estou usando Lubuntu 14.04 LTS w / bash 4.3.11 (1) -release.

Edit: G-Man é o homem! O primeiro também é um alias:

samuel@xeon:~/bin$ type sync-samuel2
sync-samuel2 is hashed (/home/samuel/bin/sync-samuel2)
samuel@xeon:~/bin$ type sync-samuel
sync-samuel is aliased to 'sudo /home/samuel/bin/sync-samuel'
    
por elsamuko 02.02.2016 / 19:37

1 resposta

4

Sua saída mostra que sync-samuel emite um aviso sudo , mesmo que você o execute sem sudo e o script em si não invoca sudo . Isso não faz nenhum sentido. Parece que, quando você digita sync-samuel , você está executando algo diferente de o script sync-samuel que você mostra na pergunta.

É possível que sync-samuel seja realmente um alias para sudo sync-samuel ou algo similar. Outra possibilidade é que você tenha outra cópia de sync-samuel em outro diretório, e seu shell está encontrando (e executando) em vez da cópia que você está vendo. Para diagnosticar isso, emita o seguinte comando:

type sync-samuel sync-samuel2

type é um comando interno que mostra como o shell interpreta cada comando. Se você obtiver respostas substancialmente diferentes para os dois arquivos (por exemplo, sync-samuel é um alias e sync-samuel2 não é), você saberá como proceder para que eles sejam manuseados da mesma (por exemplo, defina um alias para sync-samuel2 também).

    
por 03.02.2016 / 12:30

Tags