Примеры того, как проверить файлы конфигурации Unix / Linux на наличие ошибок синтаксиса

by itisgood

В системах 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

 

 

 

 

You may also like

Leave a Comment