Назад | Перейти на главную страницу

Как настроить Web / FTP-сервер так, чтобы он загружал файлы .sh, а не отображал их содержимое

У меня есть FTP-сервер (vsftpd), на котором много файлов разных типов. Обычно при нажатии на .tar.gz файл в вашем браузере, он начнет его загрузку.

Проблема в том, что пользователь нажимает на .sh файл, файл не загружается, а вместо этого его содержимое отображается в браузере.

Что я должен настроить FTP или веб-сервер, чтобы заставить его загружать файлы .sh?

Редактировать: Во-первых, веб-сервер - это Apache. Однако, как я понял, веб-сервер не мешает запросу, так как "ftp: //"протокол используется вместо"http: //". Возможно, поэтому правила Apache игнорируются (потому что Apache не получает никаких запросов). FTP-сервер напрямую обрабатывает все клиентские запросы.

Учитывая все это. Есть ли способ настроить FTP-сервер для правильной обработки файлов .sh?

В Apache вы можете сделать следующее, чтобы заставить даже самые противные веб-браузеры (я смотрю на вас, IE) загрузить файл:

<FilesMatch *.sh>
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

Это должно быть добавлено либо внутри VirtualHost, либо в каталог внутри VirtualHost.

Какое программное обеспечение веб-сервера вы используете?

Обычно об этом заботятся типы MIME. В зависимости от веб-сервера вам может потребоваться отредактировать соответствующий файл типов MIME (скажем, /etc/mime.types или, для nginx, /etc/nginx/mime.types, хотя это указано в файле / etc / nginx / nginx.conf) и добавьте что-нибудь для расширения .sh.

В Apache есть «mime_magic_module». Если он включен, он определит, что файл является сценарием оболочки, и установит тип MIME на «application / x-shellscript» или «application / x-sh». Если на вашем веб-сервере нет такого автоматического определения, вы можете добавить что-то вроде:

application/x-sh               sh

в эквивалентный файл типов MIME.

Если вы это сделаете curl -Iv http://www.example.com/foo.sh вы увидите заголовок Content-Type:, указывающий, что веб-сервер считает файлом, который он обслуживает.

Если веб-сервер может добавить заголовок HTTP, вы сможете это сделать. Что-то вроде:

Content-Disposition = attachemnt; filename = "abcd.sh"

Если браузер передает FTP напрямую FTP-серверу, настраивать особо нечего.