Apache из пакета Debian по умолчанию для обзора ниже:
https://catjcode.com/apache_conf.txt "Default apache conf"
https://catjcode.com/apache_site.txt "Default apache site"
Попробуйте более минимальную конфигурацию по умолчанию для получения доступа к http://192.168.15.1/index.html или подобной. Затем добавьте обратно каждую необходимую часть вашей конфигурации.
Другая возможная проблема в сообщении журнала:
access to / denied
Сервер может быть настроен таким образом, что попытка просмотра, http://192.168.15.1/
была воспринята как индекс: Apache индексирует каталоги или листинг файлов, которые часто отключены по умолчанию. Обработчик по умолчанию в виде index.html
может быть недостаточно настроен. Предложите попробовать перейти непосредственно к http://192.168.15.1/index.html
и посмотреть, отличается ли ошибка в журнале.
Также проверьте символические ссылки, если таковые имеются. Предположим, ваш сайт на самом деле не использует /etc/apache2/sites-available/default
в качестве своей конфигурации, используется другой файл, сводя на нет все ваши изменения. Ниже приведена типичная установка; обратите внимание на символическую ссылку и схему именования:
ls /etc/apache2/sites-enabled/ -lah
drwxr-xr-x 2 root root 4.0K Aug 29 11:43 .
drwxr-xr-x 8 root root 4.0K Aug 29 11:40 ..
lrwxrwxrwx 1 root root 35 Aug 29 11:38 000-default.conf -> ../sites-available/000-default.conf
Чтобы помочь диагностировать проблемы с разрешениями: проверьте, используется ли www-data в Apache, запустите Apache и просмотрите владельца процесса. Обратите внимание на www-data ниже:
ps -ef|fgrep apache
root 1495 1 0 Feb16 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 5239 1495 0 09:33 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 5240 1495 0 09:33 ? 00:00:00 /usr/sbin/apache2 -k start
Проверьте разрешения файловой системы; пример ниже:
ls -lah /var/www/html/
drwxr-xr-x 6 root root 4.0K Sep 9 13:30 .
drwxr-xr-x 3 root root 4.0K Aug 29 11:38 ..
drwxr-xr-x 2 www-data root 4.0K Aug 30 17:56 cgi-bin
drwxr-xr-x 2 www-data root 4.0K Sep 9 13:26 css
drwxr-xr-x 2 www-data root 4.0K Sep 8 12:36 images
drwxr-xr-x 2 www-data root 4.0K Sep 9 10:14 js
-rw-r--r-- 1 www-data root 3.4K Sep 9 13:14 index.html
Решение этого полностью в чистом bash
было бы, я думаю, нецелесообразным. См., например. вопрос «Почему использование цикла оболочки для обработки текста считается плохой практикой? ».
Вместо этого давайте немного упростим восприятие входных данных.
awk 'FNR == 1 { split($0, port, ","); FS=","; next }
{ for (i=2; i<=NF; ++i) if ($i == "open") print $1, port[i] }' file.csv
Эта команда awk
сначала считывает номера портов из первой строки CSV-файла в массив с именем port
. Номер порта для столбца N
будет сохранен в port[N]
.
Он делает это, разделяя первую строку ввода запятыми и просто сохраняя результат в массиве port
. Это то, что делает команда split()
. Условие FNR == 1
означает "Если это первая строка файла, то сделайте так..."(FNR
- номер строки в текущем входном файле ). Блок кода без условия будет выполняться для каждой строки ввода.
После вызова split()
, FS
в качестве разделителя полей устанавливается запятая. Это означает, что остальные строки в файле будут автоматически разделены запятыми на поля. Это используется в цикле во втором блоке для перебора полей CSV (от второго поля до последнего )в каждой строке.
Для каждой из других строк в данных он перебирает поля, разделенные запятыми -, и когда он находит поле, значение которого является строкой open
, он распечатывает IP-адрес (первого поле )и соответствующий номер порта.
Вывод этой команды, учитывая данные в вопросе
1.1.1.2 21
1.1.1.3 21
1.1.1.4 4
1.1.1.4 21
1.1.1.5 21
1.2.3.4 21
1.4.5.6 7
1.4.5.6 21
1.4.5.6 21
1.1.3.4 21
Это можно легко прочитать с помощью цикла в оболочке:
while read -r ip port; do
telnet "$ip" "$port" # or whatever your command is
done
Это считывает IP-адрес и номер порта один за другим.
Чтобы объединить их в полный сценарий:
#!/bin/sh
awk 'FNR == 1 { split($0, port, ","); FS=","; next }
{ for (i=2; i<=NF; ++i) if ($i == "open") print $1, port[i] }' file.csv |
while read -r ip port; do
telnet "$ip" "$port" # or whatever your command is
done
Вывод команды awk
направляется в цикл while
, который считывает значения и вызывает команду (, обратите внимание на канал |
после имени входного файла ).
Обратите внимание, что если для IP-адреса открыто более одного порта, команда будет выполняться несколько раз для этого адреса.
Выберите первое и следующее соответствующие поля с помощью awk
.
awk -d "," -F '{print $1, $n...}