Я изо всех сил пытался керберизовать определенные службы в нашем домене, одна из которых - CUPS. Настройка выглядит следующим образом: центральный сервер печати подключается к каждому отдельному принтеру в домене и совместно использует их, а каждый клиент подключается к определенным принтерам на этом сервере. Следовательно, и на сервере, и на всех клиентах используется диспетчер очереди CUPS. Аутентификация необходима на сервере печати по очевидным причинам - использование обычной аутентификации работает (с диалоговым окном имени пользователя и пароля, появляющимся на клиенте, пытающемся распечатать), но аутентификация с согласованием - нет.
Сервер печати имеет служебную ключевую вкладку с именем службы «хост», а клиенты и сервер имеют правильные записи DNS и обратного DNS для сервера печати и KDC. Получение билета для принципала работает на клиентов. Но когда я пытаюсь напечатать, появляется диалоговое окно с текстом «согласовать» с текстовым полем рядом с ним. Независимо от того, что набрано в диалоговом окне, оно продолжает отображаться.
Интересно, что использование client.conf для направления клиента непосредственно на диспетчер очереди печати сервера работает с аутентификацией Negotiate - получение билета службы работает, а аутентификация происходит без сучка и задоринки. Но это не идеально, потому что каждый клиент видит каждый принтер - разные комнаты хотят видеть принтеры для своих комнат.
Как должна работать аутентификация Negotiate? На данный момент я совершенно не знаю, куда идти. Сервер работает под управлением Ubuntu 12.04 LTS (полностью обновлен), а клиенты также используют Ubuntu 12.04 LTS (не полностью обновлен). И клиенты, и сервер используют CUPS 1.5.3. KDC - это сервер Samba4, на котором и сервер печати, и клиенты правильно настроены для Kerberos. Конфигурация клиента - это просто версия Ubuntu по умолчанию. Текущий сервер cupsd.conf выглядит следующим образом:
LogLevel warn
MaxLogSize 0
SystemGroup lpadmin
# Allow remote access
Port 631
HostNameLookups on
Listen /var/run/cups/cups.sock
Browsing On
BrowseOrder allow,deny
BrowseAllow all
BrowseLocalProtocols CUPS dnssd
BrowseAddress @LOCAL
DefaultAuthType Negotiate
DefaultPolicy authenticated
WebInterface Yes
<Location />
# Allow remote access...
Order allow,deny
Allow all
</Location>
<Location /admin>
</Location>
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
</Location>
<Policy default>
JobPrivateAccess default
JobPrivateValues default
SubscriptionPrivateAccess default
SubscriptionPrivateValues default
<Limit Create-Job Print-Job Print-URI Validate-Job>
AuthType Default
Require valid-user
Order allow,deny
Allow from 172.30.*.*
</Limit>
<Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job CUPS-Get-Document>
Require user @OWNER @SYSTEM
Order deny,allow
</Limit>
<Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default CUPS-Get-Devices>
AuthType Default
Require user @SYSTEM
Order deny,allow
</Limit>
<Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel-Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>
AuthType Default
Require user @SYSTEM
Order deny,allow
</Limit>
<Limit Cancel-Job CUPS-Authenticate-Job>
Require user @OWNER @SYSTEM
Order deny,allow
</Limit>
<Limit All>
Order deny,allow
</Limit>
</Policy>
<Policy authenticated>
JobPrivateAccess default
JobPrivateValues default
SubscriptionPrivateAccess default
SubscriptionPrivateValues default
<Limit Create-Job Print-Job Print-URI Validate-Job>
AuthType Default
Order deny,allow
</Limit>
<Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job CUPS-Get-Document>
AuthType Default
Require user @OWNER @SYSTEM
Order deny,allow
</Limit>
<Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>
AuthType Default
Require user @SYSTEM
Order deny,allow
</Limit>
<Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel-Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>
AuthType Default
Require user @SYSTEM
Order deny,allow
</Limit>
<Limit Cancel-Job CUPS-Authenticate-Job>
AuthType Default
Require user @OWNER @SYSTEM
Order deny,allow
</Limit>
<Limit All>
Order deny,allow
</Limit>
</Policy>