Bug 60646
| Summary: | Permission denied при печати по протоколу beh c dnssd/usb | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Sisyphus | Reporter: | Белая Алёна <belayaav> | ||||
| Component: | cups | Assignee: | Anton Farygin <rider> | ||||
| Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||
| Severity: | normal | ||||||
| Priority: | P5 | CC: | george, rider | ||||
| Version: | unstable | ||||||
| Hardware: | x86_64 | ||||||
| OS: | Linux | ||||||
| Attachments: |
|
||||||
Спасибо за подробный отчёт и логи — диагноз про права верный, теория подтверждается. Что происходит: 1. cupsd решает, от кого запускать бэкенд, по правам файла в /usr/lib/cups/backend/ (scheduler/job.c): если у файла нет бита o+x (0744, 0700) — бэкенд стартует от root, иначе — от непривилегированного пользователя lp. Поэтому usb и dnssd (0744) напрямую работают: cupsd запускает их от root. 2. beh из cups-filters установлен с правами 0755 (так же, как в upstream), поэтому cupsd запускает его от lp. beh — просто обёртка: он сам делает execv() бэкенда из вложенного URI. От lp он может выполнить ipp/ipps/socket (0755), но не usb/dnssd (0744) — отсюда "Unable to execute backend: Permission denied". Обратите внимание: сообщение выдаёт не cupsd, а beh, когда пытается запустить dnssd. 3. Так же поломано у Debian; Fedora обходит это, ставя beh 0744 (всегда root). Минус такого обхода — beh:/.../ipp:// тоже начинает работать от root, хотя сам ipp этого не требует. Планирую исправить в cupsd: для device URI вида beh:/... привилегии будут определяться по правам обёрнутого бэкенда, т.е. beh:/.../dnssd:// и beh:/.../usb:// получат root, как и прямые dnssd:// и usb://, а beh:/.../ipp:// останется от lp. "Unable to detect print-quality, using normal!" в статусе задания — это не ошибка, обычное предупреждение фильтра. |

Description
Белая Алёна 2026-09-21 15:00:28 MSK