Aprenda Linux, 302 (Ambientes Mistos): Gerenciando contas de usuários e grupos

Planejando o gerenciamento de contas de usuários e grupos

Se você gerencia contas de usuários e grupos, pode descobrir que essas contas nem sempre funcionam tranquilamente para usuários em ambientes mistos —uma fonte comum de frustração tanto para usuários quanto para administradores de sistemas. Felizmente, o conjunto Samba fornece ferramentas para ajudá-lo a gerenciar o processo. Neste artigo, saiba como gerenciar contas de usuários e grupos no seu ambiente misto.

Tracy Bost, Consultant and Trainer, Freelance

Author photo - Tracy BostTracy Bost é desenvolvedor de software e engenheiro de sistemas experiente. Ele também é palestrante e instrutor do sistema operacional Linux. Tracy é certificado como Red Hat Certified Engineer (RHCE) e Microsoft Certified Systems Engineer (MCSE), além de ser membro ativo da Linux Foundation. Ele trabalhou em vários segmentos de mercado, incluindo hipotecas, imóveis e o setor sem fins lucrativos.



03/Nov/2011

Sobre esta série

Esta série de artigos ajuda você a saber mais sobre as tarefas de administração de sistemas Linux. Também é possível usar o material desses artigos para se preparar para os exames de certificação do Linux Professional Institute nível 3 (LPIC-3).

Consulte o developerWorks roadmap for LPIC-3 para ver uma descrição de cada artigo da série e um link para cada um desses artigos. O roteiro está em andamento e reflete os objetivos atuais (março de 2011) em relação aos exames LPIC-3. À medida que cada artigo é concluído, ele é incluído no roteiro.

Neste artigo, saiba mais sobre estes conceitos:

  • Contas UNIX
  • Gerenciamento de contas Samba
  • Mapeamento de contas
  • Exigência de permissões de contas para arquivos e diretórios

Este artigo é útil para você se preparar para o Objetivo 313.1 no Tópico 313 do exame de especialidade de Ambiente Misto do Linux Professional Institute (LPI) (302). O objetivo tem peso 4.

Pré-requisitos

Para aproveitar ao máximo os artigos desta série, é necessário ter um conhecimento avançado de Linux e um sistema Linux funcional, no qual seja possível praticar os comandos mencionados neste artigo. Em particular, este artigo pressupõe que você tenha um conhecimento de trabalho das funções de linha de comando do Linux e pelo menos um entendimento geral do objetivo do Samba, conforme explicado em "Aprenda Linux, 302 (Ambientes Mistos): Conceitos." Para executar as ações descritas neste artigo, é necessário ter o software Samba instalado. Além disso, é preciso ter acesso à rede de um cliente Windows.


Entendendo contas de usuários e grupos do UNIX

Sobre o exame elegível LPI-302

O Linux Professional Institute Certification (LPIC) é como muitas outras certificações, pois também oferece certificações em níveis diferentes, e cada nível requer mais conhecimento e experiência que o anterior. O exame LPI-302 é um exame elegível especial no terceiro nível da hierarquia do LPIC, e requer um nível avançado de conhecimento de administração de sistemas Linux.

Para obter a certificação LPIC nível 3 (LPIC-3), é necessário passar nos dois primeiros exames do primeiro nível (101 e 102), nos dois exames do segundo nível (201 e 202) e no exame principal do LPIC-3 (301). Depois de alcançar esse nível, é possível fazer os exames elegíveis especializados, como o LPI-302.

Seu servidor Samba provavelmente não existe em um silo. Os usuários precisam acessar arquivos e diretórios, mas antes de fazerem isso, é preciso autenticar. Os usuários podem conectar-se a partir de estações de trabalho Linux ou um desktop Windows. De qualquer maneira, precisam de contas que o servidor Samba reconheça.

Quando os usuários são autenticados, precisam de permissões adequadas para serviços de arquivos, diretórios e impressão. Grupos são um recurso do Samba que pode ajudá-lo a gerenciar melhor essas permissões.

O banco de dados de backend sam é seu mediador das contas UNIX locais para as contas de usuários remotas. Há vários métodos para permitir aos usuários autenticar o servidor Samba, mas antes de se aprofundar nas contas do Samba, é necessário ter um sólido entendimento dos fundamentos do gerenciamento de contas de usuários e grupos do UNIX.

Contas de usuários

Quando você cria uma conta de usuário local em um computador Linux com uma ferramenta como useradd, as informações da conta são gravadas no arquivo /etc/passwd. Esse arquivo armazena diversas informações do usuário, como o nome de usuário, o diretório inicial, o shell padrão e todos os comentários associados a conta. Essas contas costumam ser referidas como contas locais do UNIX. Este artigo usa os termos conta UNIX e conta local de forma intercambiável.

A Listagem 1 cria uma conta local com o nome de usuário monty, fornece uma descrição de Monty Python na seção de comentários (-c), especifica um diretório inicial (-m) e fornece ao usuário um shell padrão de /bin/bash (-s).

Listagem 1. Criando uma conta local
[tbost@samba ~]$ sudo useradd -c'Monty Python' -m -s /bin/bash monty
[tbost@samba ~]$ less /etc/passwd | grep monty
monty:x:504:504:Monty Python:/home/monty:/bin/bash
[tbost@samba ~]$

Cada linha em /etc/passwd representa um registro de conta de usuário. Cada registro tem sete campos separados por um delimitador: uma vírgula (:). O nome de usuário no primeiro campo, o ID do usuário (UID) no terceiro campo, e o ID do grupo (GID) no quarto campo são uma preocupação em particular ao gerenciar contas Samba.

Contas de grupos

Contas de grupos realizam uma função vital para facilitar o peso do gerenciamento para qualquer computador multiusuário. Se você estiver gerenciando um servidor Samba, permitir que grupos destinados acessem diretórios, arquivos e serviços de impressão específicos é parte de uma configuração típica.

Como em contas de usuário, se você estiver trabalhando com uma configuração de conta Samba local, é preciso criar contas de grupo UNIX no servidor Samba local na maioria das configurações Samba. É possível localizar as informações da conta de grupo UNIX no arquivo /etc/group. Algumas distribuições do Linux criam um grupo privado local para cada novo usuário. Esse é o caso aqui, com a adição do usuário monty:

[tbost@samba ~]$ less /etc/group | grep monty
monty:x:504:
[tbost@samba ~]$

Esse código exibe a conta de grupo privado criada para o usuário monty. Se você estiver trabalhando em um ambiente misto com computadores Windows, tenha em mente que o Windows não permite que uma conta de usuário e uma conta de grupo tenham nomes idênticos.

De maneira muito semelhante a contas de usuários, deve haver contas de grupo no servidor UNIX local antes de o Samba poder usá-las. Crie um grupo usando um utilitário como groupadd (consulte a Listagem 2) ou edite o arquivo /etc/group diretamente com um editor como vim.

Listagem 2. Criando uma conta de grupo e adicionando um usuário a ela
[tbost@samba ~]$ sudo groupadd accounting
[tbost@samba ~]$ sudo usermod -G accounting monty
[tbost@samba ~]$ less /etc/group | grep accounting
accounting:x:506:monty
[tbost@samba ~]$

A Listagem 2 usa as ferramentas /sbin/groupadd e /sbin/usermod para criar o grupo e adicionar um usuário a ele. Caso você tenha diversos usuários para adicionar a um grupo, é possível criar um script para realizar a tarefa ou adicionar os usuários ao arquivo /etc/group diretamente. Os membros do grupo devem estar no último campo delimitado e ser separados por uma vírgula (,). Se os grupos forem criados manualmente, tenha em mente que cada grupo deve ter um GID único.


Gerenciando contas Samba

Para a configuração típica do Samba, as informações de conta são armazenadas em um dos três bancos de dados de senha:

  • smbpasswd
  • tdbsam
  • ldapsam

Usando smbpasswd e tdbsam

O banco de dados smbpasswd é o banco de dados de backend usado pelo Samba até a versão 3.4. No Samba 3.4, o smbpasswd está sendo substituído e o tdbsam agora é o backend padrão, e o banco de dados de backend recomendado para um ambiente com menos de 250 usuários.

O banco de dados tdbsam é considerado mais escalável que o smbpasswd. Se você estiver usando uma versão do Samba que empregue o smbpassd por padrão, é possível alterar o banco de dados de backend no arquivo smb.conf especificando o parâmetro passdb = tdbsam na seção global .

Mas o smbpasswd não é apenas um banco de dados: é uma ferramenta inclusa no conjunto Samba que pode fornecer uma maneira de gerenciar as contas Samba em uma configuração Samba simples. Para criar uma conta Samba, é preciso ter privilégios de administrador. A conta deve existir no servidor Linux local antes de tentar criar a conta Samba. A Listagem 3 mostra o código para criar uma conta de usuário Samba com o smbpasswd.

Listagem 3. Criando uma conta de usuário Samba usando o smbpasswd
[tbost@samba ~]$ sudo smbpasswd -a monty
New SMB password:
Retype new SMB password:
Added user monty.

Os usuários têm acesso a smbpasswd para alterar suas senhas, como mostrado na Listagem 4.

Listagem 4. Usuário local trocando a senha com o smbpasswd
[monty@samba ~]$ smbpasswd
Old SMB password:
New SMB password:
Retype new SMB password:
Password changed for user monty
[monty@samba ~]$

Como alternativa, você pode configurar o Samba para sincronização de senha de modo que quando um usuário altera a senha da conta local, a senha do Samba também é atualizada:

[global]
unix password sync = yes

Se o usuário não precisar acessar o servidor Samba por um longo período, é possível desativar a conta temporariamente e então reativá-la mais tarde. Se um usuário não precisar mais acessar a conta, basta excluí-la. A Listagem 5 mostra os comandos.

Listagem 5. Desativando, ativando e excluindo uma conta Samba com smbpasswd
[tbost@samba ~]$ sudo smbpasswd -d monty
Disabled user monty.
[tbost@samba ~]$ sudo smbpasswd -e monty
Enabled user monty.
[tbost@samba ~]$ sudo smbpasswd -x monty
Deleted user monty.
[tbost@samba ~]$

Usando pdbedit

Uma ferramenta avançada inclusa no conjunto Samba é pdbedit. Essa ferramenta pode funcionar com as contas de qualquer um dos três bancos de dados de backend. Além de criar, modificar e remover usuários, é possível usar pdbedit para:

  • Listar contas de usuários
  • Especificar diretórios iniciais
  • Importar contas de usuários
  • Definir políticas de contas

É possível usar pdbedit e sambapasswd de maneira intercambiável no banco de dados tdbsam (consulte a Listagem 6). Porém, todos os comandos realizados com pdbedit devem ser com privilégios de administrador.

Listagem 6. Interagindo com o banco de dados de backend usando smbpasswd e pdbedit
[tbost@samba ~]$ sudo smbpasswd -a monty
New SMB password:
Retype new SMB password:
Added user monty.
[tbost@samba ~]$ sudo pdbedit -L
monty:504:Monty Python
[tbost@samba ~]# sudo pdbedit -L --verbose 
Unix username:        monty
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-2247757331-3676616310-3820305120-1001
Primary Group SID:    S-1-5-21-2247757331-3676616310-3820305120-513
Full Name:            Monty Python
Home Directory:       \\samba\monty
HomeDir Drive:        
Logon Script:         
Profile Path:         \\samba\monty\profile
Domain:               SAMBA
Account desc:         
Workstations:         
Munged dial:          
Logon time:           0
Logoff time:          never
Kickoff time:         never
Password last set:    Tue, 24 May 2011 14:19:46 CDT
Password can change:  Tue, 24 May 2011 14:20:16 CDT
Password must change: Tue, 24 May 2011 14:20:16 CDT
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

A Listagem 6 demonstra como é possível criar um usuário com smbpassd e então listar usuários do Samba com pdbedit. Para mais informações de conta no pdbedit, inclua o comutador --verbose .

Desenvolva sua própria alimentação

É possível desenvolver uma alimentação RSS, Atom ou HTML customizado para receber uma notificação sobre a inclusão de novos artigos ou a atualização do conteúdo. Acesse Alimentações RSS do developerWorks. Selecione Linux como zona e Articles como tipo, e digite Linux Professional Institute como palavra-chave. Em seguida, escolha o tipo preferencial de alimentação.

Também é possível usar pdbedit para definir políticas de conta. Os nomes de políticas de conta que podem ser gerenciados são:

  • min password length
  • password history
  • user must logon to change password
  • maximum password age
  • minimum password age
  • lockout duration
  • reset count minutes
  • bad lockout attempt
  • disconnect time
  • refuse machine password change

A Listagem 7 muda o comprimento mínimo da senha para oito caracteres e depois muda a validade máxima da senha para 30 dias. O comutador -P assume um argumento de cadeia de caracteres que deve combinar exatamente com os nomes predefinidos da política, enquanto o comutador -c assume um argumento do valor para a configuração da política.

Listagem 7. Gerenciando contas com o pdbedit
[tbost@samba ~]$ sudo pdbedit -P 'min password length' -C 8
account policy "min password length" description: Minimal password length (default: 5)
account policy "min password length" value was: 5
account policy "min password length" value is now: 8
[tbost@samba ~]$ sudo pdbedit -P 'maximum password age' -C 30
...
account policy "maximum password age" value was: 4294967295
account policy "maximum password age" value is now: 30

Consulte a documentação do man pdbedit ou digite pdbedit -h para mais detalhes sobre os comandos disponíveis.

Usando ldapsam

Se você estiver trabalhando com um serviço de diretório existente, como Lightweight Directory Access Control (LDAP), ou em um ambiente maior (ou seja, mais de 250 usuários), é possível usar o backend ldapsam. Dos três bancos de dados de backend, o ldapsam é o único que permite o armazenamento de contas de grupos. Armazenando todos os usuários e grupos no backend ldap, todos os servidores podem ter UIDs e GIDs consistentes. Configurar o LDAP está além do escopo deste artigo, mas o parâmetro idmap backend no smb.conf especifica o local do seu servidor do LDAP.

O parâmetro definido abaixo direciona o Samba para usar o serviço de diretório do LDAP com o nome de host directory-services.example.org como seu armazenamento de backend. É preciso primeiro ter um servidor do LDAP funcionando e que esteja configurado para interagir com o Samba. (idmap é discutido com mais detalhes na seção a seguir.)

[global]
idmap backend = ldap:ldap://directory-services.example.org:636

Mapeando contas

Se seu servidor Samba for um servidor autônomo dentro de um domínio, provavelmente você usará apenas arquivos de mapeamento. Entretanto, se seu ambiente consistir em usuários conectando-se ao servidor Samba a partir de outro domínio, a ferramenta idmap auxilia no mapeamento adequado de UIDs e GIDs.

Mapeamento do usuário usando os arquivos sampasswd e TDB

Se os usuários do Windows conectando-se ao servidor Samba tiverem nomes de usuário idênticos àqueles criados no servidor Samba, um arquivo de mapeamento não deve ser necessário. Entretanto, se seus usuários do Windows tiverem nomes que não tenham um mapeamento exato, é possível criar um arquivo de mapeamento para vincular os nomes de usuários. Lembre-se que embora o Linux faça distinção entre maiúsculas e minúsculas, o nome de usuário do Windows não. Então, o nome de usuário do Windows TBost não é a mesma conta local que tbost. A Tabela 1 mostra o mapeamento dos nomes de contas do Windows para UNIX.

Tabela 1. Nomes de contas Windows e UNIX a serem usados para mapeamento
WindowsUNIX
Montymonty
bostttbost
sue.georgesue

Ao criar contas do Samba, use o nome de conta do Windows. É possível, então, especificar um local de arquivo no arquivo smb.conf que mapeará as contas para a conta UNIX adequada. A Listagem 8 mostra o mapeamento de conta no UNIX.

Listagem 8. Mapeamento de conta simples no UNIX
[tbost@samba ~]$ sudo vi /etc/samba/smb.conf 
[global]
username map = /etc/samba/smbusers
...
...
...
[tbost@samba ~]$ sudo vi /etc/samba/smbusers 
# Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin
nobody = guest pcguest smbguest
monty = Monty
tbost = bostt
sue = sue.george

O comando de código na Listagem 8 configura o parâmetro username map para usar /etc/samba/smbusers como o arquivo de mapeamento. O mapeamento de contas é direto: coloca-se o nome da conta UNIX no lado esquerdo e os nomes da conta do Samba no lado direito, separados por um sinal de igual (=). Quando os usuários se conectam, o Samba mapeia para a conta adequada.

Mapeando grupos

Para ambientes típicos de servidor Samba, mapeamentos de grupos são configuráveis usando o comando net groupmap do conjunto Samba. Suponha que as contas de usuários do Windows Monty, bostt e sue.george sejam membros das contas de grupo Domain Admins, Domain Users e Domain Guests. Se você desejar que esses usuários tenham uma permissão de conta de grupo para os grupos UNIX similares no servidor Samba, adicione os nomes de usuários da conta UNIX a cada grupo:

adm:x:4:root,adm,daemon,monty,tbost,sue
users:x:100:monty,tbost,sue
guests:x:507:monty,tbost,sue

Essa é apenas uma listagem parcial da lista completa de grupos em um servidor Samba. Os grupos administradores e usuários foram criados quando o sistema operacional Linux foi instalado. Será preciso adicionar cada usuário ao grupo adequado (consulte a Tabela 2).

Tabela 2. Grupos de conta do Windows e do UNIX a serem usados para mapeamento
WindowsUNIXID relativo (RID) do WindowsGID do UNIX
Administradores do domínioadm5124
Usuários do domíniousuários513100
Convidados do domínioconvidados514507

O comando net groupmap pode mapear seus grupos de domínio (consulte a Listagem 9) e net groupmap list lista os mapeamentos do grupo de domínio. A partir do Samba 3.x, uma nova funcionalidade de mapeamento de grupo para criar associações entre um RID de grupo do Windows e um GID do UNIX está disponível.

Listagem 9. Mapeando grupos com o comando groupmap
[tbost@samba ~]$sudo net groupmap add ntgroup="Domain Admins" unixgroup=adm \
rid=512 type=d
Successfully added group Domain Admins to the mapping db as a domain group
[tbost@samba ~]$ sudo net groupmap add ntgroup="Domain Users" unixgroup=users \
rid=513 type=d
Successfully added group Domain Users to the mapping db as a domain group
[tbost@samba ~]$sudo net groupmap add ntgroup="Domain Guests" unixgroup=guests \
rid=514 type=d
Successfully added group Domain Guests to the mapping db as a domain group
[tbost@samba ~]$sudo net groupmap list
Domain Users (S-1-5-21-2247757331-3676616310-3820305120-513) -> users
Domain Guests (S-1-5-21-2247757331-3676616310-3820305120-514) -> guests
Domain Admins (S-1-5-21-2247757331-3676616310-3820305120-512) -> adm

A sequência de etapas para mapear grupos na Listagem 9 é:

  1. Com privilégios de administrador, use o comando net groupmap add para especificar o grupo do Windows ntgroup='Domain Admin" para mapear para o grupo do UNIX unixgroup=adm.

    Realize essa etapa para cada mapeamento de grupos.

  2. O comando final na Listagem 9 exibe o mapeamento para os grupos.

Usando mapeamento de identidade

Para a maioria dos ambientes, os mapeamentos acima são suficientes. Entretanto, se você gerenciar um ambiente mais complexo, como um com vários servidores Samba ou estações de trabalho de domínios diferentes conectando-se ao servidor Samba, você deve familiarizar-se com identify mapping (IDMAP) e Winbind. O IDMAP pode ajudar a superar problemas de interoperabilidade entre um ID de segurança (SID) e um UID ou GUID do UNIX local.

Se seu servidor Samba for membro de um domínio do Windows, é possível usar Winbind para mapear um SID para um UID ou GID. E também definir o intervalo do parâmetro idmap e especificar por quanto tempo o Winbind deve armazenar em cache as informações da conta no arquivo smb.conf:

[global]
idmap uid = 20000-50000
idmap gid = 20000-50000
winbind cache time = 300

Os parâmetros no código acima instruem o Winbind a usar o intervalo de UID local de 20000-50000 e um intervalo de GID de 20000-50000. Essa configuração é um intervalo relativamente seguro para um servidor Samba que não espera ter milhares de contas de usuários ou grupo locais. O parâmetro winbind cache time = 300 instrui o Winbind a armazenar em cache as informações de conta por 300 segundos. Por padrão, o Winbind armazena mapeamentos no arquivo winbind_idmap.tdb.


Usando contas padrão para forçar propriedade

Ao invés de adicionar todos os usuários a um grupo, você pode achar mais fácil usar os parâmetros force user e force group . Quando definidos, esses parâmetros instruem o Samba a conectar-se a um usuário autorizado como tendo as permissões para o grupo e usuário especificados. Isso é especialmente útil ao configurar um compartilhamento que será acessado por muitos usuários e para que permissões comuns sejam suficientes:

[global]
username map = /etc/samba/smbusers
force user = guest
force group = +employees

No código acima, o parâmetro force user trata todos os usuários conectados como usuários convidados ao trabalhar com arquivos. Um usuário ainda deve conectar-se com uma conta de usuário válida. As apresentações de configuração forçarão as contas de usuário para convidado, com a conta de grupo employees.

Recursos

Aprender

Discutir

  • Participe da comunidade My developerWorks. Conecte-se a outros usuários do developerWorks, ao mesmo tempo que explora os blogs, fóruns, grupos e wikis direcionados a desenvolvedores.

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux
ArticleID=768916
ArticleTitle=Aprenda Linux, 302 (Ambientes Mistos): Gerenciando contas de usuários e grupos
publish-date=11032011