Еженедельный Крон / Logrotate / ошибка Denyhosts

Можно ли уточнить то, как Вы настроили gzip? Например, Вы используете mod_deflate? Можно ли отправить отрывки от httpd.conf, особенно поле AddOutputFilterByType? Я следовал за этими направлениями для своего конкретного поставщика услуг хостинга, и возможно, что текст/CSS не находится в списке в Вашем поставщике услуг хостинга:

http://kb.mediatemple.net/questions/1567/Compressing+web+pages+with+mod_deflate

1
задан 29 September 2009 в 22:40
8 ответов

Мне похоже, что существует ошибка в строке 91 из/etc/hosts.deny или/etc/cron.daily/logrotate.

Удостоверьтесь, что записи в hosts.deny отформатированы законно.

0
ответ дан 4 December 2019 в 02:22
  • 1
    Мой hosts.deny пуст, и мой logrotate файл - это: #!/bin/sh тестируют-x/usr/sbin/logrotate ||, выходят 0 4/usr/sbin/logrotate/etc/logrotate.conf –  Unknown 29 September 2009 в 22:50

Моя ставка - то, что где-нибудь существует a sh сценарий с двойным знаком "равно" (" == ") в a test команда вместо единственной (" = "). Встроенный Bash test позволяет == или =, но Оболочка Bourne (по крайней мере, dash на Ubuntu), только позволяет =. Кроме того, мой /usr/bin/test только позволяет равный сингл. Но посмотрите нижнюю часть этого ответа для других примеров, которые производят эту ту же ошибку.

Я заглянул бы logrotate.conf и посмотрите, имеет ли это строку 91, который мог бы иметь ту проблему.

Если по некоторым причинам Вы хотите воссоздать сообщение об ошибке для тестирования:

Создайте файл, давайте назовем его "a" со следующим содержанием:

echo 'In script "a"'
f="/etc/hosts.deny"
test $f == "foo"

Теперь сделайте:

sh a

Необходимо добраться:

In script "a"
test: 3: /etc/hosts.deny: unexpected operator

Можно также воспроизвести подобную ошибку с помощью любого следующего:

sh -c "test /etc/hosts.deny +"
sh -c "test /etc/hosts.deny -"
sh -c "test /etc/hosts.deny /"
sh -c "test /etc/hosts.deny *"

Править: Попробуйте следующее для сужения поиска:

$ su -
$ find /etc -type f | xargs awk 'FNR==91 && /test/ {print FILENAME, $0}'

Вы будете su для укоренения затем работайте find/awk команда. Это покажет Вам имена файлов и строку 91 из файла, если слово "тест" появится на той строке для каждого файла под /etc. Затем можно искать операторы, которые являются неправильными.

0
ответ дан 4 December 2019 в 02:22
  • 1
    Мой весь logrotate.conf файл является только 32 строками долго: codepad.org/96XWG6uD –  Unknown 30 September 2009 в 10:31
  • 2
    @Dennis, я просто попробовал это. Никакие результаты не были найдены. –  Unknown 5 October 2009 в 07:44
  • 3
    Затем я расширил бы поиск и изменился бы /etc в эти find команда к / –  Paused until further notice. 5 October 2009 в 08:08
  • 4
    Это могло бы быть лучше пользователю завершенные пустым указателем имена файлов, также: find / -type f -print0 | xargs -0 awk 'FNR==91 && /test/ {print FILENAME, [110]}' –  Paused until further notice. 5 October 2009 в 08:19
  • 5
    Это будет быстрее: find / -type f -print0 | xargs -0 awk 'FNR==91 && /test/ {print FILENAME, [110]} FNR==92 {exit}' –  Paused until further notice. 5 October 2009 в 08:33

Как насчет в/etc/logrotate.d/denyhosts?

0
ответ дан 4 December 2019 в 02:22

/etd/logrotate.d/denyhosts очень коротко и, кажется, мне не использует тест:

/var/log/denyhosts {
create 0640 root root
missingok
weekly
rotate 7
compress
postrotate
/etc/init.d/denyhosts restart > /dev/null
endscript
}

Единственный экземпляр "теста" на строке 91 из файла в / и т.д. находится в несвязанном файле.

cron.daily/logrotate задание указывает на/usr/sbin/logrotate (двоичный файл) - если ошибка там, где я мог проверить исходный код?

0
ответ дан 4 December 2019 в 02:22

Только для исправности можно хотеть использовать:

foo:~# which test
/usr/bin/test

видеть, что тестовая программа - то, что Вы думаете, что это. Один метод безопасного программирования должен использовать полный путь для команд в заданиях крона. Это гарантирует, что надлежащий двоичный файл называют и препятствует тому, чтобы взломщик заменил другой столь же именованной командой ранее в Вашем ПУТИ.

0
ответ дан 4 December 2019 в 02:22

/etc/logrotate.d/denyhosts очень коротко и, кажется, мне не использует тест:

Да, но это имеет это:

postrotate
/etc/init.d/denyhosts restart > /dev/null
endscript

и тот сценарий действительно наполняет как

    HOSTS_DENY=$(grep ^HOSTS_DENY $CONFIG  | cut -d = -f 2)
    test -e $HOSTS_DENY || touch $HOSTS_DENY

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

К счастью, мы не должны предполагать, эта команда покажет Вам точно, куда ошибка прибывает из:

/bin/sh -x /etc/init.d/denyhosts restart
1
ответ дан 4 December 2019 в 02:22
  • 1
    Привет спасибо за справку Justin, но я попробовал ту команду, и я просто видел набор + знаки. Я wasn' t способный найти любые ошибки. –  Unknown 4 January 2010 в 04:54
  • 2
    Что точно это печатало? Перезапуск denyhosts должен быть тем, что генерирует ту ошибку. возможно, в logrotate файле изменяют строку на "/bin/sh-x/etc/init.d/denyhosts restart" от "/etc/init.d/denyhosts перезапускают >/dev/null" это могло бы пролить еще некоторый свет на то, куда проблема возникает из. это wouldn' t делают что-либо в течение недели, если Вы не изменяете ' weekly' к ' daily' хотя... –  Justin 4 January 2010 в 05:06

Вот некоторые советы по устранению неисправностей. Я думаю, что Justin абсолютно на правильном пути. Проблема находится, вероятно, в Вашей установке denyhosts. Но давайте разыщем его.

Вы получаете ошибку первоначально от logrotate. Так выполняет logrotate:

logrotate /etc/logrotate.conf

Принятие Вас получает ошибку, по крайней мере, у Вас есть восстанавливаемый случай. Теперь давайте посмотрим, находится ли проблема в logrotate или denyhosts. Давайте использовать команду denyhosts, которую мы видели в logrotate:

/etc/init.d/denyhosts restart > /dev/null

Если это дает Вам ошибку, Вы действительно близко к разыскиванию этого. Попытайтесь взлететь">/dev/null" от конца строки для получения большей информации. Отправьте вывод здесь для справки.

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

Добавьте другую строку к своему/etc/crontab. Скопируйте cron.weekly строку и вставьте ее ниже всех других строк. Затем отредактируйте его так весь, "когда" записи будут звездочками.

47  6   *   *   7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )

Изменение, что к:

*   *   *   *   *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )

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

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

0
ответ дан 4 December 2019 в 02:22

У меня была такая же проблема после удаления пакета denyhosts. Убедитесь, что у вас действительно установлен пакет:

mlambie@prime:~$ dpkg -l | grep denyhosts
rc  denyhosts                              2.6-6.1ubuntu1                    a utility to help sys admins thwart SSH crac

У вас будет «ii» в качестве первых двух символов, если пакет установлен. Например, у меня установлен openssh-server и я получаю следующий результат:

mlambie@prime:~$ dpkg -l | grep openssh-server
ii  openssh-server                         1:5.3p1-3ubuntu7                  secure shell (SSH) server, for secure access

В моем случае, я думаю, что конфигурация logrotate не была успешно удалена при удалении пакета, поэтому я вручную удалил ее.

0
ответ дан 4 December 2019 в 02:22

Теги

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