Проблемы и решения
Решение некоторых проблемм в ОС Linux.
- Если что-то не работает, то сообщения системы можно посмотреть в /var/log/messages,
а для Postfix в /var/log/maillog либо в /var/spool/postfix, где лежат результаты обработки писем.
Некоторые сообщения об ошибках приходят на почтовый ящик пользователя root (в alt linux первому пользователю созданному после root), который находится в /var/mail/
В Debian системные журналы ведутся в /var/log/syslog, messages
а Postfix свои пишет в /var/spool/mail.err, mail.warn
В Debian для перенастройки некоторых пакетов можно использовать утилиту dpkg-reconfigure, которой параметром передать имя пакета, например:
# dpkg-reconfigure postfix
- Если нужно изменить ip адреса сетевых карт, то
в AltLinux 2.4 Master и 2.3 Compact правим:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
# /etc/init.d/network restart
либо используем утилиту
# draknet
В AltLinux 4.0 и выше используется новый набор скриптов для сетевых настроек - etcnet. Подробно можно узнать на http://www.freesource.info/wiki/AltLinux/etcnet?v=ws8
В Debian редактируем файл /etc/network/interfaces, после чего перезапускаем интерфейсы
# /etc/init.d/networking restart
Интерфейсы не поднимутся, если нет физического соединения!
- Если нужно изменить имя компьютера (host name), то правим:
# vi /etc/hosts
# hostname
но лучше использовать специальные утилиты. Для Alt Linux:
# draknet
Для Debian:
# dpkg-reconfigure etherconf
иначе при перезагрузке она затрёт все исправления. При этом нужно не забыть поменять имя и во всех прикладных программах, где есть соответствующая ссылка. Для Courier-IMAP: /etc/courier-authlib/authdaemon-mysql.conf: DEFAULT_DOMAIN
- Пересоздать сертификаты, изменив настройки в /etc/courier-imap/
- Перенастроить DNS
- Чтобы найти все файлы где упоминается имя хоста можно выполнить:
#grep -R /etc - Если проблемы с насройкой php, то можно включить лог и посмотреть, что не работает. Редактируем /etc/php/4.3.9/mod_php/php.ini:
display_errors = On
display_startup_errors = On
log_errors = On
error_log = /var/log/php.log
Если php страницы отображаются не в той кодировке, то меняем кодировку по умолчанию:
default_charset = "windows-1251"
- Если не работает какая-нибудь программа обмена данными с внешним миром (например почта, ftp, web, удалённый рабочий стол и т.д.), а команды ping и traceroute отрабатывают без проблем, то скорее всего нужно уменьшить максимальный размер пакетов (MTU) на сет карте. Это особенно актуально, если организован vpn канал.
Проверяем какой размер проходит и меняем настройки сет карты:
# ping -s 1500 ya.ru
# ping -s 1350 ya.ru
PING ya.ru (213.180.204.8) 1350(1378) bytes of data.
1358 bytes from ya.ru (213.180.204.8): icmp_seq=1 ttl=54 time=82.8 ms
1358 bytes from ya.ru (213.180.204.8): icmp_seq=2 ttl=54 time=83.4 ms
1358 bytes from ya.ru (213.180.204.8): icmp_seq=3 ttl=54 time=83.1 ms
# ifconfig eth1 mtu 1350
Чтобы это сохранилось и при перезагрузке, добавляем эту команду в конец файла /etc/rc.d/rc либо /etc/rc.d/rc.local
Если есть подозрения на почтовый вирус, смотрим кто заражён, просматривая отфильтрованный по порту трафик на сет. карте:
# tcpdump port 25
чтобы просмотреть трафик пользователя:
# tcpdump host 10.0.0.10
по умолчанию прослушивается интерфейс eth0. Для прослушивания дргого интерфейса указываем его в параметре i:
# tcpdump host 10.0.0.10 -i eth1
- В редакторе mc, для того, чтобы при вставке текста не запоминался отступ:
убрать крестик с опции: Options -> General -> Return does autoindent
- Скопировать(переместить) файл в тотже каталог с другим именем Shift+F5(F6)
- Открыть на смежной панели текущий каталог Alt+o
- Чтобы в mc работали клавиши "*","-","+" как в Far, нужно провести обучение: Options -> learn Keys
Несколько полезных команд: Команда
Описание
uptime как долго система запущена lsmod информация о загруженных модулях ядра netstat -a просмотр всех открытых tcp и udp портов netstat -an | grep 80 что прослушивает 80 порт (http) cd - Вернуться в предыдущий каталог rm -rf удалить сразу всю директорию без лишних запросов dmesg отчёт о процесе загрузки системы split [-b кол-во_байт] [-l кол-во_линий] имя_файла разбить файл на несколько частей find . -maxdepth 1 -type d -print | xargs du -sk | sort -rn размер всех подкаталогов в данном каталоге perl -pi -e 's/oneword/anotherword/g' *. заменить одно слово на другое во многих файлах, если в одном файле,то поставить его имя вместо " * " perl -e '@time=localtime(time()-84600); print $time[3]' Вчерашнее число perl -e '$time=localtime(time()-84600); print $time' Вчерашняя дата grep "текст" /where/to/search искать текст в файлах tail -15 /var/log/messages показать последние 15 строк файла tail -15 /var/log/messages > /dev/tty2 послать данные на желаемый терминал tail -f /var/log/messages | grep login показывать вновь записываемые в журнал события, содержащие слово "login" ls | /usr/bin/mailx -s "`uname -n` ls by mail " [email protected] отправить вывод команды ls по почте. Используется пакет mailx. Для RedHat 9 вызов программы: /bin/mail LANG=C
сбросить языковые настройки. Включиться английский.
(полезно при неправильном отображении в mc)
mailq показать какие письма находятся в очереди на отправку postqueue -f попытаться доставить все письма из очереди update-rc.d squid defaults 19 Запускает squid на уровнях 2345 и останавливает на 016. Аргумент '19' позволяет запускать сценарий squid до сценариев с номерами 20 и выше. (аналог chkconfig в Debian) date --set='2007-8-03 13:44' установить системные дату и время iptables -t nat -A POSTROUTING -s 10.0.3.41 -d 217.217.217.217 -o eth1 -p tcp --dport 25 -j SNAT --to 116.116.116.116
Разрешаем прямой доступ к внешней почте. Подробнее: разрешаем доступ хосту 10.0.3.41 из внутренней сети обращаться к хосту 217.217.217.217 на 25 порт (smtp) протокола tcp; такие обращения пропускаем через интерфейс eth1, который имеет адрес 116.116.116.116
Для доступа к РОР добавляем такое же правило для порта 110
iptables -t nat -A POSTROUTING -s 10.0.3.41 -p tcp --dport 25 -j MASQUERADE
Более короткое правило, аналогичное вышеприведённому, только здесь пользователь с ip 10.0.3.41 имеет доступ к любому почтовому серверу в Интернете.
Командная строка
Описание
TAB + scroll-lock или TAB + TAB список всех исполняемых файлов в системе, которые присутствуют в $PATH Ctrl + u очистить командную строку от курсора до начала, в том числе при вводе пароля. Ctrl + a перевести курсор на начало строки Ctrl + e перевести курсор на конец строки Alt + c сделать заглавную букву у текущего слова Alt + t поменять местами слова Alt + u перевести слово в верхний регистр Alt + d удалить конец слова
Команды пакета apt
Описание
apt-get update обновление репозитария apt-get dist-upgrade полное обновление ОС apt-get check проверить текущее состояние системы apt-get install установить пакет. Всё скаченное apt-get лежит в /var/cache/apt/archives. apt-get -f install исправить зависимости apt-get install -d скачать пакет не устанавливая. Лежать будет в /var/cache/apt/archives. apt-get source скачать исходный текст пакета apt-get remove удалить пакет. Результаты можно посмотреть в /var/log/user/info apt-cache search поиск пакета по описанию apt-cache showpkg показать описание пакета
Команды dpkg (Debian)
Описание
dpkg --get-selections [образец...] Выдает список состояний выбора пакетов. dpkg -p | --print-avail имя пакета Выводит детальную информацию о пакете, которую извлекает из файла /var/lib/dpkg/available. dpkg -l | --list ... Показывает пакеты, соответствующие данному образцу. Если образец имени пакета не задан, показывает все пакеты в /var/lib/dpkg/available. В образце имени пакета можно указывать обычные символы шаблона командной оболочки. dpkg -L | --listfiles ... Показывает файлы, установленные на вашей системе из пакета с указанным именем. Заметьте, однако, что файлы, созданные установочными скриптами пакета, не будут показаны. dpkg -S | --search ... Ищет в установленных пакетах файл по заданному образцу. В образце допустимы стандартные символы шаблонов командной оболочки. dpkg --audit команда покажет частично установленные (Half-Installed) пакеты, пакеты, настройка которых не удалась (Failed-Config), а также все пакеты в ошибочных состояниях.
Информация о системе Команда Информация о... cat /proc/cpuinfo процессоре cat /etc/redhat-release версии Red Hat df HDD du -c /home/ или
ls -R -s -1 размер каталога /home top процессах, RAM cat /etc/passwd всех пользователях cat /etc/group всех группах id oracle пользователе oracle finger или
w пользователях, зарегистрированных сейчас в системе (на каком терминале, откуда и т.д.) cat /proc/mdstat состоянии RAID массива (софтверного) cat /proc/megaraid/hba0/raiddrives-0-9 состоянии RAID массива (на контроллере megaraid) cat /proc/megaraid/hba0/diskdrives-ch0 состоянии дисков на канале 0 в RAID массиве ip route show Откуда взялся маршрут
Команды пакета rpm Описание rpm2cpio file.rpm | cpio -idmuv --no-absolute-filenames вручную распаковать rpm файл rpm -i Установка пакетов rpm -e Деинсталляция пакета rpm -Uvh Обновление или установка пакетов rpm -q Информация о пакете rpm -qf Узнать какому пакету принадлежит файл
Полезно:
-qi - более полное описание пакета,
-ql - список файлов в пакете,
-qc - список конфигов в пакете,
-qd - список документации,
-qR - список зависимостей пакета. rpm --recompile Установка из исходников rpm --rebuild собрать бинарный пакет rpm --rebuilddb Перестроить базу rpm -Va Проверить все установленные пакеты на зависимости
Комманды (раз)архивирования Описание tar -cvf - * | gzip -c > arc.tar.gz заархивировать всё содержимое текущего каталога (включая подкаталоги) tar -zxvf arc.tar.gz разархивировать всё в текущий каталог gzip -cd arc.tar.gz | tar -xvf - gzip -cd Fname | cpio -imd# bzip2 -cd arc.tar.bz2 | tar -xvf -
Комманды less Описание g на начало текста G на конец текста /слово поиск подстроки "слово" / продолжение поиска F постоянно обновлять просматриваемый файл
Если не доходит почта, то смотрим логи /var/log/maillog. Если отправитель точно не спамер то, возможно, неправильно настроена обратная зона на его почтовом сервере. Проверить можно так:
# host alpicom.ch
alpicom.ch has address 194.38.160.10
# host 194.38.160.10
10.160.38.194.in-addr.arpa domain name pointer neobolian.deckpoint.ch.
Это пример неправильной настройки, а вот как должно быть:
# host mail.ru
mail.ru has address 194.67.57.26
# host 194.67.57.26
26.57.67.194.in-addr.arpa domain name pointer mail.ru.
Если для фильтрации спама стоит spamassassin, то адреса и домены можно включить в белый список в файле /etc/mail/spamassassin/local.cf:
whitelist_from [email protected]
whitelist_from *@domain2.ru Так же можно в самом Postfix в файле /etc/postfix/main.cf добавить ip адрес домена в список mynetworks
Выгрузить базу MySQL можно командой:
# mysqldump -u root -p DBName > mydb.sql
Если mysqldump не запускается, то нужно указать полный путь до этого файла, который можно узнать командой:
# find / -name mysqldump
/usr/local/mysql-3.23.54a-pc-linux-i686/bin/mysqldump
Сами базы MySQL хранит в /var/lib/mysql/db/, здесь можно посмотреть какие базы созданы.
Чтобы загрузить базу, нужно сначала создать пустую, а для надёжности предварительно удалить старую:
# mysql -u root -p
mysql> drop database if exists DBName;
mysql> create database DBName;
mysql> quit
а затем в неё загрузить данные:
# mysql -u root -p DBName < mydb.sql
Если для пользователя root в MySQL нет пароля, то параметр -p не обязателен, также можно задать пароль явным образом, только без пробела, например -pPassWord. Далее нужно убедиться, что в новой базе есть тот пользователь, от имени которого происходило обращение к базе. Если пользователя нет, то чтоб создать в точности такого пользователя с соответствующими правами, выгружаем базу mysql и выбираем все строки, касающиеся этого пользователя:
# mysqldump -u root -p mysql > mysqldb.sql
В файле mysqldb.sql останется приблизительно следующее:
NSERT INTO db VALUES ('%','DBName','UserName','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
INSERT INTO host VALUES ('localhost','UserName','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
INSERT INTO user VALUES ('localhost', 'UserName', '','N','N','N','N','N','N','N','N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', 0, 0, 0);
Загружаем базу командой:
# mysql -u root -p mysql < mysqldb.sql
Если заменили сетевую карту, а система пытается её использовать со старыми драйверами, то нужно указать новое соответствие в /etc/modules.conf. Так, если используем сетевую карту Realtek RTL-8139, то указываем драйвер:
alias eth0 8139too
Если для установки пакета требуется наличие более старых пакетов, чем установленные у нас, то можно произветси даунгрейд (возврат к более старой версии) установленных пакетов.
# apt-get install liblzo-devel
The following packages have unmet dependencies:
liblzo-devel: Depends: liblzo (= 1.08-alt2) but 1.08-alt3 is to be installed
E: Broken packages
# apt-get install liblzo=1.08-alt2
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be DOWNGRADED
Но прежде чем опускаться до более старый версий стоит попробовать обновить информацию о репозитории:
# apt-get update
И установить ещё раз. Если даунгрейд потянет за собой много других пакетов, то может быть имеет смысл открыть в /etc/apt/sources.list доступ к репозиторию Sysiphus и после команды update, попытаться установить пакет ещё раз.
- Чтобы в Postfix перенаправлять почту с одного домена на другой (mail routing), используется транспортная таблица (mail transport). Подробно о ней можно узнать в руководсвте:
# man transport
или по адресу http://www.postfix.org/transport.5.html. Поскольку мы для хранения служебной информации используем MySQL, то нужно добавить понадобившиеся маршруты в таблицу transport:
# mysql -upostfixadmin -ppostfixadmin postfix
mysql> INSERT INTO transport (domain,destination) VALUES ('domain1.ru',':mail.domain2.ru');
Не лишне будет предворительно проверить, что mail.domain2.ru принимает почту:
# telnet mail.domain2.ru 25
В противном случае при попытке отправить сообщение на ящик [email protected] в /var/log/maillog появится запись:
postfix/qmgr[25305]: 65D383767D: to=, relay=none, delay=1689, status=deferred (transport is unavailable)
Если мы не поставим двоеточие , то в журнале получим сообщение:
postfix/qmgr[25305]: warning: connect to transport mail.domain2.ru: No such file or directory
Если указали неверный транспорт (я сначала пробовал smtp:mail.domain2.ru), то:
postfix/smtp[32546]: 798993767D: to=, relay=none, delay=1, status=bounced ([mail.domain2.ru]: Name or service not known)
Если же всё нормально, то увидим:
postfix/smtp[354]: 5C8793767F: to=, relay=mail.domain2.ru[182.160.1.3], delay=1, status=sent (250 1182880 message accepted for delivery)
- Если мы купили ещё одно доменное имя newname.ru, то Postfix можно указать, чтобы письма отправляемые на [email protected] перенаправлялись на [email protected], другими словами сделать алиас на домен. В Postfix Admin это можно сделать нажав на кнопку "Добавить алиас". То же самое можно сделать вручную, выполнив команды:
mysql> INSERT INTO domain (domain, description, aliases, mailboxes, maxquota, transport, backupmx, created, modified, active) VALUES ('newname.ru','Our new domain','50','130','0','','0','2006-08-10 16:06:27','2006-08-10 16:06:42','1')
mysql> INSERT INTO alias (address, goto, domain, created, modified, active) VALUES ('@newname.ru','@oldname.ru','newname.ru','2006-08-10 16:08:06','2006-08-10 16:08:06','1')
После этого добавляем в файл /etc/postfix/mydestination строку
newname.ru
убедимся, что этот файл подключается в /etc/postfix/main.cf :
mydestination = localhost, $myhostname, localhost.$mydomain, $config_directory/mydestination
Также проверим, что мы не забыли указать новое имя в /etc/hosts:
127.0.0.1 localhost.localdomain localhost
10.0.0.2 localnet.dns.name
89.116.14.18 oldname.ru newname.ru Всё, перегружаем postfix и можем использовать оба доменных имени для отправки и получения почты. Если при запуске DNS вервера не копируются slave зоны, а в журнале появляются записи:
May 03 16:33:23.403 general: dumping master file: tmp-XXXXvmmNBt: open: permission denied
May 03 16:33:23.403 xfer-in: transfer of 'coke.com/IN' from 10.0.0.85#53: failed while receiving responses: permission denied
то нужно изменить владельца каталога zone на named.named:
# chown -R named.named /var/lib/bind/zone
а если ещё и не создаётся журнал, то изменить владельца var
# chown -R named.named /var/lib/bind/var Формат записей crontab можно посмотреть в /etc/crontab.template:
minute (0-59),
| hour (0-23),
| | day of the month (1-31),
| | | month of the year (1-12),
| | | | day of the week (0-6 with 0=Sunday).
| | | | | user commands Чтобы получать результаты работы crontab по почте (полезно при отладке) указываем /etc/crontab:
Если же не хотим получать ничего, то там же указываем:
MAILTO=/dev/null
Файлы crontab пользователей находятся в каталоге /var/spool/cron, системный - в файле /etc/crontab
Также демон cron запускает команды из каталогов /etc/cron.d /etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly
Чтобы сетевая карта откликалась более чем на один IP адрес нужно создать алиасы (alias) на интерфейс. Создать алиас на интерфейс eth0 можно скопировав файл /etc/sysconfig/network-scripts/ifcfg-eth0 в файл ifcfg-eth0:0. В новом файле указываем настройки желаемого IP адреса, не забывая указать параметр DEVICE=eth0:0
Запускаем команду
# /etc/sysconfig/network-scripts/ifup-aliases eth0:0
либо
# /etc/init.d/network reload
если указать параметр restart, то оборвуться все соединения
Решить проблемы со squid могут помочь журналы /var/log/messages и /var/log/squid/cache.log
Если squid перестал работать, а в журнале появились записи:
(squid): storeUfsDirOpenSwapLog: Failed to open swap log.
squid[8293]: Squid Parent: child process 8317 exited due to signal 6
squid[8293]: Exiting due to repeated, frequent failures
значит squid потерял доступ к каталогу со своим кэшем. Проверить это можно установив полный доступ к каталогу. Предварительно запомним кому он принадлежит и с какими правами:
# chmod 777 /var/spool/squid
Если после этого squid запустился нормально, то стоит выяснить почему он потерял свои права.
Для того, чтобы создать образы дисков и иметь к ним постоянный доступ, что удобно, например, с apt, выполняем:
# mkdir /dvd
# cd /dvd
# dd if=/dev/cdrom of=имя_образа Чтобы объединить несколько проски-серверов squid для обмена кэшами между собой, нужно в squid.conf на каждом из них указать соседей:
icp_port 3130
cache_peer 10.0.0.2 sibling 3128 3130
cache_peer 10.0.0.3 sibling 3128 3130
Если мы хотем завернуть весь трафик на соседний прокси, т.е. заставить наш прокси 10.0.0.1 выходить в Интернет только через соседний прокси-сервер 10.0.0.2, то в squid.conf прописываем:
icp_port 3130
cache_peer 10.0.0.2 parent 3128 3130
never_direct allow all и на 10.0.0.2 даём доступ для 10.0.0.1. Теперь все пользователи, подключенные к 10.0.0.1 будут выходить в Интернет через прокси 10.0.0.2 как один большой пользователь
Создано на конструкторе сайтов Okis при поддержке Flexsmm - накрутка подписчиков в ютуб