domingo, 11 de julho de 2010

Administrando usuários e grupos no sistema Linux

As contas do usuário servem a diversos objetivos nos sistemas operacionais. Em primeiro lugar, elas fornecem ao sistema uma maneira de distinguir as pessoas diferentes que o usam, por razões de identificação e segurança. Cada usuário tem uma conta pessoal com um nome do usuário separado e senha. Os usuários podem definir as permissões em seus arquivos, permitindo ou restringindo o acesso de outros usuários à eles. Cada arquivo do sistema pertence a um determinado usuário que pode definir permissões para este arquivo. As contas do usuário são usadas para identificar o acesso ao sistema, apenas as pessoas com contas podem acessar a máquina. As contas também são usadas para identificar os usuários e manter registros do sistema.

Basicamente, existem dois tipos de contas. A conta do usuário comum, que utiliza o sistema e suas ferramentas, e a conta do administrador do sistema ou superusuário, que utiliza o sistema pela conta de root, onde é possível realizar as configurações do sistema.

Por não possuir restrições de segurança, a conta de root só deve ser usada para manutenções no sistema e de preferência o menor tempo possível. Para evitar permissões desnecessárias no sistema deve-se usar uma conta normal de usuário em operações comuns. Se um arquivo for executado pelo usuário root e este contiver comandos ou códigos que causem danos ao sistema, estes danos poderão ser irreparáveis.

Os usuários podem ser organizados em grupos. Os grupos de usuários são uma maneira conveniente de organizar logicamente os conjuntos de contas do usuário e permitir aos usuários compartilharem arquivos dentro do seu grupo. Isso é útil para garantir privacidade e segurança dos dados. Cada usuário possui um grupo padrão, principal, e pode pertencer a grupos suplementares.

É interessante observar que alguns grupos e usuários são criados como padrão do sistema. Uma das primeiras contas existentes no Linux é a conta de superusuário, cuja senha é digitada durante a instalação. A maioria das distribuições permite também que outras contas comuns sejam criadas durante o seu processo de instalação. Estas contas são geralmente usadas pelos daemons do sistema, que tem que acessar os arquivos no sistema através de um determinado ID diferente de root ou de uma das contas pessoais dos usuários.

Como administrador do sistema, é sua função criar e gerenciar as contas para todos os usuários em sua máquina. É uma tarefa simples e independente, na maioria dos casos, mas é importante compreender como funciona.

Toda conta no sistema tem uma entrada no arquivo /etc/passwd. Este arquivo contém entradas, uma linha por usuário, que especificam diversos atributos para cada conta. Cada entrada neste arquivo tem o mesmo formato, com campos separados por um "dois pontos":

nome_do_usuário:senha:UID:GID:Nome Real:/diretório/pessoal:shell

O nome_do_usuário é uma string de caracteres exclusiva, identificando a conta. Para as contas pessoais, este é o nome com o qual o usuário se conecta. A senha é uma representação criptografada da senha do usuário. Se neste campo houver um asterisco (*), a conta está desativada, se houver uma exclamação (!), a senha está bloqueada, e se estiver vazia o usuário não possui uma senha definida. UID e GID é a representação numérica da identificação do usuário e do seu grupo padrão. O sistema gerencia os usuários e grupos com estes números, a representação no nome em caracteres alfabéticos é apenas para facilitar o uso humano do sistema. O próximo campo pode conter informações diversas sobre o usuário, como nome real, endereço etc., historicamente chamado de "gecos". O campo seguinte contém o caminho para o diretório pessoal do usuário (home) e o último contém o caminho para o arquivo executável do programa do shell.

As distribuições atuais utilizam ainda uma ferramenta de proteção de senha, o shadow, para ocultar a representação criptografada das senhas dos usuários no arquivo /etc/passwd, substituindo por um x, e então armazenando-a no arquivo /etc/shadow, que não possui permissão de leitura aos usuários comuns.

Os grupos existentes estão no arquivo /etc/group. A maioria dos grupos que estão presentes neste arquivo servem para o controle do sistema, e somente o superusuário pode modificar suas permissões e incluir ou retirar usuários destes grupos. Este arquivo também contém entradas, uma linha por grupo, com campos separados por um "dois pontos":

nome_do_grupo:senha:GID:lista,de,usuários

O formato da linha é semelhante as linhas do arquivo /etc/passwd, mas o último campo serve para conter uma lista com os nomes dos usuários que pertencem ao grupo, separados por vírgulas. Se um usuário pertencer a mais de um grupo, seu nome aparecerá em cada linha dos respectivos grupos.

Cada usuário ou grupo existente no sistema deve possuir uma ID exclusiva para sua identificação. São números inteiros e positivos. O administrador do sistema, que utiliza a conta root, possui o número zero em seu UID. As distribuições geralmente adotam números a partir de 500 para identificar os usuários pessoais, abaixo disso ficam os usuários virtuais dos daemons.

Existem várias formas de criar e manter usuários em um sistema. É importante lembrar sempre de que, para executar estas tarefas, você deve estar acessando o sistema como superusuário. Será mostrado como executar estas tarefas através da linha de comando em um prompt do shell.

Criar uma conta de usuário requer diversas etapas. Basicamente é acrescentar uma entrada no arquivo /etc/group para criar um grupo padrão para o usuário, acrescentar uma entrada no arquivo /etc/passwd para criar a conta do usuário, criar o diretório pessoal do usuário, definir os arquivos de configuração padrão (o diretório /etc/skel serve para isso) e atribuir as devidas permissões nos arquivos pessoais para o novo usuário. Após estas etapas, se desejar, basta definir a senha pessoal ao novo usuário. Felizmente, o administrador não tem que executar estas etapas manualmente pois os sistemas Linux incluem alguns programas para fazer isto.

Os programas nativos do sistema Linux são: useradd, userdel, usermod, groupadd, groupdel, groupmod e passwd. Alguns deles podem utilizar definições padrões, especificadas nos arquivos /etc/login.defs ou /etc/default/useradd, quando é omitida determinadas opções em sua linha de comando.

Algumas distribuições Linux incluem também um script chamado adduser que atua como uma interface interativa para o programa useradd, facilitando a tarefa pois evita uma linha de comando cheia de opções e parâmetros. As distros que possuem este script é a Slackware e a Debian/Ubuntu. As distros RedHat/CentOS/Fedora possuem apenas uma ligação de adduser para useradd e a distro openSUSE não possui o adduser.

O programa useradd cria um novo usuário ou atualiza as informações do usuário. Possui várias opções para a linha de comando explicadas uma a uma em sua página manual. Basicamente um exemplo de comando para criar um usuário é:

# useradd -m -U fulano

A opção -m cria o diretório pessoal, se não existir, copiando o conteúdo do diretório esqueleto (/etc/skel). A opção -U cria um grupo com o mesmo nome do usuário e o adiciona à ele, tornando o seu grupo padrão.

O programa userdel remove uma conta de usuário do sistema. Apenas uma opção é segura para aplicar, a opção -r, que remove junto o diretório pessoal do usuário. Um exemplo de comando é:

# userdel -r fulano

O programa passwd atualiza a autenticação do usuário, ou seja, a senha do usuário. Cada usuário pode utilizar este comando para alterar sua própria senha e o administrador pode alterar a senha de qualquer usuário, como no exemplo abaixo:

# passwd fulano

Os programas groupadd e groupdel, respectivamente, cria e remove um grupo. Suas linhas de comando são basicamente o executável do programa seguido do nome do grupo, bem simples.

O programa usermod tem muitas opções, da mesma forma como os outros, explicadas uma a uma em suas páginas manuais. Casos de uso bastante úteis deste programa são adicionar ou retirar um usuário de grupos suplementares. O comando a seguir adiciona o usuário ao grupo suplementar "aluno":

# usermod -a -G aluno fulano

Para remover o usuário de um grupo basta redefinir os grupos suplementares do usuário, omitindo o grupo do qual será excluído. Os comandos id ou groups podem ser úteis para mostrar os grupos que o usuário pertence:

# id -nG fulano

# groups fulano

A saída do comando acima é uma lista com todos os grupos o qual o usuário pertence. Para remover o usuário de um grupo basta omitir o nome do grupo da linha de comando. Um exemplo de comando é o seguinte:

# usermod -G users,cdrom,games fulano

Os arquivos /etc/login.defs e /etc/default/useradd contém os valores padrão para algumas das opções disponíveis nestes programas. Por exemplo a variável CREATE_HOME declarada no arquivo /etc/login.defs pode receber o valor "yes", o que automatiza a criação do diretório pessoal do usuário e desta forma não necessita a opção -m no comando useradd.

Modificar os atributos das contas de usuários e grupos é geralmente uma simples questão de editar o /etc/passwd e o /etc/group. O sistema fornece comandos como o usermod e o groupmod para fazer exatamente isto, mas pode ser mais fácil editar os arquivos manualmente, na maioria das vezes. Para editar estes arquivos é interessante utilizar os comandos vipw e vigr pois fornecem uma sessão do editor vi protegida por um controle de trava nos arquivos (lock).

Como o sistema provavelmente utiliza o shadow para proteger as senhas então é preciso sincronizar as linhas entre os arquivos /etc/passwd e /etc/group com os arquivos /etc/shadow e /etc/gshadow. Os comandos pwck e grpck servem para verificar a integridade dentre estes arquivos.

Os números para UID e GID devem ser, em essência, únicos para cada conta de usuário ou grupo. Estes programas são capazes de tratar os números ativos e atribuir valores em sequência para as novas entradas. Em uma edição manual o administrador deve tomar este cuidado com atenção.

Consulte as páginas manuais destes programas para mais informações.

Nenhum comentário:

Postar um comentário