# Gerenciamento de usuários e grupos do linux

O Linux é um sistema multiusuário, com isso nenhum usuário pode interferir nas atividades do outro, ou seja, não pode alterar arquivos ou configurações de outro usuário. As restrições implantadas no sistema de permissões do Linux são consideradas muito eficientes. Elas são essenciais para um correto funcionamento do sistema operacional. Deste modo, para tornar possível restrição ou permissão, com o acesso e o uso de recursos aos usuários, é necessário que cada pessoa tenha um usuário criado no sistema operacional.

## Classe de usuários

Para melhor compreensão sobre o controle de usuários, esta seção será dividida em três partes.
* Super-Usuário
* Usuários do sistema
* Usuários comuns
Super-Usuário
No sistema, esse usuário é denominado de root. Este é responsável por controlar todo o sistema e não possui quaisquer tipos de restrições. Sempre que executado algum software ou atividade que precise de acesso administrativo, é necessário o root, que é chamado por meio do comando sudo.
Por exemplo, sempre que for instalar um programa ou realizar uma upgrade de todo o sistema operacional, é utilizado o comando sudo para se ter as permissões de root e conseguir efetuar essas tarefas.
Usuário do sistema
Usuários que não necessitam estarem logados no sistema para controlar alguns serviços. Estes comumente não possuem senhas. Um exemplo desse tipo de usuário é o www-data, que pode ser utilizado para controlar servidores web como Apache e Nginx.
Usuários comuns
Os usuários comuns são aqueles que possuem contas para utilização do sistema operacional. Basicamente, esses usuários possuem um diretório base (/home/username, exemplo) e podem criar e manipular arquivos em seu diretório e em outros diretórios, além de executar tarefas simples como criar e editar documentos, navegar na internet, ouvir música etc. Ao contrário do usuário administrador, o usuário comum é inviabilizado para realização de algumas tarefas a nível de sistema.

## Permissões

As restrições básicas de acesso são implementadas por meio de um sistema de permissões simples, entretanto eficiente; Existe três tipos de permissões de acesso: LER, GRAVAR E EXECUTAR e três grupos DONO, GRUPO E OUTROS.
Arquivos disponíveis somente para leitura podem ser abertos e ter seu conteúdo visualizado, assim como pastas com o mesmo tipo de permissão podem ter os arquivos listados.
Arquivos que possuem permissão de escrita podem ser alterados – o usuário, neste caso, tem permissão para editar um arquivo e até apagar. Em diretórios é possível criar um novo arquivo.
A permissão de execução dá a possibilidade de executar um arquivo como um programa, por exemplo um script de instalação de um aplicativo.
O chmod é o comando para atribuir permissões de arquivos. Basicamente, ele atua diretamente nos níveis dono, grupo e outros.

## Diretório e arquivos

/etc/skel - Neste diretório são memorizados arquivos ocultos (iniciados com "."), que são copiados para o diretório HOME do usuário no durante a criação da sua conta. Esse diretório engloba ou configura arquivos existentes aprontando-os a partir da necessidade do usuário.
/etc/passwd – Onde estão armazenadas diversas informações sobre o usuário. Apenas o administrador tem permissão para modificar esse arquivo.
/etc/shadow – Local de armazenamento de todas as propriedades das senhas dos usuários.
/etc/gshadow – Utiliza o mesmo conceito do diretório /etc/shadow, mas adicionam-se propriedades de grupos e não usuários.
/etc/group - Onde estão localizados os grupos criados no sistema operacional. Responsável por armazenar a combinação de grupos e usuários em comum.
/etc/motd - Exibe informações após a confirmação do login do usuário.
/etc/default/useradd e /etc/login.defs – onde estão armazenadas as configurações padrão durante a criação de usuários.

## Gerenciamento de usuários e grupos

Antes de criar e controlar contas no GNU/Linux, é conveniente entender como o sistema operacional lida com isso. Em geral, cada conta criada fica armazenada em um arquivo de nome passwd localizado dentro do diretório /etc/ (ou seja, seu caminho completo é /etc/passwd). Esse arquivo contém várias informações sobre cada usuário:
* o seu nome de login (ou seja, o nome que é necessário digitar para entrar no sistema);
* senha (neste caso, a informação da senha pode estar criptografada ou em outro arquivo);
* UID (User IDentification), ou seja, número de identificação do usuário;
* GID (Group IDentification), isto é, número de identificação do grupo do usuário;
* informações adicionais sobre o usuário (nome completo, dados de contato, etc);
* diretório "home", ou seja, o diretório principal de cada usuário;
* shell do usuário, uma espécie de programa que interpretará os comandos que o usuário digitar.
Linha referente ao usuário no arquivo /etc/passwd:
Perceba que cada parâmetro é dividido por : (dois pontos), agora estude o que cada um representa.
nomeusuario: é neste local que se encontra o nome de login do usuário, neste caso, nomeusuario. Esse nome não pode ser igual a outro já existente no sistema e, comumente é limitado a 32 caracteres. Todavia, dependendo da configuração aplicada, o nome pode ser "case sensitive", ou seja, diferencia letras maiúsculas de minúsculas. Assim, 'wiki' será diferente de 'WIKI', por exemplo;
x: essa posição indica a senha do usuário. A letra x informa que a senha está armazenada e protegida dentro do arquivo /etc/shadow. Caso houver um asterisco (*) no lugar, significa que a conta está desativada. Todavia, se não houver nada, significa que não há senha para esse usuário. Em alguns casos, embora isso não seja recomendável, a senha pode estar inserida diretamente ali, porém criptografada;
1001: esse campo indica o número UID (User IDentification) do usuário. É um número que serve para identificar o usuário. Em geral, o sistema pode suportar UIDs que vão de 0 a 4.294.967.296, embora alguns sistemas limitem esse número a valores inferiores. Normalmente, o UID 0 é atribuído pelo próprio GNU/Linux ao usuário root. O sistema também pode criar automaticamente usuários para a execução de determinadas rotinas e atribuir a eles UIDs baixos, como 1, 2, 3 e assim por diante.
700: esse é o campo que indica o GID (Group IDentification) do usuário, isto é, o número de identificação do grupo do qual ele faz parte. Assim como no UID, geralmente o usuário 0 é indicado para o grupo do usuário root.
Linuxman,Brasil,9999-8888: esse campo permite a inclusão de informações adicionais sobre o usuário. Também chamado de GECOS (abreviação de General Electric Comprehensive Operating System) em alusão a uma funcionalidade existente em um sistema operacional Unix que tinha este nome, esse campo serve para, por exemplo, cadastrar o nome completo do usuário, seu endereço, seu telefone etc. Cada informação é separada da outra por uma vírgula.
/home/nomeusuario: cada usuário criado no sistema tem direito a uma pasta "home", ou seja, uma pasta própria, para uso exclusivo.
/bin/bash: esse campo informa qual o shell (interpretador de comandos) de login que o usuário utilizará. O GNU/Linux trabalha com diversos, entre eles, o bash, o sh e o csh. Se nenhum shell for informado, o sistema utilizará o bash como padrão.

### Criando um usuário

Para que seja possível logar no sistema o usuário deverá ter um username (login) e uma senha (password).
Os dois comandos mais simples são o "adduser" e o "passwd", que permitem, respectivamente adicionar novos usuários e alterar as senhas de acesso.
Exemplo:
Para apagar um usuário é simples, basta digitar userdel seguido do nome do usuário.
Exemplo:
Caso queira eliminar esse usuário do sistema e apagar sua pasta "home" (juntamente com todo o seu conteúdo), basta digitar o comando userdel seguido do parâmetro -r e do nome do usuário:
Exemplo:

### Criando um grupo

Para cria um novo grupo, utiliza-se o comando addgroup seguido do seu nome.
Exemplo:
Caso queira definir o GID, utiliza-se o parâmetro –g juntamente do número antes do nome.
Exemplo:
Para apagar um grupo, utiliza-se o comando groupdel seguido do seu nome.
Exemplo: