de acordo com a permissão da raiz para www-data

0

Eu tenho um script perl dhcpmanip.pl que contém esta linha:

system "hostapd /etc/hostapd-1.0/hostapd/hostapd.conf"'

É um comando para iniciar hostapd e eu recebo este erro:

Insecure '$ENV{PATH}' while running setuid at '/var/www/cgi-bin/dhcpmanip.pl' line 46

Depois de pesquisar na net, percebi que deveria dar permissão root ao usuário www-data (usuário apache) e tentei modificar o arquivo /etc/sudoers inserindo esta linha:

www-data ALL=NOPASSWD: /var/www/cgi-bin/dhcpmanip.pl

mas ainda não está funcionando ... alguém tem alguma idéia sobre como resolver esse problema?

    
por bahamat 28.06.2013 / 16:53

3 respostas

2

Você está recebendo essa mensagem porque o perl está em execução no modo de corrupção . Ou você definiu que explicitamente (bom) ou perl transformou isso em si mesmo, porque o que você está fazendo é perigoso (ruim, mas o perl ainda está indo bem).

De qualquer forma, o perl exige que você limpe seu PATH antes de executar comandos externos.

Você precisa definir explicitamente $ENV{PATH} em algum lugar no seu script antes de executar qualquer comando externo .

Para uma boa prática, você também deve usar explicitamente o caminho completo de qualquer comando externo que esteja executando.

    
por 05.02.2014 / 10:00
0

Dependendo de onde o hostapd é realmente colocado, você precisa definir $ ENV {PATH} para algo. Por exemplo, se estava em /usr/bin set $ENV{PATH} = "/usr/bin" e deveria funcionar.

    
por 28.06.2013 / 18:50
0

Pelo que entendi, você quer ser capaz de acessar uma determinada página da Web em seu computador, e isso fará com que o computador execute um script que manipulará sua configuração de dhcp. Como SaveTheRbtz disse, isso é não o caminho seguro para fazê-lo.

Quando você está executando um servidor da Web, deseja ter certeza de que quaisquer scripts executados pelo servidor da Web tenham um acesso muito limitado para fazer as coisas no seu servidor. Caso contrário, qualquer pequeno erro em seus scripts pode levar a algum script kiddie a fazer root no seu servidor e abusar dele.

Portanto, se você tiver um script que precise de acesso root, esse script deverá não ser executado pelo usuário do servidor da web. Em vez disso, usaria uma configuração um pouco mais complexa:

  • Crie um script CGI que só grava uma entrada em um arquivo. Isso requer direitos mínimos, e feito corretamente (isto é, sobrescrevendo a entrada anterior em vez de adicionar a ela), não correrá o risco de encher seu disco se alguém o atingir várias vezes.
  • Crie uma tarefa cron que verifique regularmente esse arquivo para ver se ele foi alterado. Em caso afirmativo, execute o script. A tarefa do cron pode ser de propriedade e executada pelo root, não exigindo, portanto, nenhuma configuração extra do sudo.

Dessa forma, o usuário do servidor da Web fica completamente isolado do que o script precisa de acesso root.

    
por 29.06.2013 / 11:01

Tags