В системах Linux и UNIX системные службы настраиваются с использованием различных текстовых файлов, расположенных в дереве /etc/ или /usr/local/etc/
Типичная серверная система может иметь десятки конфигурационных файлов.
Вы можете проверить свои файлы конфигурации на синтаксические ошибки без запуска сервера и проверить все настройки.
В некоторых случаях можно проверить здравомыслие конкретных данных (таких как ключи) или каталогов (например, / var / lib / cache /). Текстовые файлы легче управлять удаленно. Вы можете использовать ssh и текстовый редактор.
При возникновении ошибки в конфигурации сервер может не запускаться.
Это может привести к катастрофе.
В этом учебнике объясняется, как быстро найти синтаксическую ошибку для популярных серверов и проверить файл конфигурации на синтаксические ошибки.
Проверьте конфигурацию своего сервера перед перезагрузкой Unix и Linux сервисов
- Следующие команды не будет запускать сервер или останавливать запуск сервера, они просто проверят файл конфигурации.
- Он проверит конфигурацию для правильного синтаксиса, а затем попытается открыть файлы, указанные в конфигурации.
- Конфигурационный файл анализируется и проверяется на наличие синтаксических ошибок, а также все файлы, включенные в файл конфигурации (ов) сервера.
- В большинстве случаев вы также можете указать, какой сервер конфигурационных файлов следует использовать, а не по умолчанию.
- После того как вы проверили свои файлы конфигурации и исправили любые ошибки, вы можете продолжить или перезапустить сервис
Примечание о перезагрузке сервисов
В Linux синтаксис выглядит следующим образом:
/sbin/service SERVICE-NAME [reload|restart]
или
/etc/init.d/SERVICE-NAME [reload|restart]
или
systemctl reload SERVICE-NAME-HERE
Опция перезагрузки перезагружает файл конфигурации без прерывания ожидающих операций.
Например, следующая команда перезагрузит веб-сервер Apache после изменения файла конфигурации:
# /sbin/service httpd reload
или
# systemctl reload httpd
Тем не менее, большинство Linux и Unix-подобных программ-демонов иногда используют SIGHUP в качестве сигнала для перезапуска самих себя, наиболее частая причина для этого – перечитать файл конфигурации, который был изменен.
Синтаксис выглядит следующим образом:
kill -HUP $(cat /var/run/SERVICE.pid)
или
kill -HUP `cat /var/run/SERVICE.pid`
Давайте посмотрим, как проверить синтаксис для различных служб Linux и Unix.
# 1: OpenSSH Server
Вы можете использовать следующий синтаксис для проверки файла конфигурации OpenSSH, введите:
# /usr/sbin/sshd -t && echo $?
Пример сеанса конфигурации конфигурации:
# usr/sbin/sshd -t
Примеры вывода:
/etc/ssh/sshd_config line 26: Bad yes/without-password/forced-commands-only/no argument: Naa
Чтобы вывести строку # 26, введите:
# sed -n '26p' /etc/ssh/sshd_config
Пример вывода
PermitRootLogin Naa
Используйте текстовый редактор, такой как vi, чтобы отредактировать файл, введите:
# vi +26 /etc/ssh/sshd_config
Наконец, обновите синтаксис, введите:
PermitRootLogin No
Сохраните и закройте файл. Повторите тест:
# /usr/sbin/sshd -t
Расширенный тестовый режим OpenSSH
Используйте параметр -T, чтобы проверить правильность файла конфигурации, вывести эффективную конфигурацию в stdout , а затем выйти:
# /usr/sbin/sshd -T
# 2: Веб-сервер Apache
Синтаксис следующий: для запуска синтаксических тестов только для файлов конфигурации:
# /usr/sbin/apache2 -t
Вывод:
apache2: Syntax error on line 50 of /etc/apache2/apache2.conf: ServerRoot must be a valid directory
На RHEL введите:
# /usr/sbin/httpd -t
Пример вывода
Syntax OK
Вы также можете использовать команду apachectl (передать опцию configtest или -t).
Он проведет синтаксический тест конфигурационного файла.
Он анализирует файлы конфигурации и отчеты Syntax Ok или подробную информацию о конкретной синтаксической ошибке:
# apachectl configtest
ИЛИ
# apachectl -t
Перезагрузите сервер Apache, введите:
# apachectl -k graceful
# 3: веб-сервер Nginx
Чтобы запустить синтаксические тесты для файлов конфигурации nginx, введите:
# /usr/local/nginx/sbin/nginx -t # /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
Пример вывода:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
# 4: Веб-сервер Lighttpd
Чтобы проверить конфигурационный файл и выйти, введите:
# /usr/local/sbin/lighttpd -t -f /usr/local/etc/lighttpd/cyberciti.biz/lighttpd.conf
Пример вывода
Syntax OK
# 5: DNS-сервер BIND (named)
Используйте команду named-checkconf для проверки синтаксиса, но не семантики.
Файл анализируется и проверяется на наличие синтаксических ошибок, а также все файлы, включенные в него
# named-checkconf /etc/named.conf
Вы также можете проверить файлы зоны привязки, введите:
# named-checkzone cyberciti.biz /var/named/zone.cyberciti.biz
# 6: Squid прокси сервер
Для анализа и тестирования файла конфигурации введите:
# /usr/sbin/squid -k check # /usr/sbin/squid -k parse
Пример вывода:
2012/03/30 07:44:35| Processing Configuration File: /etc/squid/squid.conf (depth 0) 2012/03/30 07:44:35| Initializing https proxy context
# 7: MySQL (mysqld) Сервер баз данных
Введите следующую команду:
# mysqld --verbose --help
Вышеизложенное приведет к слишком большому результату.
Я рекомендую перенаправить вывод на / dev / null и отображать только сообщение об ошибке / предупреждении на экране
# /usr/libexec/mysqld --verbose --help 1>/dev/null
Пример вывода:
120330 7:52:43 [Warning] '--log_slow_queries' is deprecated and will be removed in a future release. Please use ''--slow_query_log'/'--slow_query_log_file'' instead.
Вы можете указать новый файл конфигурации, такой как /root/test-my.cnf
# mysqld --defaults-file=/root/test-my.cnf --verbose --help 1>/dev/null
# 8: Почтовый сервер Postfix (MTA)
Используйте следующий синтаксис.
Чтобы предупредиться о неправильном доступе к папке / файлу или разрешениях и создать отсутствующие каталоги, введите:
# postfix check
или
# postfix -vvv
Пример вывода:
postfix: dict_register: mail_dict 1 postfix: dict_update: config_directory = /etc/postfix postfix: dict_update: queue_directory = /var/spool/postfix postfix: dict_update: command_directory = /usr/sbin postfix: dict_update: daemon_directory = /usr/libexec/postfix postfix: dict_update: data_directory = /var/lib/postfix postfix: dict_update: mail_owner = postfix postfix: dict_update: inet_interfaces = localhost postfix: dict_update: inet_protocols = all postfix: dict_update: mydestination = $myhostname, localhost.$mydomain, localhost postfix: dict_update: unknown_local_recipient_reject_code = 550 postfix: fatal: /etc/postfix/main.cf, line 385: missing '=' after attribute name: "sss"
Вы можете увидеть ошибки в файле журнала maillog, введите:
tail -f /var/log/maillog
Пример вывода:
And it'll run mysqld (or drizzled), parse tMar 30 08:01:34 mx421 postfix[2284]: dict_update: command_directory = /usr/sbin Mar 30 08:01:34 mx421 postfix[2284]: dict_update: daemon_directory = /usr/libexec/postfix Mar 30 08:01:34 mx421 postfix[2284]: dict_update: data_directory = /var/lib/postfix Mar 30 08:01:34 mx421 postfix[2284]: dict_update: mail_owner = postfix Mar 30 08:01:34 mx421 postfix[2284]: dict_update: inet_interfaces = localhost Mar 30 08:01:34 mx421 postfix[2284]: dict_update: inet_protocols = all Mar 30 08:01:34 mx421 postfix[2284]: dict_update: mydestination = $myhostname, localhost.$mydomain, localhost Mar 30 08:01:34 mx421 postfix[2284]: dict_update: unknown_local_recipient_reject_code = 550 Mar 30 08:01:34 mx421 postfix[2284]: fatal: /etc/postfix/main.cf, line 385: missing '=' after attribute name: "sss" Mar 30 08:01:42 mx421 postfix[2285]: fatal: /etc/postfix/main.cf, line 385: missing '=' after attribute name: "sss"he config, report any problems, print help, and exit without initializing storage engines or trying to
# 9: Файловый сервер Samba (SMB / CIFS)
Введите следующую команду:
# testparm -v
#10: tcpd
Программа tcpd может быть настроена для контроля входящих запросов для telnet, finger, ftp, exec, rsh, rlogin, tftp, talk, comsat и других служб, которые имеют взаимно однозначное сопоставление с исполняемыми файлами.
Команда tcpdchk проверяет вашу конфигурацию оболочки tcp и сообщает о всех потенциальных и реальных проблемах, которые она может найти:
# tcpdchk # tcpdchk -a # tcpdchk -d # tcpdchk -i /path/to/inetd.conf # tcpdchk -v
Где:
-a: Контролировать правила контроля доступа, которые разрешают доступ без явного ключевого слова ALLOW.
-d: Исследуйте файлы hosts.allow и hosts.deny в текущем каталоге вместо стандартных.
-i inet_conf: укажите этот параметр, если tcpdchk не может найти файл конфигурации сети inetd.conf или если вы подозреваете, что программа использует неправильную.
-v: отображать содержимое каждого правила управления доступом. Списки демона, списки клиентов, команды и параметры оболочки отображаются в довольно печатном формате; это облегчит вам выявление любых расхождений между тем, что вы хотите и что понимает программа.
# 11: Сервер dhcp
Консорциум Internet Systems DHCP Server, dhcpd, реализует протокол динамической конфигурации хоста (DHCP) и интернет-бутстрап-протокол (BOOTP).
DHCP позволяет хостам в сети TCP / IP запрашивать и назначать IP-адреса, а также обнаруживать информацию о сети, к которой они подключены. BOOTP обеспечивает аналогичную функциональность с определенными ограничениями.
Для проверки синтаксиса передайте следующий параметр:
# dhcpd -t
ИЛИ
# dhcpd -t -cf /path/to/dhcpd.testing.conf
ИЛИ
# dhcpd -T
ИЛИ
# dhcpd -T -lf /path/to/dhcpd.lease.file
# 12: vsftpd FTP-сервер
vsftpd – это очень безопасный демон протокола передачи файлов.
Используйте следующую команду, чтобы убедиться, что в конфигурационном файле нет синтаксических ошибок:
# vsftpd
или
# vsftpd -olisten=NO /path/to/vsftpd.testing.conf
Этот пример переопределяет встроенный по умолчанию параметр vsftpd для параметра «listen» как NO, но затем загружает настройки из /path/to/vsftpd.testing.conf.
#13: Nagios
Nagios – это популярный компьютерный мониторинг с открытым исходным кодом, программное обеспечение для мониторинга сети и мониторинга инфраструктуры.
Используйте следующий синтаксис для проверки проверки работоспособности nagios.cfg следующим образом:
# nagios -v /path/to/testing/nagios.cfg
Где,
-v: Проверьте конфигурацию.
Сводка команд проверки файлов на ошибки в Linux
Демон | Команды |
---|---|
OpenSSH | /usr/sbin/sshd -t && echo $? /usr/sbin/sshd -T |
Apache | /usr/sbin/apache2 -t apachectl configtest |
nginx | /usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf |
lighttpd | /usr/local/sbin/lighttpd -t -f /usr/local/etc/lighttpd/cyberciti.biz/lighttpd.conf |
Bind (named server config) | named-checkconf /etc/named.conf |
Bind (zone syntx) | named-checkzone cyberciti.biz /var/named/zone.cyberciti.biz |
Squid proxy | /usr/sbin/squid -k check /usr/sbin/squid -k parse |
MySQL server | mysqld –verbose –help /usr/libexec/mysqld –verbose –help 1>/dev/null |
Postfix MTA | postfix check postfix -vvv |
Samba SMB/CIFS | testparm -v |
tcpd | tcpdchk tcpdchk -v |
dhcpd (DHCP / BOOTP) server | dhcpd -t -cf /path/to/dhcpd.testing.conf |
vsftpd server | vsftpd -olisten=NO /path/to/vsftpd.testing.conf |
nagios | nagios -v /path/to/testing/nagios.cfg |
Openntpd NTPD server | ntpd -d -f /usr/local/etc/ntpd.conf -n |
Xorg (X11 Server) | Xorg -config /path/to/xorg.conf.new -retro |
syslogd / rsyslogd | rsyslogd -c4 -f /etc/rsyslog.testing.conf -N 1 |
CUPS Printing System | cupsd -f -c /path/to/cupsd.testing.conf -t |
slapd (OpenLDAP) | slapd -Tt |
varnishd | varnishd -C -f /path/to/wordpress.vlc |
exim MTA | exim -bV |
Bash/Ksh scripts | bash -n ./myscript ksh -n /path/to/script.ksh |
BSD pf firewall | pfctl -nf /etc/pf.conf |
proftpd | proftpd -t -c /path/to/proftpd.testing.conf |
Perl scripts | perl -c /path/to/script.pl perl -wc /path/to/script.pl |
Monit | monit -t |