Назад | Перейти на главную страницу

Сокращенное подмножество устройств, доступных в / dev, когда Postfix вызывает конвейерный скрипт через sudo, определенный в файле / etc / aliases

Это установка 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, о которой я не знаю? Я считаю это действительно странным.