Приветсвую уважаемый ALL!Что есть:
Apache 2.2.3 под 5ым центосом, с настройками:
/usr/sbin/httpd -V
Server version: Apache/2.2.3
Server built: Jun 26 2007 19:26:32
Server's Module Magic Number: 20051115:3
Server loaded: APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
Architecture: 32-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
/usr/sbin/suexec -V
-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="apache"
-D AP_LOG_EXEC="/var/log/httpd/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=500
-D AP_USERDIR_SUFFIX="public_html"
Пишу на shell"e CGI скрипт вида:
#!/bin/sh
# disable filename globbing
set -f
#echo Content-type: text/plain
echo Content-type: text/html
echo
#echo "Content-type: text/html\n"
# our html code
echo "<html>"
echo "<head><title>Send CV report</title></head>"
echo "<body>"
echo "<h1>Message has been sent</h1>"
echo `date`
echo Hello from myself
echo "<BR>"
echo `ping -c 1 www.google.com`
echo "<BR>ping done"
:( и ничего не работает!!!! Тоесть почему-то нет резолвинга www.google.com!!!
В логах пишется такое:
tail -f /var/log/httpd/error_log
[Thu Oct 25 04:15:12 2007] [error] [client 192.168.1.100] ping: unknown host www.google.com
при этом suexec.log чист!
Если заменить echo `ping -c 1 www.google.com` на echo `ping --help`
то /var/log/httpd/error_log получим подтверждение того что сама шел команда пинг вызывается:
[Thu Oct 25 04:20:49 2007] [error] [client 192.168.1.100] Usage: ping [-LRUbdfnqrvVaA] [-c count] [-i interval] [-w deadline]
[Thu Oct 25 04:20:49 2007] [error] [client 192.168.1.100] [-p pattern] [-s packetsize] [-t ttl] [-I interface or address]
[Thu Oct 25 04:20:49 2007] [error] [client 192.168.1.100] [-M mtu discovery hint] [-S sndbuf]
[Thu Oct 25 04:20:49 2007] [error] [client 192.168.1.100] [ -T timestamp option ] [ -Q tos ] [hop1 ...] destination
Если заменить echo `ping -c 1 www.google.com` на echo `ping localhost`
то в error_log получим:
[Thu Oct 25 04:31:39 2007] [error] [client 192.168.1.100] socket: Permission denied
Это наводит на мысль, что нету резолвинга! по каким то возможно секьюрным причинам в Апаче
В системе естетсвенно резолвинг есть, но его нету в самом CGI-shell скрипте.
Запускал апач и через указания User = мой шел юзер Group = моя група для моего шел юзера - те же яйца, вывод при этом в ошибках ничем не отличается!
ВОПРОС: Как пофиксить этот резолвинг и заставить CGI-шел скрипт работать правильно?
В скрипте работают все шел комманды, кроме пинга, который валится на резолвинге.
При моих текущих настройках получается, что данный скрипт выполняется под юзером apache через suexec. (вставлял просто в скрипт вывод whoami).
ЗЫ: пример привел заведомо упрощённый ибо мне нужно в моём рабочем скрипте запускать отсылку письма через msmtp, который как раз и валится на этом долбанном резолвинге. Посему пример взял именно пинг, как нельзя лучше иллюстрирующий что нету резолвинга.