Apache: как запускать файлы PHP через CGI как обычный пользователь и без них исполняемый

Компьютер - это инструмент. Попробуем провести аналогию с другим инструментом, скажем, со сковородой. Иногда нужно позаботиться о сковороде. Например, вам нужно очистить его с помощью средства для мытья посуды. Вы бы сказали, что мыло для посуды является обязательным ингредиентом любого рецепта, для которого вы используете сковороду? Вы никогда не увидите «мыло для посуды» в списке ингредиентов в кулинарных книгах. Он нужен, но приготовление средства - другое дело, поэтому в кулинарных книгах об этом не упоминается. Сковородку нужно чистить, но она не для этого предназначена.

То же самое и с вашим компьютером. Его нужно настроить и позаботиться о нем, но это не то, для чего он предназначен. Вы заботитесь об этом, вы настраиваете его, чтобы он работал правильно. Как только это будет сделано, вы можете использовать его не как системный администратор, а как пользователь. Это то, для чего он создан. Когда вы являетесь пользователем, вам больше не требуется sudo . Просто воспользуйтесь заранее подготовленным средством. Конечно, время от времени вам нужно будет использовать привилегии root, так же как вы должны чистить сковороду так же часто, как вы используете ее для приготовления пищи.

Не сильно преувеличивая, можно сказать, что вам никогда никогда не понадобится sudo (или пароль root) для использования вашего компьютера. Только подготовить компьютер.

1
28.04.2018, 23:11
1 ответ

Вот способ добиться этого, который подходит для частной среды разработки, которая используется только для этой цели, но никогда не должен использоваться на машине, -маршрутизируемой через Интернет.

Выполните эти довольно радикальные команды:

# chown myuser:myser /usr/bin
# chown myuser:myser /usr/bin/php-cgi

, затем:

# chmod 711 /home/myuser
# chmod 755 /home/myuser/public_html
#

Кроме того, (повторно -)скомпилируйте Apache для установки suEXEC AP_DOC_ROOT="/"и (повторно -).

Измените /etc/httpd/conf/httpd.confв соответствии с этими строками:

ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
ServerAdmin root@localhost
#ServerName example.local
ServerName localhost    
User apache
Group apache
<Directory />
    AllowOverride none
    Require all granted
</Directory>
<VirtualHost *:80>
  DocumentRoot "/home/myuser/public_html/public"
  SuexecUserGroup myuser myuser
  <IfModule alias_module>
    ScriptAlias /cgi-bin/ /home/myuser/public_html/public/cgi-bin/
  </IfModule>
  <Directory "/home/myuser/public_html/public">
    Options Indexes FollowSymLinks ExecCGI
    AllowOverride None
    Require all granted
    AddHandler cgi-script.cgi.pl
  </Directory>
</VirtualHost>
<IfModule dir_module>
  DirectoryIndex index.php index.cgi index.html index.htm
</IfModule>

и изменить /etc/httpd/conf.d/php.confпримерно так:

ScriptAlias /local-bin /usr/bin
AddHandler application/x-httpd-php5 php
Action application/x-httpd-php5 /local-bin/php-cgi

Наконец, (re -)запустите Apache.

Это лучший подход, который я нашел до того, как задать вопрос выше. Однако почти наверняка есть лучшие альтернативы, и я хотел бы узнать о них, поэтому я задаю вопрос. (Например, установка двоичного файла php-cgiв домашнем каталоге пользователя в принципе должна быть жизнеспособной и менее радикальной мерой, чем изменение права собственности на системный двоичный файл и его каталог.)

Итак, пожалуйста, не стесняйтесь голосовать за этот ответ, если он вам помог, или конструктивно комментировать, если он вам не помог, но я пока не буду отмечать его как «правильный» в надежде, что появятся лучшие ответы..

0
28.01.2020, 00:36

Теги

Похожие вопросы