|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> WWW
—> Apache 22 + PHP5 + suPHP
Apache 22 + PHP5 + suPHP
Автор: Le1.
На работе крутился бесплатный хостинг, были времена когда исполнения РНР скрипта для всего хостинга от одного юзера не было проблемой, но как говорится времена меняются, так что для избежания Shell-ов и всяких Кул Хацкеров, котрые на свой FTP заливают примитивные PHP Shell-ы надо было переходить на более защищенный вариант.
Для этого решил использовать модуль для apache под названием suPHP.
suPHP это модуль который крутит РНР для конкретного виртуалхоста конкретным юзером.
Начнем с установки апача:
# cd /usr/ports/www/apache22
# make config
| Вот конкретные настройки в моем случае:
x ================================================================== x
x Options for apache 2.2.14_5 x
x ================================================================== x
x [ ] APR_FROM_PORTS Use devel/apr as APR (preferred) x
x [ ] THREADS Enable threads support in APR x
x [X] MYSQL Enable MySQL support for apr-dbd x
x [ ] PGSQL Enable PostgreSQL support for apr-dbd x
x [ ] SQLITE Enable SQLite support for apr-dbd x
x [ ] IPV6 Enable IPv6 support x
x [ ] BDB Enable BerkeleyDB dbm x
x [X] AUTH_BASIC Enable mod_auth_basic x
x [X] AUTH_DIGEST Enable mod_auth_digest x
x [X] AUTHN_FILE Enable mod_authn_file x
x [ ] AUTHN_DBD Enable mod_authn_dbd x
x [X] AUTHN_DBM Enable mod_authn_dbm x
x [X] AUTHN_ANON Enable mod_authn_anon x
x [X] AUTHN_DEFAULT Enable mod_authn_default x
x [X] AUTHN_ALIAS Enable mod_authn_alias x
x ================================================================== x
x [ OK ] Cancel x
x ================================================================== x
| Устанавливаем apache:
Далее установим РНР:
# cd /usr/ports/lang/php5
# make config
|
x ================================================================== x
x Options for php5 5.2.12 x
x ================================================================== x
x [X] CLI Build CLI version x
x [X] CGI Build CGI version x
x [X] APACHE Build Apache module x
x [ ] DEBUG Enable debug x
x [X] SUHOSIN Enable Suhosin protection system (not for jails) x
x [ ] MULTIBYTE Enable zend multibyte support x
x [ ] IPV6 Enable ipv6 support x
x [X] MAILHEAD Enable mail header patch x
x [X] REDIRECT Enable force-cgi-redirect support (CGI only) x
x [X] DISCARD Enable discard-path support (CGI only) x
x [ ] FASTCGI Enable fastcgi support (CGI only) x
x [X] PATHINFO Enable path-info-check support (CGI only) x
x x
x x
x x
x ================================================================== x
x [ OK ] Cancel x
x ================================================================== x
| Устанавливаем PHP5:
Дальше маленькое отклонение, перед тем как компилить suPHP с портов, в новой версии сделана проверка овнершипов верхней дирректории, что в моем случае не очень то хорошо работало, точнее не работало, ковыряясь в инете нашел много таких же жалоб, в принципе эта проверка ни к чему, поэтому я покопался в сорсах и немного изменил.
И так для начала идем в /usr/ports/www/suphp и делаем make:
# cd /usr/ports/www/suphp
# make
| После того как сам архив сорса tar.gz скачан можно прервать процедуру ctrl+c и далее идем править сам сорс:
# cd /usr/ports/distfiles/
# tar xzvf suphp-0.7.1.tar.gz
# cd suphp-0.7.1/src/
# ee Application.cpp
| Правим файл Application.cpp, находим в нем блок:
if (directoryOwner != owner && !directoryOwner.isSuperUser()) {
std::string error = "Directory " + directory.getPath()
+ " is not owned by " + owner.getUsername();
logger.logWarning(error);
throw SoftException(error, __FILE__, __LINE__);
}
| И коментируем:
/*if (directoryOwner != owner && !directoryOwner.isSuperUser()) {
std::string error = "Directory " + directory.getPath()
+ " is not owned by " + owner.getUsername();
logger.logWarning(error);
throw SoftException(error, __FILE__, __LINE__);
}*/
| Стираем оригинал и запаковываем все назад:
# rm -rf suphp-0.7.1.tar.gz
# tar czvf suphp-0.7.1.tar.gz suphp-0.7.1
| Далее чтобы при компиляции Фряха не выругалась на наш измененный сорс, надо подправить значения в distinfo:
# md5 /usr/ports/distfiles/suphp-0.7.1.tar.gz
MD5 (/usr/ports/distfiles/suphp-0.7.1.tar.gz)
= a1e9766010336a46ca3f8e6cd546f348
# sha256 /usr/ports/distfiles/suphp-0.7.1.tar.gz
SHA256 (/usr/ports/distfiles/suphp-0.7.1.tar.gz)
= eec98cb4ef106fa94f7243d9d10d532970978886b017a14d53cff195d152d87f
# ls -l /usr/ports/distfiles/suphp-0.7.1.tar.gz
-rw-r--r-- 1 root wheel 385975 Jan 13 00:58
/usr/ports/distfiles/suphp-0.7.1.tar.gz
| И вписать новые значения:
# cat distinfo
MD5 (suphp-0.7.1.tar.gz)
= a1e9766010336a46ca3f8e6cd546f348
SHA256 (suphp-0.7.1.tar.gz)
= eec98cb4ef106fa94f7243d9d10d532970978886b017a14d53cff195d152d87f
SIZE (suphp-0.7.1.tar.gz) = 385975
| Или чтоб не мучатся как написано выше, просто набрать:
Далее маленькое пояснение, suPHP может работать в нескольких режимах, owner, force и paranoid.
Для подробной информации можно почитать документацию, а вкратце поясню.
В режиме owner, процесс PHP исполняется от владельца каталога, куда смотрит виртуалхост.
В режиме paranoid - все также, за исключением того, что можно добавить директиву suPHP_UserGroup, и указать конкретного юзера для конкретного виртуалхоста.
Например:
<VirtualHost xxxxxxx>
...
suPHP_UserGroup username groupname
</VirtualHost>
| Для того чтобы откомпилить с поддержкой режима paranoid, меняем строку WITH_SETID_MODE?=owner на WITH_SETID_MODE?=paranoid в /usr/ports/www/suphp/Makefile
# WITH_SETID_MODE should be a value of "owner", "force", or "paranoid".
# It's important that you understand the differences between each mode.
# See /usr/local/share/doc/suphp/INSTALL for details.
#
WITH_SETID_MODE?= [color=red][B]paranoid[/B][/color]
CONFIGURE_ARGS+= --with-setid-mode=${WITH_SETID_MODE}
| Сохраняем изменения сделанные в Makefile и компилим сам suPHP:
Далее правим конфиг apache:
cat /usr/local/etc/apache22/httpd.conf
...
#LoadModule php5_module libexec/apache22/libphp5.so
LoadModule suphp_module libexec/apache22/mod_suphp.so
...
suPHP_Engine on
AddType application/x-httpd-php .php
suPHP_AddHandler application/x-httpd-php
DirectoryIndex index.php index.html index.htm
...
| Теперь правим suphp.conf, вот пример моего конфига:
# cat /usr/local/etc/suphp.conf
[global]
;Path to logfile
logfile=/var/log/suphp.log
;Loglevel
loglevel=info
;User Apache is running as
webserver_user=www
;Path all scripts have to be in
docroot=/usr/local/www/*:${HOME}
;Path to chroot() to before executing script
;chroot=/mychroot
; Security options
allow_file_group_writeable=false
allow_file_others_writeable=false
allow_directory_group_writeable=false
allow_directory_others_writeable=false
;Check wheter script is within DOCUMENT_ROOT
check_vhost_docroot=false
;Send minor error messages to browser
errors_to_browser=true
;PATH environment variable
env_path=/bin:/usr/bin
;Umask to set, specify in octal notation
umask=0077
; Minimum UID
min_uid=80
; Minimum GID
min_gid=80
[handlers]
;Handler for php-scripts
application/x-httpd-php="php:/usr/local/bin/php-cgi"
;Handler for CGI-scripts
x-suphp-cgi="execute:!self"
| Вроде все запускаем apache и радуемся :)
# /usr/local/etc/rc.d/apache22 start
| P.S. Для проверки можно написать РНР скрипт:
<?
$ourFileName = "TestFile";
$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");
fclose($ourFileHandle);
?>
| И посмотреть овнера у файла TestFile
В принципе все, надеюсь хоть комуто эта статья поможет...
размещено: 2010-01-13,
последнее обновление: 2010-01-14,
автор: Le1
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
|
Статистика сайта
|
Сейчас на сайте находится: 13 чел.
|
За последние 30 мин было: 34 человек
|
За сегодня было 8449 показов, 971 уникальных IP
|
|
|
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
|
|
Открытие серверов Л2 всегда привлекает новых и опытных игроков.
|
Комментарии пользователей [8 шт.]