Есть ли какие-либо угрозы безопасности, связанные с тем, что пользователи могут добавлять свои собственные файлы виртуальных хостов nginx? - PullRequest
0 голосов
/ 24 июня 2011

Допустим, я даю людям хостинг аккаунтов через nginx.Если бы я поместил строку в их файлы конфигурации виртуального хоста, которая включает в себя дополнительный файл конфигурации, находящийся в их домашних каталогах, может ли это привести к какому-либо нарушению безопасности?

Вот файл виртуального хоста пользователя:

server {
    listen 80;
    server_name user.example.com;
    access_log /var/log/nginx/user.access.log;
    location / {
        root /home/user/htdocs;
        index index.html index.htm index.php;
    }
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME  /home/user/htdocs$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    # The important bit
    include /home/user/extra_config;

}

Теоретически это может быть объединено с заданием cron, которое проверяет временную метку каждого extra_config и, при необходимости, перезагружает nginx.В идеале пользователи должны использовать это, чтобы запретить доступ к закрытым файлам / каталогам или создавать перезаписи - в основном, это будет альтернативой .htaccess.Но есть ли подводные камни в этом подходе?Есть ли лучший способ сделать это?

1 Ответ

1 голос
/ 24 июня 2011

Лучше всего разрешать только директивы конфигурации из белого списка. Вы не хотите, чтобы злоумышленник («Ева») захватил трафик другого пользователя. например, я считаю, что пользователь может создать конфигурацию, подобную следующей:

} 
server {
   listen 80;
   server_name alice.example.com;
   root /home/eve/htdocs;
}
server {
   listen 80;
   server_name bob.example.com;
   root /home/eve/htdocs;
}
server {
   listen 80;
   server_name passwd.example.com;
   root /etc/passwd;

Вместо этого, в идеальном мире вы должны были бы вводить данные с помощью какого-то специального пользовательского интерфейса и создавать соответствующую конфигурацию nginx самостоятельно из этого пользовательского ввода. Например, я позволяю пользователям задавать запреты IP аналогичным образом - у меня есть пользовательский интерфейс, который принимает только список IP-адресов. Затем я проверяю формат IP через регулярное выражение и записываю директивы nginx deny.

...