Configurando um servidor de impressão CUPS do zero, com e sem autorização de domínio em uma rede com diferentes sistemas operacionais
Entrada
Então Presumivelmente, o serviço de impressão CUPS é uma solução poderosa que permite organizar o gerenciamento centralizado de impressoras na empresa. Assim é, mas durante o processo de configuração, você precisará gastar algum tempo procurando uma solução para muitos pequenos problemas não óbvios do Google, especialmente se sua necessidade for além dos manuais de configuração padrão.
O artigo descreverá a instalação do servidor de impressão CUPS no Ubuntu Server em uma rede com um domínio ativo do Active Directory, embora sua presença seja completamente opcional e você possa pular com segurança as instruções para configurar a interação com ele, configurá-lo e configurar máquinas clientes Linux e Windows para interagir com este servidor de impressão.
Nas instruções, o domínio será nomeado example.com , o próprio servidor de impressão será cupsserver ( cupsserver.example.com ) com um endereço IP 10.10.100.50 e as máquinas cliente linux1 , linux2 , linux3 etc. para as máquinas cliente Linux e Windows1 , Windows2 , Windows3 e etc. para máquinas clientes Windows, respectivamente.
Configurando um servidor de impressão
Antes de tudo, configuraremos o servidor de impressão, ou melhor, configuraremos o acesso administrativo, depois configuramos a impressão e descreveremos a configuração das máquinas clientes.
Vamos ao servidor de impressão de qualquer maneira conveniente e atualizamos os pacotes:
root@cupsserver:~# apt update && apt uprgrade -y
Em seguida, verifique se o CUPS está instalado no servidor:
root@cupsserver:~# which cupsd
Se a saída for algo parecido com isto:
/usr/bin/cupsd
o CUPS está instalado; se não houver saída, instale o CUPS:
root@cupsserver:~# apt install cups -y
Agora configure o acesso administrativo à interface da web do CUPS. Todos os arquivos de configuração estão localizados no caminho / etc / cups / . Para começar, apenas no caso, faremos backup dos principais arquivos de configuração do CUPS:
root@cupsserver:~# cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.original root@cupsserver:~# cp /etc/cups/cups-files.conf /etc/cups/cups-files.conf.original root@cupsserver:~# cp /etc/cups/cups-browsed.conf /etc/cups/cups-browsed.conf.original
No entanto, se você não fez isso - não importa, por padrão, os arquivos de dados de amostra estão localizados no caminho / usr / share / cups . Também vale ressaltar que você pode verificar qualquer opção adicionada nos arquivos de configuração do CUPS usando o comando:
root@cupsserver:~# cupsd -t
Se você estragou alguma coisa, selou ou usou uma opção que não é mais suportada pelo CUPS, a saída do comando refletirá esses erros.
Mas, finalmente, vamos começar a configurar. Após qualquer alteração nos arquivos na pasta / etc / cups / , você precisa reiniciar o serviço CUPS para obter o efeito:
root@cupsserver:~# service cups restart root@cupsserver:~# systemctl restart cups root@cupsserver:~# /etc/init.d/cups restart
E se você editou o arquivo /etc/cups/cups-browsed.conf , um serviço separado de navegação por copa é responsável por ele, que também precisa ser reiniciado:
root@cupsserver:~# service cups-browsed restart root@cupsserver:~# systemctl restart cups-browsed root@cupsserver:~# /etc/init.d/cups-browsed restart
Execute o comando
root@cupsserver:~# nano /etc/cups/cupsd.conf
A primeira opção não comentada é
LogLevel warn
Determina o conteúdo mínimo de informações dos logs do CUPS. Os arquivos de log do CUPS estão localizados em / var / log / cups / . No momento da instalação, configuração e depuração do servidor de impressão, seria aconselhável colocar o log no modo de depuração. Para fazer isso, altere warn para debug2:
LogLevel debug2
Por padrão, o CUPS escuta as conexões de entrada apenas do host local , ou seja, na interface de loopback. Para garantir isso, você pode executar o comando
root@cupsserver:~# netstat -plutn
Uma das linhas será mais ou menos assim:
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 737/cupsd
Outras ações dependem do grau de sua paranóia. Você pode adicionar no bloco, que começa condicionalmente com o comentário #Apenas para conexões da máquina local, várias linhas com os endereços IP ou sub-redes, de onde o CUPS poderá ouvir as conexões.
# Only listen for connections from the local machine. Listen localhost:631 Listen /run/cups/cups.sock # IP Listen 10.10.100.67:631 # Listen 172.16.0.0:631
Ou você pode permitir que o CUPS ouça conexões de todos os endereços
# Only listen for connections from the local machine. Listen /run/cups/cups.sock Port 631
O próximo ponto de configuração é a descoberta de impressoras de rede e compartilhadas.
# Show shared printers on the local network. Browsing Off BrowseLocalProtocols dnssd
Na minha opinião, essa opção deve permanecer desativada, pois determina se as informações de difusão serão enviadas pela rede sobre impressoras conectadas ao servidor de impressão. Mas todos eles estarão conectados a ele. E, portanto, todas as máquinas clientes exibirão imediatamente todas as impressoras. Nosso servidor de impressão deve procurar e detectar todas as impressoras na rede, mas não enviá-las sem pensar pela rede.
A seguir estão as configurações de autenticação:
# Default authentication type, when authentication is required... DefaultAuthType Basic
Define os direitos de acesso à interface da web do CUPS, bem como à sua parte administrativa. Para que o usuário usuário tenha o direito de administrar o CUPS, ele deve ser adicionado ao grupo de sistemas lpadmin :
root@cupsserver:~# usermod -a -G lpadmin user
Em geral, os grupos aos quais é permitido acesso administrativo ao CUPS são definidos no arquivo de configuração cups-files.conf no bloco
# Administrator user group, used to match @SYSTEM in cupsd.conf policy rules... # This cannot contain the Group value for security reasons... SystemGroup lpadmin
Se você deseja adicionar direitos para administrar um servidor de impressão, por exemplo printadmins , a um determinado grupo de usuários do Linux, adicione-os com um espaço para lpadmin . Se o grupo for de domínio, será um pouco mais complicado e será descrito mais adiante.
Agora vamos para o bloco <Location /> :
# Restrict access to the server... <Location /> Order allow,deny </Location>
Ordem permitir, negar significa que conexões de todos os lugares são proibidas, a menos que a permissão seja especificamente indicada. Ou seja, você precisa adicionar endereços IP, sub-redes, hosts ou hosts por máscara ( .example.com ) no formato " Permitir do [endereço permitido] *":
# Restrict access to the server... <Location /> Order allow,deny Allow from cupsserver # Allow from cupsserver.example.com # FQDN Allow from localhost # loopback Allow from 10.10.100.* # Allow from linux4.example.com # Allow from 172.168.5.125 # , IP </Location>
Para total confiança e depuração, você pode deixar, até configurar tudo o resto, um design que permita a impressão de qualquer lugar:
# Restrict access to the server... <Location /> Order allow,deny Allow from all </Location>
Vamos configurar o acesso administrativo ao CUPS no servidor de impressão. Decida a quais IPs e / ou sub-redes você irá se conectar no CUPS e adicione-os por analogia com o bloco <Location /> :
# Restrict access to the admin pages... <Location /admin> Order allow,deny Allow from localhost Allow from 10.10.100.* Allow from admin.example.com </Location> # Restrict access to configuration files... <Location /admin/conf> Order allow,deny Allow from localhost Allow from 10.10.100.* Allow from admin.example.com </Location> # Restrict access to log files... <Location /admin/log> Order allow,deny Allow from localhost Allow from 10.10.100.* Allow from admin.example.com </Location>
Opcionalmente, você pode adicionar o idioma da interface padrão. A lista de idiomas disponíveis pode ser visualizada usando o comando:
root@cupsserver:~# ls /usr/share/cups/locale
Se a localização que você precisa, por exemplo ru , for, adicione uma linha em /etc/cups/cupsd.conf :
DefaultLanguage ru
Para que seu servidor de impressão cupsserver.example.com seja acessado por seu host (nome do host), você precisa criar um arquivo client.conf na pasta / etc / cups / com o seguinte conteúdo:
ServerName _
Da maneira mais simples, isso pode ser feito assim:
root@cupsserver:/etc/cups# echo "ServerName $(cat /etc/hostname)" > /etc/cups/client.conf
Como assumimos que existe um servidor DNS na rede, é preferível que você possa acessar o servidor de impressão pelo seu nome de domínio ( cupsserver.example.com ). O servidor também pode receber um alias CNAME no servidor DNS, como impressão ou copinhos . Para que o servidor de impressão aceite conexões nessas chamadas, você deve adicionar a seguinte linha ao arquivo /etc/cups/cupsd.conf :
ServerAlias cupsserver.example.com print cups
Se você deseja que o servidor de impressão aceite chamadas ou não se preocupe, adicione isso:
ServerAlias *
Você também precisa procurar dentro do arquivo /etc/cups/cups-browsed.conf . Este arquivo controla como o servidor de impressão procura impressoras na rede e transmite suas impressoras. Sugiro desativar completamente a opção de boletim informativo. O servidor de impressão procurará a impressora na rede, mas a partir dela as impressoras para as máquinas clientes serão conectadas manualmente. Abaixo será descrito o porquê. Enquanto isso, encontramos a linha BrowseRemoteProtocols dnssd cups :
# Which protocols will we use to discover printers on the network? # Can use DNSSD and/or CUPS and/or LDAP, or 'none' for neither. BrowseRemoteProtocols dnssd cups
Graças a esta opção, o servidor de impressão procura impressoras compartilhadas na rede. Deixamos a impressora ligada, pois é do nosso interesse que o servidor de impressão pesquise a impressora na rede. Mas não precisamos absolutamente do servidor de impressão para enviar todas as impressoras conectadas a ele, caso contrário, haverá muita confusão. Para evitar esse cenário, encontre a seguinte opção #BrowseLocalProtocols none e descomente-a:
# Which protocols will we use to broadcast shared local printers to the network? # Can use DNSSD and/or CUPS, or 'none' for neither. # Only CUPS is actually supported, as DNSSD is done by CUPS itself (we ignore DNSSD in this directive). BrowseLocalProtocols none
Nisso, suspendemos a configuração do servidor de impressão e prosseguimos para a configuração dos computadores clientes Windows e Linux. Os requisitos para eles são os seguintes: permitir o envio de trabalhos de impressão ao servidor de impressão e enviar trabalhos de impressão para (e somente) o servidor de impressão, se for necessário imprimir em uma impressora de rede.
Como exemplo, configuraremos a impressão através de um servidor de impressão entre duas máquinas clientes com Linux (nome do host linux1 ) e Windows 8, respectivamente (nome do host windows1 ). Vamos começar configurando o windows1 como um receptor de impressão de um servidor de impressão. Eu tenho uma impressora Canon i-SENSYS MF4410 conectada e funcionando normalmente. O nome da impressora é Canon-MF4400. De fato, a maneira mais fácil de garantir a impressão de um servidor de impressão no windows1 é ir ao Painel de Controle> Programas> Programas e Recursos> Ativar ou desativar os Recursos do Windows . Lá, ativamos o componente Serviços de impressão e documentos> Serviço de impressão LPD . Isso permitirá que você conecte esta impressora ao servidor de impressão usando o endereço lpd: // windows1 / Canon-MF4400 . Claro, a questão está amadurecendo, por que não conectar usando SMB? Ninguém proíbe. Se você depurou esse método, pode compartilhar a impressora dessa maneira e conectá-la ao servidor de impressão usando o protocolo SMB. As instruções para essa conexão, na minha opinião, estão além do escopo deste artigo, que já é bastante volumoso. Enquanto isso, acreditamos que o leitor foi com êxito para o endereço http://cupsserver:631/admin
clicou no botão "Adicionar uma nova impressora" e, seguindo a intuição, a lógica e os manuais lidos anteriormente, ele conectou a impressora com windows1 por meio do protocolo LPD ao cupsserver [exemplo. com] e a página da impressora está disponível em http://cupsserver:631/printers/Canon-MF4400
.
Agora, realizamos uma operação semelhante na máquina cliente Linux com o nome do host linux1 . Em geral, essa parte será muito maior, pois a máquina cliente possui seu próprio serviço CUPS e também precisa ser configurada da mesma maneira que um servidor de impressão, exceto por seu papel subordinado na organização da impressão.
Correção do erro ao acessar o CUPS via loopback pelo nome do host
Há um momento desagradável. Se você digitar linux1 em um domínio, configure o CUPS de acordo com estas instruções, poderá notar uma situação absurda quando acessar a interface WEB linux1 de fora, mas não poderá fazer isso no próprio host! E aplicativos gráficos para impressoras de configuração local, como o aplicativo system-config-printer no Linux Mint, se recusam a trabalhar. Se você tentar se conectar ao seu próprio CUPS no endereço http://linux1:631/
haverá uma mensagem "Proibido" ou "Solicitação incorreta". Esse é um problema conhecido e não realmente resolvido em muitos fóruns da Internet.
Na maioria das instruções sobre a introdução do Linux em um domínio, um dos pontos é fazer com que o arquivo / etc / hosts seja algo como isto:
127.0.0.1 localhost 127.0.1.1 linux1.example.com linux1 # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe02::2 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Por alguma razão, o CUPS não pode associar chamadas através do 127.0.1.1, ou seja, através da interface Loopback, com o nome do host.
Este erro foi corrigido de duas maneiras. Se seus endereços IP de rede forem estáticos, no arquivo / etc / hosts, corrija 127.0.1.1 para o endereço IP da interface de rede externa da máquina cliente, por exemplo:
127.0.0.1 localhost 192.168.1.50 linux1.example.com linux1
Ou, como você insere o Linux no domínio, ele pressupõe que o DHCP e o servidor DNS do Active Directory estejam em execução na sua rede. Nesse caso, basta comentar esta linha:
127.0.0.1 localhost # 127.0.1.1 linux1.example.com linux1
Diferenças no desempenho ou problemas dessa ação ainda não foram detectadas.
Definindo endereços de escuta de conexão CUPS em máquinas cliente Linux
Vamos ao linux1 de qualquer maneira conveniente. Editando o arquivo /etc/cups/cupsd.conf :
user@linux1:~$ sudo nano /etc/cups/cupsd.conf
Encontramos, adicionamos ou modificamos linhas:
DefaultLanguage ru # /usr/share/cups/locale ServerAlias linux1.example.com linux1 [CNAME DNS ] ServerAlias * # Listen /run/cups/cups.sock Listen localhost:631 # localhost Listen 10.10.100.50:631 # IP . Listen cupsserver:631 # . IP , Listen linux1:631 # Port 631 # Listen /run/cups/cups.sock Browsing off # . DefaultAuthType Basic # . Kerberos,
Definindo endereços de escuta da conexão CUPS
No bloco anterior, configuramos a capacidade de conectar-se ao CUPS. Agora, vamos definir as permissões para impressão, bem como as páginas administrativas do serviço CUPS no host linux1 . Reabrimos, se fechado, o arquivo /etc/cups/cupsd.conf e continuamos editando os blocos <Localização /> , <Localização / admin> , <Localização / admin / conf> , <Localização / admin / log> :
# Restrict access to the server... <Location /> Order allow,deny # " , " Allow from localhost # linux1 Allow from linux1 # . Allow from cupsserver # CUPS DNS, . , Allow from cupsserver.example.com # FQDN Allow from 10.10.100.50 # IP **cupsserver** </Location> # Restrict access to the admin pages... <Location /admin> Order allow,deny # Allow from localhost # Allow from linux1 # Allow from 10.10.101.71 # , IP Allow from 10.20.50.* # , IT AuthType Default # CUPS . Require user @SYSTEM # CUPS </Location> # Restrict access to configuration files... <Location /admin/conf> # Order allow,deny # Allow from localhost # Allow from linux1 # Allow from 10.10.101.71 # , IP Allow from 10.20.50.* # , IT AuthType Default # CUPS . Require user @SYSTEM # CUPS </Location> # Restrict access to log files... <Location /admin/log> # Order allow,deny # Allow from localhost # Allow from linux1 # Allow from 10.10.101.71 # , IP Allow from 10.20.50.* # , IT AuthType Default # CUPS . Require user @SYSTEM # CUPS </Location>
Configurando a distribuição e transmissão de impressoras de rede
Mesmo em uma máquina cliente Linux, neste caso, linux1 , você precisa editar o arquivo /etc/cups/cups-browsed.conf :
user@linux1:~$ sudo nano /etc/cups/cups-browsed.conf BrowseRemoteProtocols none # none . BrowseLocalProtocols cups # . DNSSD , cupsd.conf BrowseOrder Allow,Deny # Order cupsd.conf - , BrowseAllow 10.10.100.50 # IP BrowseAllow cupsserver # BrowseAllow cupsserver.example.com #
Configurar acesso administrativo
Mais algumas palavras sobre o acesso administrativo, tanto na interface do CUPS WEB em um servidor de impressão quanto em qualquer máquina cliente Linux. Mesmo se você tiver de 30 a 50 computadores, precisará unificar a autorização no CUPS e não tenha em mente ou onde quer que as senhas de cada máquina. E isso é importante em todas as máquinas Linux, porque para adicionar uma impressora ao servidor, você deve primeiro instalá-la localmente. Eu vejo várias maneiras.
O primeiro é criar um usuário printeradmin em cada sistema Linux (por exemplo) e adicionar lpadmin ao grupo:
user@linux1:~$ sudo usermod -a -G lpamin printeradmin
e efetue login em http://_:631/admin
usando suas credenciais.
A segunda opção é quase idêntica e sugere a criação de um grupo no sistema, por exemplo, printersadmins , adicionando o administrador do CUPS necessário ( printeradmin , user ) lá:
user@linux1:~$ sudo groupadd printersadmins user@linux1:~$ sudo usermod -a -G printersadmins printeradmin user@linux1:~$ sudo usermod -a -G printersadmins user
Então você precisa encontrar a linha no arquivo /etc/cups/cups-files.conf
# Administrator user group, used to match @SYSTEM in cupsd.conf policy rules... # This cannot contain the Group value for security reasons... SystemGroup lpadmin
e adicione um ou mais grupos de usuários com o direito de administrar o CUPS por um espaço.
# Administrator user group, used to match @SYSTEM in cupsd.conf policy rules... # This cannot contain the Group value for security reasons... SystemGroup lpadmin printersadmins somegroup
E, finalmente, a terceira opção. Torne os administradores do servidor de impressão e do CUPS das máquinas clientes um grupo de usuários. Para fazer isso, o servidor de impressão e as máquinas clientes Linux devem ser ingressadas no domínio do AD. Existem vários métodos para conectar o Linux ao domínio do Windows, mas, até onde eu sei, os principais são os de conexão usando o winbind e o SSSD (realmd). Uma descrição desses métodos não está incluída no artigo, portanto, focarei apenas nos pontos relacionados especificamente ao CUPS.
Configurando o uso de grupos de usuários do domínio para administração do CUPS
Cada método para ingressar em um sistema de autorização central no Linux cria um arquivo "pipe" especial através do qual os aplicativos podem ver a lista de usuários do domínio. Para que o CUPS possa fazer isso, é necessário permitir que ele use pipe no AppArmor para autenticar usuários. O AppArmor é um módulo de controle de acesso de segurança do Linux. Limita certos programas ao conjunto de arquivos listados em suas políticas. Para adicionar ao CUPS o direito de usar usuários e grupos de domínio por meio do winbindd, adicione a seguinte linha ao arquivo /etc/apparmod.d/local/usr.sbin.cupsd :
/var/lib/samba/winbindd_privileged/pipe rw
Se o Linux for inserido no domínio por meio do SSSD, você deverá especificar a localização do seu pipe em /etc/apparmod.d/local/usr.sbin.cupsd , adicionando a linha:
/var/lib/sss/pipes/private/pam rw
Além disso, no caso do SSSD, isso permite a autenticação (para descobrir quem está efetuando login), mas para se autenticar (descobrir se o usuário tem o direito de gerenciar o CUPS), você também deve adicionar a linha ao arquivo de configuração do SSSD /etc/sssd/sssd.conf :
ad_gpo_map_interactive = +cups
Isso, condicionalmente, dá ao CUPS o direito de "olhar" para o SSSD.
Além disso, devido ao fato de o CUPS agora depender do serviço SSSD, você precisa informar ao CUPS que ele deve iniciar após o SSSD; caso contrário, ele cairá quando estiver ligado e precisará ser ativado manualmente a cada vez.
Adicione instruções do CUPS para inicializar após o SSSD. Edite o arquivo de serviço cups.service no caminho / lib / systemd / system / , adicionando a instrução After à seção [Unit] :
[Unit] Description=CUPS Scheduler Documentation=man:cupsd(8) After=sssd.service
Assim, o CUPS é configurado para autorização básica por meio de um domínio, ou seja, autorização digitando o login e a senha de um usuário do domínio com privilégio de administração do CUPS.
A autorização pode ser configurada de outra maneira, mas o princípio (arquivo de pipe) é geralmente universal e existe a chance de configurá-lo para LDAP, FreeIPA e outros serviços de diretório por analogia.
Instalando uma impressora no Linux
A instalação de uma impressora no Linux geralmente é uma tarefa específica, diferente para diferentes marcas e até modelos. Portanto, não vejo razão para descrever a instalação da impressora e suponho que o host linux1 tenha uma impressora Kyocera-1024FP com o nome Kyocera-1024FP instalado e a página da impressora esteja disponível em http://linux1:631/printers/Kyocera-1024FP
.
Agora que o servidor Linux e as máquinas clientes estão configuradas, as impressoras estão conectadas a algumas delas, e também existem máquinas Windows com as quais imprimir, e todo esse sistema deve ser estável, mesmo que seja necessário substituir a impressora em um dos computadores. , isso não implica a reconfiguração de uma boa metade de todos os PCs, se não todos. Além disso, você precisa do menor número possível de problemas com os drivers. E é bem possível.
Grupos de impressoras (classes)
Canon-MF4400 c windows1 LPD. http://cupsserver:631/printers/Canon-MF4400
. cupsserver http://cupsserver:631/admin
. " " [Add Class]. . "", "", "", . . Canon-MF4400 , "" , printer-windows1 , "" "" , " ".
printer-windows1 Canon-MF4400 . Canon-MF4400 — http://cupsserver:631/classes/printer-windows1
.
linux1 Kyocera-1024FP. HTTP. " (http)" [Internet Printing Protocol (http)], "Generic", "IPP Everywhere". , linux1 — Kyocera-1024FP . http://cupsserver:631/printers/Kyocera-1024FP
. printer-windows1 printer-linux1 c Kyocera-1024FP . http://cupsserver:631/classes/printer-linux1
.
Kyocera-1024FP linux1 cupsserver windows1 Windows 8 (!) . " ". http://_c:631/classes/_
. — http://cupsserver:631/classes/printer-linux1
. "Generic", — "MS Publisher Imagesetter". , printer-linux1 http://cupsserver:631
. , Kyocera-1024FP.
Canon-MF4400 windows1 cupsserver linux1 Linux (!) . , Kyocera-1024FP cupsserver . linux1 " (http)", ( Canon-MF4400 ) — http://cupsserver:631/classes/printer-windows1
. "Generic", — "IPP Everywhere". , — printer-windows1 . linux1 http://linux1:631/printers/printer-windows1
, .
, , , , , . — , , , , . , . "IPP Everywhere" "MS Publisher Imagesetter" , .., .
Conclusão
, - , . , , , , .