В настоящее время я настраиваю конвейер электронной почты для сценария PHP в каталоге, недоступном для других (для него установлено значение 750). Postfix запускает команду pipe под пользователем none, который, естественно, не сможет получить доступ к скрипту. Я немного не решаюсь добавлять разрешения на выполнение в эту папку, так как я не хочу, чтобы другие пользователи могли получить к ней доступ (даже если они не знают путь). Итак, что я действительно хочу, так это запустить команду pipe под другим пользователем, у которого есть доступ к этой папке.
На сервере, на котором я хочу это сделать, установлен Virtualmin. Я настроил все с помощью Virtualmin, включая псевдоним, который передается в скрипт PHP. На форуме Virtualmin есть несколько тем по этой проблеме, но пока нет другого решения, кроме как сделать папку исполняемой другими.
Итак, как я могу позволить команде pipe работать под другим пользователем, а не под никем?
Как задокументировано, pipe(8)
может выполняться от имени любого пользователя, которому вы это скажете, кроме root.
Это и только это будет выполняться как nobody
.
yourscript unix - - n - - pipe user=<uid> argv=<yourexecutable>
В user=
берет любого существующего пользователя unix и запускает экземпляр pipe (8) под этими учетными данными.
Это потому, что пользователь, в котором Postfix запускается по конвейеру, по умолчанию никто.
Эта строка меняет пользователя, от имени которого работает конвейер, и вы должны знать, что в документации Postfix это предупреждает об этом: НЕ УКАЗЫВАЙТЕ ПРИВИЛЕГИРОВАННОГО ПОЛЬЗОВАТЕЛЯ ИЛИ ВЛАДЕЛЬЦА POSTFIX
Просто помните о последствиях для безопасности отправки электронных писем через привилегированного пользователя на сервере.
Это было поднято на StackOverflow несколько дней назад, с немного другой формулировкой, но проблема та же, и решение то же:
https://stackoverflow.com/questions/28923771/virtualmin-feed-to-program-cant-open-file/28934181
Короче говоря, решение состоит в том, чтобы войти в Usermin как пользователь, от имени которого вы хотите подключиться, и создать канал там. Virtualmin делает настроить пользователей для запуска вещей от имени пользователя при передаче из Postfix, но не в контексте Virtualmin ... только когда вы создаете их в Usermin.
Вы также можете создать канал вручную в .procmailrc соответствующего пользователя.