Я пытаюсь установить lighttpd с помощью suexec, но при тестировании что-то идет не так: когда я пытаюсь запустить что-то через suexec, в журнале появляется сообщение:
[2017-10-08 00:23:24]: invalid command (/srv/http/main/htdocs/cgi-bin/test.py)
Выход suexec -V
:
-D AP_DOC_ROOT="/srv/http"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="lighttpd"
-D AP_LOG_EXEC="/var/log/lighttpd/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=100
-D AP_USERDIR_SUFFIX="public_html"
Обертка, которую я использую для запуска программ:
#!/bin/bash
filename="$1"
user="$(/usr/bin/stat -c "%U" "$filename")
group="$(/usr/bin/stat -c "%G" "$filename")
cd "$(dirname "$filename")"
/usr/local/bin/suexec "$user" "$group" "$filename"
С разрешениями все в порядке, биты мошеннической записи не установлены. Попытка из обоих userdirs (/home/$USER/public_html
) и из docroot.
Кажется, разрешены только относительные пути; сообщение об ошибке исходит из этого блока:
/*
* Check for a leading '/' (absolute path) in the command to be executed,
* or attempts to back up out of the current directory,
* to protect against attacks. If any are
* found, error out. Naughty naughty crackers.
*/
if ((cmd[0] == '/') || (!strncmp(cmd, "../", 3))
|| (strstr(cmd, "/../") != NULL)) {
log_err("invalid command (%s)\n", cmd);
exit(104);
}
(видеть https://anonscm.debian.org/cgit/pkg-apache/apache2.git/tree/support/suexec.c?h=upstream/2.4.27#n350)