<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF102%3A%D0%94%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_PHP</id>
		<title>LXF102:Доверительный PHP - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF102%3A%D0%94%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_PHP"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF102:%D0%94%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_PHP&amp;action=history"/>
		<updated>2026-05-13T08:37:57Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF102:%D0%94%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_PHP&amp;diff=8046&amp;oldid=prev</id>
		<title>Crazy Rebel: Викификация, оформление</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF102:%D0%94%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_PHP&amp;diff=8046&amp;oldid=prev"/>
				<updated>2009-05-29T04:39:18Z</updated>
		
		<summary type="html">&lt;p&gt;Викификация, оформление&lt;/p&gt;
&lt;a href=&quot;http://wiki.linuxformat.ru/wiki/index.php?title=LXF102:%D0%94%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_PHP&amp;amp;diff=8046&amp;amp;oldid=8044&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF102:%D0%94%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_PHP&amp;diff=8044&amp;oldid=prev</id>
		<title>Crazy Rebel: /* Права доступа и последствия */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF102:%D0%94%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_PHP&amp;diff=8044&amp;oldid=prev"/>
				<updated>2009-05-28T09:12:50Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Права доступа и последствия&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 09:12, 28 мая 2009&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 48:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 48:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Следует принять в расчет два сценария:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Следует принять в расчет два сценария:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''a''' Различные пользователи не должны иметь возможность случайно или умышленно перезаписывать файлы или каталоги друг друга.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''a''' Различные пользователи не должны иметь возможность случайно или умышленно перезаписывать файлы или каталоги друг друга.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF102:%D0%94%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_PHP&amp;diff=8043&amp;oldid=prev</id>
		<title>Crazy Rebel: Новая: ==Доверимся ''PHP''==  : В определенных кругах разработчиков безопасность ''PHP'' ставится под сомнение. '''Фрэ...</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF102:%D0%94%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_PHP&amp;diff=8043&amp;oldid=prev"/>
				<updated>2009-05-28T09:12:25Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: ==Доверимся &amp;#039;&amp;#039;PHP&amp;#039;&amp;#039;==  : В определенных кругах разработчиков безопасность &amp;#039;&amp;#039;PHP&amp;#039;&amp;#039; ставится под сомнение. &amp;#039;&amp;#039;&amp;#039;Фрэ...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Доверимся ''PHP''==&lt;br /&gt;
&lt;br /&gt;
: В определенных кругах разработчиков безопасность ''PHP'' ставится под сомнение. '''Фрэнк Полманн''' развенчивает многие из этих мифов...&lt;br /&gt;
&lt;br /&gt;
Все мы знаем, что ''PHP'' может быть источником весьма серьезных проблем с безопасностью. Регулярно обнаруживаются новые эксплойты, атакующие непосредственно интерпретатор; ''PHP''-программисты часто имеют дело с системами управления контентом (CMS), нередко становясь при этом жертвами взломщиков.&lt;br /&gt;
&lt;br /&gt;
Однако существуют весьма простые способы обеспечить безопасность, приняв во внимание то, на чем базируется работа ''PHP'', а именно,&lt;br /&gt;
web-сервер. За основу возьмем ''Apache'', хотя часть последующих примеров применима также и к другим серверам.&lt;br /&gt;
&lt;br /&gt;
===Как запускать ''PHP''-программы===&lt;br /&gt;
&lt;br /&gt;
Разбираться придется с несколькими различными случаями.&lt;br /&gt;
Программы ''PHP'' могут, во-первых, выполняться как ''CGI''-скрипты; во-вторых, запускаться в рамках модуля ''Apache''; и в-третьих, программы&lt;br /&gt;
''PHP ''можно писать как ''CGI''-скрипты, но выполнять как часть так называемого модуля ''FastCGI''. Скрипты ''CGI'' вызывают особенно неприятные&lt;br /&gt;
проблемы с безопасностью, ибо каждый ''CGI''-скрипт выполняется как&lt;br /&gt;
отдельный процесс. А каждый процесс, выполняемый web-сервером,&lt;br /&gt;
наследует идентификатор пользователя ('''uid''') web-сервера, что не есть&lt;br /&gt;
хорошо, если кто-нибудь заполучит контроль либо над ''CGI''-скриптом,&lt;br /&gt;
либо над исполняемым файлом ''Apache'': тогда выполнение ''Apache'' и&lt;br /&gt;
всех других ''CGI''-скриптов будут во власти атакующего.&lt;br /&gt;
&lt;br /&gt;
Существуют, однако, способы держать ''PHP''-скрипты в безопасности без обращения к средствам второй линии защиты, вроде применения ''chroot''’а к ''Apache'' и оставшейся части пакета '''{L,M}AMP'''. Зададимся&lt;br /&gt;
вопросом о способах присвоить каждому ''CGI''-скрипту отдельный '''uid''';&lt;br /&gt;
в частности, поговорим о ''suEXEC''. Но есть более фундаментальные&lt;br /&gt;
приемы, с которыми нужно ознакомиться, прежде чем прибегать&lt;br /&gt;
к средствам типа ''suEXEC'' и ''suPHP''.&lt;br /&gt;
&lt;br /&gt;
===Первичное укрепление ''Apache''===&lt;br /&gt;
&lt;br /&gt;
Практическую безопасность ''PHP'' можно подразделить на четыре части:&lt;br /&gt;
безопасность файловой системы, безопасность ''Apache'', уровень безопасности ''PHP''-интерпретатора и безопасность ''PHP''-клиента. Первыми&lt;br /&gt;
тремя мы займемся целиком, а говоря о ''suEXEC'', кратко остановимся&lt;br /&gt;
на четвертой. Предположим, имеется стандартная схема размещения&lt;br /&gt;
файлов: все файлы ''Apache'' расположены в '''/usr/local/apache2/'''.&lt;br /&gt;
&lt;br /&gt;
 ServerRoot                                /usr/local/apache2&lt;br /&gt;
 DocumentRoot                              /usr/local/apache2/htdocs&lt;br /&gt;
 Основной конфигурационный файл             /usr/local/apache2/conf/httpd.conf&lt;br /&gt;
 Параметры SSL                              /usr/local/apache2/conf/ssl.conf&lt;br /&gt;
 ErrorLog                                  /usr/local/apache2/logs/error_log&lt;br /&gt;
 AccessLog                                 /usr/local/apache2/logs/access_log&lt;br /&gt;
 cgi-bin                                   /usr/local/apache2/cgi-bin&lt;br /&gt;
 Исполняемые файлы Apache                   /usr/local/apache2/bin&lt;br /&gt;
&lt;br /&gt;
Можно, а иногда и нужно, иметь несколько каталогов '''cgi-bin'''; этим мы воспользуемся при разговоре о местоположении ''PHP''-интерпретатора.&lt;br /&gt;
&lt;br /&gt;
===Права доступа и последствия===&lt;br /&gt;
&lt;br /&gt;
Следует принять в расчет два сценария:&lt;br /&gt;
'''a''' Различные пользователи не должны иметь возможность случайно или умышленно перезаписывать файлы или каталоги друг друга.&lt;br /&gt;
&lt;br /&gt;
'''b''' Каждый пользователь может иметь дело с виртуальной копией ''Apache'', избегая таким образом некоторых, но не всех, проблем с правами доступа. &lt;br /&gt;
&lt;br /&gt;
Данная возможность отражается на производительности и безопасности, но в данном контексте мы ее обсуждать не будем.&lt;br /&gt;
&lt;br /&gt;
===Права доступа ''PHP CGI''===&lt;br /&gt;
&lt;br /&gt;
Когда ''PHP'' скомпилирован для запуска с ''Apache'', и используется&lt;br /&gt;
файл конфигурации по умолчанию, рабочий режим ''PHP ''– это режим&lt;br /&gt;
''CGI''-скрипта. Каждый ''CGI''-скрипт, независимо от языка программирования, должен иметь необходимые права доступа, чтобы владелец&lt;br /&gt;
скрипта мог запустить его. Это значит, что владелец скрипта должен уметь считывать и запускать сам скрипт, а ''Apache'' должно быть&lt;br /&gt;
достаточно только прав на запуск. Если верить документации ''Apache'',&lt;br /&gt;
права доступа каталогов '''cgi-bin''', где ''Apache'' ищет ''CGI''-скрипты, должны быть таковы:&lt;br /&gt;
&lt;br /&gt;
 drwxrwxrwx&lt;br /&gt;
&lt;br /&gt;
что также известно как права доступа '''0777'''. Как мы увидим позже, все&lt;br /&gt;
сценарии внутри каталогов '''cgi-bin''' должны восприниматься ''Apache'' как&lt;br /&gt;
''CGI''-скрипты, и не иначе; отсюда следует, что надо привести в согласие&lt;br /&gt;
права доступа всех скриптов, размещенных в каталоге '''cgi-bin''' (о файлах с данными и с контентом речь пока не идет). Права '''0777''' допустимы, но это рискованно, так как если вы предоставите их, любая брешь в защите приведет к тому, что люди смогут запросто перезаписывать&lt;br /&gt;
и даже заменять ''CGI''-скрипты, если они вызываются и модифицируются напрямую.&lt;br /&gt;
&lt;br /&gt;
Строго говоря, единственный пользователь (или группа!), кто во&lt;br /&gt;
время разработки и тестирования должен иметь право считывать,&lt;br /&gt;
записывать и получать доступ к каталогу '''cgi-bin''' – это web-разработчик, или группа таковых. Тогда права на каталог '''cgi-bin''' снижаются&lt;br /&gt;
до&lt;br /&gt;
&lt;br /&gt;
 drwxrwxr-x&lt;br /&gt;
&lt;br /&gt;
они же – права доступа '''775'''. Имеет смысл также предположить, что&lt;br /&gt;
web-разработчику нужно считывать, изменять и выполнять файлы&lt;br /&gt;
внутри каталога '''cgi-bin''' (и выводить их список!). По завершении разработки, когда ''CGI''-скрипты попали на сервер, группе web-разработчиков&lt;br /&gt;
в целом, по идее, незачем в них писать.&lt;br /&gt;
&lt;br /&gt;
Выходит, права доступа для '''cgi-bin''' – '''755''', как и сделано по умолчанию на многих установках ''Apache'' и пакета '''LAMP''' (''Linux, Apache, MySQL, и PHP''). Они также подразумевают, что пользователь ''Apache'', если таковой существует, сможет выводить список файлов в данном каталоге,&lt;br /&gt;
исполнять и считывать их.&lt;br /&gt;
&lt;br /&gt;
===Права доступа ''CGI''-скрипта===&lt;br /&gt;
&lt;br /&gt;
Так как всем остальным пользователям нужно уметь считывать&lt;br /&gt;
''CGI''-скрипты, но только ''Apache'' приходится их выполнять, администратор должен установить всем ''CGI''-скриптам права '''644'''.&lt;br /&gt;
&lt;br /&gt;
 $ chmod 644 {любое_имя_файла}.cgi&lt;br /&gt;
&lt;br /&gt;
===Настройка ''Apache'' для ''PHP''===&lt;br /&gt;
&lt;br /&gt;
Чтобы заставить web-сервер действовать по заданному сценарию, мы&lt;br /&gt;
должны удостовериться, что прописаны определенные директивы&lt;br /&gt;
''Apache'', и присутствуют определенные модули. Прежде всего следует&lt;br /&gt;
убедиться, что пользователь ''Apache'' – единственный, которому система разрешает запускать ''Apache'', и что этот пользователь – единственный член группы ''Apache''. Назовем этого пользователя '''httpd''', и группу&lt;br /&gt;
тоже назовем '''httpd'''.&lt;br /&gt;
&lt;br /&gt;
 $ groupadd httpd&lt;br /&gt;
 $ useradd httpd -g httpd -d /dev/null -s /sbin/nologin&lt;br /&gt;
&lt;br /&gt;
Нам нужно создать для Apache нового пользователя, чтобы пресечь&lt;br /&gt;
любые попытки взломщиков «угадать» владельца скрипта во время&lt;br /&gt;
работы. Мы не дадим самому ''Apache'' многих привилегий: у него даже&lt;br /&gt;
не будет отдельного входа в систему. Владельцу скриптов и файлов&lt;br /&gt;
данных, конечно, полагается быть web-разработчиком или кем-то из&lt;br /&gt;
группы web-дизайна.&lt;br /&gt;
&lt;br /&gt;
Данная мера безопасности окажется бесполезной, только если кто-нибудь сумеет «угадать» идентификатор web-сервера, но для этого требуется несколько больше, чем способность выполнять ''CGI''-скрипты.&lt;br /&gt;
&lt;br /&gt;
Еще нам понадобится возможность создавать другие каталоги '''cgi''',&lt;br /&gt;
чтобы объединять наши скрипты вместе по типам. Желательно группировать вместе ''PHP''-скрипты, так как можно, а иногда даже нужно,&lt;br /&gt;
иметь копию интерпретатора ''PHP'', запущенную внутри ''CGI''-каталогов.&lt;br /&gt;
Обычно считается, что это – дыра в безопасности, но с ней можно управиться способом, которым мы потом займемся отдельно.&lt;br /&gt;
&lt;br /&gt;
'''UID''' и '''GID''' созданного в системе Linux/Unix пользователя '''httpd''', отображаемые в списке Linux-пользователей, должны совпадать с '''UID''' и '''GID''' пользователя и группы ''Apache''.&lt;br /&gt;
&lt;br /&gt;
Директивы '''http.conf''', присутствующие в главном разделе конфигурации ''Apache'', таковы:&lt;br /&gt;
&lt;br /&gt;
 User httpd&lt;br /&gt;
 Group httpd&lt;br /&gt;
&lt;br /&gt;
Позаботимся, чтобы ''Apache'' мог выполнять ''CGI''-скрипты. Это гарантируется модулем ''mod_cgi'' (он доступен как часть базового дистрибутива ''Apache''), но существуют некоторые директивы, которые следует добавить к '''httpd.conf''' еще до работы модуля. Нам нужно сообщить '''httpd.conf''',&lt;br /&gt;
что ''CGI''-скрипты могут запускаться, и откуда они могут запускаться. ''PHP'' должен запускаться из какого-либо каталога '''cgi-bin''', независимо от&lt;br /&gt;
того, один или несколько пользователей работают с ''CGI''-скриптами. Мы&lt;br /&gt;
должны начать с директивы, запрещающей всему, что располагается&lt;br /&gt;
за пределами дерева web-сервера, запускаться владельцем или любым&lt;br /&gt;
пользователем ''Apache''. Потом мы сможем ослабить наши правила, но&lt;br /&gt;
для начала лучше проявить максимум консерватизма.&lt;br /&gt;
&lt;br /&gt;
Следующие директивы тривиальны, но совершенно необходимы&lt;br /&gt;
для безопасных операций ''Apache'':&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Directory /&amp;gt;&lt;br /&gt;
 Order deny,allow&lt;br /&gt;
 deny from all&lt;br /&gt;
 &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это – стандартная директива, она гарантирует, что ''Apache'' не сможет обслуживать файлы по всей файловой системе, даже дерево web-&lt;br /&gt;
сервера. Конечно, теперь придется потрудиться, чтобы ''Apache'' СМОГ&lt;br /&gt;
обслуживать нужные файлы, так что добавим другую директиву, сообщающую, что ''Apache'' может обслуживать файлы данных и контента из&lt;br /&gt;
'''DocumentRoot''':&lt;br /&gt;
&lt;br /&gt;
 DocumentRoot /usr/local/apache2/htdocs&lt;br /&gt;
 &amp;lt;Directory /usr/local/apache2/htdocs&amp;gt;&lt;br /&gt;
 Order allow,deny&lt;br /&gt;
 Allow from all&lt;br /&gt;
 &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для правильной работы ''PHP''-скрипты обязаны восприниматься как CGI-скрипты.&lt;br /&gt;
&lt;br /&gt;
Чтобы никто не вздумал разрешить выполнение ''CGI'' с использованием файлов ''PHP'' не из каталога '''/usr/local/apache2/cgi-bin''' (или любого другого, явно прописанного вами в директивах '''Directory'''), добавим&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>