sandboxd для бэкэндов CUPS в Mac OS X Yosemite

4

Я использую пользовательский сервер CUPS для печати в Mac OS X. Сервер работает, перенаправляя данные печати на другой аппарат (используя ssh) и передавая данные на принтер оттуда. Чтобы это работало, бэкэнду (реализованному в виде сценария оболочки) необходим доступ к закрытому ключу ssh. Проблема: так как я обновился до Yosemite, скрипт больше не может получить доступ к файлу, содержащему ключ. Вместо этого я вижу следующее сообщение об ошибке на консоли:

sandboxd: [...] deny file-read-data /

а также

/usr/libexec/cups/backend/.mybackend-ssh/id_dsa: Permission denied

в файле журнала ошибок CUPS.

Как я могу вставить файл в песочницу, используемую для изоляции бэкэндов CUPS?

jochen
источник

Ответы:

4

Хотя это не отвечает на вопрос, я наткнулся на это - http://www.papercut.com/kb/Main/MacOS1010YosemiteKnownIssues - при попытке заставить Tea4CUPS работать в OS X 10.10 (я не смог этого добиться):

Для того, чтобы PaperCut работал с Mac OS 10.10, вам нужно отключить «песочницу». Отредактируйте файл /etc/cups/cups-files.conf, добавив в него новую строку «Sandboxing Relaxed». Затем перезапустите CUPS, чтобы это вступило в силу.

sudo sh -c 'echo "Sandboxing Relaxed" >> /etc/cups/cups-files.conf'
sudo launchctl stop org.cups.cupsd
chris1h1
источник
4

После долгого сеанса отладки я наконец-то решил эту проблему. В случае, если другие люди столкнутся с такими же трудностями, вот что я узнал о бэкэндах CUPS под Mac OS X Yosemite:

  • Backends - это исполняемые файлы (в моем случае это скрипт оболочки) в /usr/libexec/cups/backend/ каталог. Информация о задании на печать передается в эти программы через аргументы командной строки ( $1 = Работа-идентификатор, $2 = Пользователь, $3 = Название, $4 = копия, $5 = опция, $6 = файл) и переменные окружения ( например $DEVICE_URI ).

  • Бэкэнды выполняются как пользователь _lp, группа _lp, с разрешениями, дополнительно ограниченными sandboxd. Текущий каталог при запуске бэкэнда является корневым каталогом /, но бэкэнд не имеет разрешения на чтение этого каталога. Каталоги, которые можно прочитать, включают /usr/libexec/cups/backend/, /etc/ и их подкаталоги. Только очень ограниченный (или вообще нет?) Доступ к домашнему каталогу пользователя _lp/var/spool/cups ) разрешено.

  • Мой бэкэнд требует использования ssh. Чтобы это работало, ssh должен иметь доступ к закрытому ключу, необходимому для входа на удаленный сервер, и known_hosts файл, который идентифицирует удаленный сервер. Требуемый ключ может быть помещен в /usr/libexec/cups/backend/ или подкаталог, он должен быть доступен для чтения только пользователю _lp, Кажется, что ssh при запуске из бэкэнда CUPS не имеет доступа к /var/spool/cups/.ssh/даже если этот каталог существует; Таким образом known_hosts файл должен храниться в /etc/, как /etc/ssh_known_hosts, (Обратите внимание, что страница справочника ssh неправильно утверждает, что это должно быть /etc/ssh/ssh_known_hosts.)

    Редактировать: На MacOS X 10.11 (El Capitan) ssh теперь использует задокументированное местоположение /etc/ssh/ssh_known_hosts для известных файл hosts. Я должен был переместить мой файл в /etc/ssh/ сделать фильтр принтера работать после обновления ОС.

  • Чтобы отладить такие проблемы, используя cupsctl --debug-logging неоценимо: после выполнения этой команды все, что записано в stderr в бэкэнде CUPS, появляется в /var/log/cups/error_log, Регистрация может быть снова отключена с помощью cupsctl --no-debug-logging, Кроме того, всякий раз, когда sandboxd отказывает в попытке доступа к файлу, sandboxd[426] ([15998]): sh(15998) deny file-read-data / можно найти в /var/log/system.log,

jochen
источник
Но теперь у меня есть проблема, я хочу взаимодействовать с пользователем в конце процесса: открыть веб-страницу (открыть) example.com» ) и происходит сбой, когда system.log сообщает «open (8612) deny file-read-data /». Проблема может заключаться в том, что пользователю _lp не разрешено взаимодействовать с пользовательскими процессами. Я прав? Можно ли это как-то решить?
staromeste
@staromeste Понятия не имею, все, что я написал, я нашел экспериментально. Я искал документацию об использовании sandboxd с чашками, но ничего не нашел.
jochen