Это установка CentOS 8 под управлением Postfix версии 3.3.1, и я испытываю поведение, которого раньше не видел, и я не знаю, как решить эту проблему.
Для обеспечения контекста у меня есть самодельная установка облегченного SMS-шлюза с использованием gammu и собственный сценарий, написанный на Python, который анализирует / обрабатывает входящие электронные письма, отправленные на определенный адрес, а затем вызывает gammu для отправки SMS-сообщения через прикрепленный USB-модем GSM.
Доступ к GSM-модему можно получить с помощью gammu в /dev/ttyUSB0
, и это подтверждено как полностью работоспособное, так как когда я запускаю gammu от имени root в командной строке, я могу отправлять SMS-сообщения на свой телефон. Это устройство также определено в /etc/gammurc
который является одним из файлов конфигурации, которые gammu ищет при запуске.
Для скрипта Python это вызывается через механизм канала псевдонима Postfix, определенный в /etc/aliases
, где у меня есть строка:
sms: "|sudo /usr/local/bin/sms"
У меня также есть файл sudoers, определенный в /etc/sudoers.d/sms
, следующим образом:
Cmnd_Alias SMS = /usr/local/bin/sms
Defaults!SMS !requiretty
nobody ALL=(ALL) NOPASSWD: SMS
Это позволяет Postfix вызывать скрипт python от имени пользователя root без обязательного пароля, а затем предоставлять содержимое электронной почты на стандартный ввод. Затем скрипт python имеет возможность вызывать gammu, который должен иметь доступ к /dev/ttyUSB0
где он затем может перейти к отправке SMS.
За исключением случаев, когда скрипт вызывается Postfix, /dev/ttyUSB0
не существует, и это проблема, которую я сейчас пытаюсь решить.
Эта же настройка отлично работала при установке CentOS 6 с Postfix версии 2.6.6, поэтому я могу только предположить, что безопасность была усилена либо в самой CentOS 8, либо в sudo и / или Postfix, либо в любой их комбинации. SELinux отключен, так как это доставляло мне много хлопот с другими пользовательскими настройками, которые у меня есть в этой системе.
Я пришел к выводу, что это не Postfix chroot
функция, насколько я могу судить (chroot, похоже, отключен в master.cf
), потому что если я добавлю дополнительный код в скрипт python, чтобы вывести вывод какой-нибудь простой системной команды, например ls -la / > /tmp/ls.txt
, Я вижу, что скрипт может видеть полную файловую систему коробки. Однако, если я вместо этого заставлю его сбросить ls /dev > /tmp/ls.txt
, где я ожидаю найти /dev/ttyUSB0
, производится:
total 4
drwxr-xr-x 6 root root 380 Mar 15 10:00 .
dr-xr-xr-x 21 root root 4096 Mar 14 20:08 ..
lrwxrwxrwx 1 root root 11 Mar 15 10:00 core -> /proc/kcore
lrwxrwxrwx 1 root root 13 Mar 15 10:00 fd -> /proc/self/fd
crw-rw-rw- 1 root root 1, 7 Mar 15 10:00 full
drwxr-xr-x 2 root root 0 Mar 15 10:00 hugepages
lrwxrwxrwx 1 root root 28 Mar 15 10:00 log -> /run/systemd/journal/dev-log
drwxrwxrwt 2 root root 40 Mar 15 10:00 mqueue
crw-rw-rw- 1 root root 1, 3 Mar 15 10:00 null
crw-rw-rw- 1 root root 5, 2 Mar 15 10:00 ptmx
drwxr-xr-x 2 root root 0 Mar 15 10:00 pts
crw-rw-rw- 1 root root 1, 8 Mar 15 10:00 random
drwxrwxrwt 2 root root 40 Mar 17 17:11 shm
lrwxrwxrwx 1 root root 15 Mar 15 10:00 stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Mar 15 10:00 stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Mar 15 10:00 stdout -> /proc/self/fd/1
crw-rw-rw- 1 root root 5, 0 Mar 15 10:00 tty
crw-rw-rw- 1 root root 1, 9 Mar 15 10:00 urandom
crw-rw-rw- 1 root root 1, 5 Mar 15 10:00 zero
и здесь я теперь вижу, что /dev/ttyUSB0
отсутствует, что приводит к сбою гамму.
Над /dev
список выглядит сильно отфильтрованным и экспортирует только минимум /dev
устройства для корректной работы большинства стандартных скриптов, но этого недостаточно - мне нужно /dev/ttyUSB0
присутствовать, иначе этот сценарий, который вызывает gammu, не может взаимодействовать с модемом GSM.
Я пробовал изменить разрешения для /dev/ttyUSB0
но нет никаких изменений в том, что скрипт может видеть, когда он вызывается Postfix.
Может кто-нибудь посоветовать, что вызывает это и как я могу это исправить? Это настройка, связанная с Postfix или какой-то новой функцией sudo, о которой я не знаю? Я считаю это действительно странным.