107.1 Gerencie usuarios e grupos e arquivos de sistema relacionados
Canditatos devem ter a habilidade de adicionar, remover, suspender e mudar contas de usuários.
- Adicione, modifique e remova usuários e grupos;
- Gerenciar informações de usuários e grupos info e banco de dados de senha e grupos;
- Crie e gerencie contas de usuários com propósito especial e contas limitadas;
id
O comando id
exibe as informações sobre o usuário logado na sessão. O comando exibe os IDs de usuário e grupos ao qual ele pertence.
id
uid=1000(alphabraga) gid=1000(alphabraga) groups=1000(alphabraga),4(adm),24(cdrom),27(sudo)
Podemos ainda passar um usuário como parâmetro para visualizar as informações daquele usuário:
id www-data
uid=33(www-data) gid=33(www-data) groups=33(www-data)
groups
O comando groups
tem um comportamento semelhante ao id
. Só que ele retorna apenas informações sobre os grupos. Veja abaixo que digitando apenas groups
no terminal é retornado os grupos do usuário logado.
groups
usuario1 adm cdrom sudo dip plugdev lpadmin sambashare
Ou podemos passar um usuário:
groups mysql
mysql : mysql
/etc/passwd
É o arquivo que contêm as informações de usuários do sistema. Onde cada linha representa um usuário e os campos são divididos por :
. Vejamos o arquivo abaixo:
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108::/home/syslog:/bin/false
_apt:x:105:65534::/nonexistent:/bin/false
messagebus:x:106:110::/var/run/dbus:/bin/false
uuidd:x:107:111::/run/uuidd:/bin/false
lightdm:x:108:114:Light Display Manager:/var/lib/lightdm:/bin/false
A ordem das colunas é:
- 1 - Login
- 2 - Representa a senha que hoje fica no arquivo
passwd
- 3 - Id do usuário
- 4 - Id do Grupo default do usuário
- 5 - Informações do usuário
- 6 - Diretório padrão do usuário
- 7 - Shell padrão do usuário
Os usuários comuns do sistema possuem id apartir de 1000. Antes de 1000 são usuários de sistema.
O arquivo /etc/passwd deve ser editado usando o comando vipw
que abre o editor de texto padrão e bloqueia a edição concorrente do arquivo evitando assim a possivel corrupção do arquivo.
/etc/shadow
O arquivo /etc/shadow
contém as senhas dos usuários do sistema. Antes elas ficavam no passwd
.
root:!:17712:0:99999:7:::
daemon:*:17494:0:99999:7:::
bin:*:17494:0:99999:7:::
sys:*:17494:0:99999:7:::
sync:*:17494:0:99999:7:::
games:*:17494:0:99999:7:::
man:*:17494:0:99999:7:::
lp:*:17494:0:99999:7:::
mail:*:17494:0:99999:7:::
news:*:17494:0:99999:7:::
uucp:*:17494:0:99999:7:::
proxy:*:17494:0:99999:7:::
www-data:*:17494:0:99999:7:::
backup:*:17494:0:99999:7:::
list:*:17494:0:99999:7:::
irc:*:17494:0:99999:7:::
gnats:*:17494:0:99999:7:::
nobody:*:17494:0:99999:7:::
systemd-timesync:*:17494:0:99999:7:::
systemd-network:*:17494:0:99999:7:::
systemd-resolve:*:17494:0:99999:7:::
systemd-bus-proxy:*:17494:0:99999:7:::
syslog:*:17494:0:99999:7:::
_apt:*:17494:0:99999:7:::
messagebus:*:17494:0:99999:7:::
uuidd:*:17494:0:99999:7:::
lightdm:*:17494:0:99999:7:::
ntp:*:17494:0:99999:7:::
Assim como o passwd
o arquivo /etc/shadow
, cada linha corresponde a senha do usuário onde as colunas são divididas por :
- 1: coluna é o nome do usuário, que deve corresponder a um nome de usuário válido no passwd
- 2: é um hash que representa a senha.
- 3: representa o número de dias desde 01/01/1970 que a senha foi alterada
- 4: número minimo de dias para que a senha possa ser alterada
- 5: número de dias depois dos quais a senha TEM QUE SER ser alterada, por padrão o valor é 99999
- 6: número de dias para informar ao usuário que a senha TEM QUE SER ALTERADA
- 7: número de dias depois da senha ter sido expirada, ate que a conta seja bloqueada
- 8:O número de dias, a partir de 01/01/1970, desde que a conta foi bloqueada;
- Campo reservado.
O /etc/shadow
pode ser tambem editado de forma segura, usando o comando vipw
com o parametro -s
:
$ vipw -s
O segundo campo de senha possui algumas caracteristicas. Caso o campo tenha o caracter *
indica que a conta nunca teve uma senha e por conta disso não é permitido acesso ao sistema com essa conta. Já senhas com !
ou com !
no começo do hash indica que a conta foi bloqueada utilizando o comando usermod -L
ou passwd -l
.
pwconv
Esse comando converte uma senha que esta no arquivo passwd para o shadow
pwunconv
Esse comando converte uma senha que esta no arquivo shadow para o passwd
/etc/group
O arquivo que armazena os dados sobre os grupos do sistema.
- 1 coluna com o nome do grupo
- 2 a senha do usuário
- 3 o id do grupo
-
4 os usuários que fazem parte do grupo separados por virgula.
sys:x:3: adm:x:4:syslog,alphabraga tty:x:5: disk:x:6: lp:x:7: mail:x:8: news:x:9: uucp:x:10: man:x:12: proxy:x:13: kmem:x:15: dialout:x:20: fax:x:21: voice:x:22:
O arquivo /etc/group deve ser editado com o comando vigr
para evitar que o arquivo seja comrrompido.
/etc/login.defs
É um arquivo que contém várias configurações relativas a usuários como:
criação do diretório home de forma automatica
CREATE_HOME yes
Faixa de UID para usuários comuns do sistema
UID_MIN 1000
UID_MAX 60000
/etc/skel/
É o diretório que é copiado para todo novo usuário criado com o comando useradd
utizando a opção -m
. A opção -m
serve para criar o diretório home e o diretorio home é criado baseado na estrutura de diretórios do /etc/skel
.
#useradd -m fulano
chage
Mostra e muda as informações do usuário. Apenas o root pode ver e mudar as informações de todos os usuários do sistema.
Utilização
$ chage [options] LOGIN
- -m dias : mínimo de dias até que o usuário possa trocar uma senha modificada;
- -M dias : número máximo de dias que a senha permanecerá válida;
- -d dias : número de dias decorridos em relação a 0 1 /0 1 / 1 970. Determina quan do a senha foi mudada. T arnbém pode ser expresso no formato de data local (dia/mês/ano) ;
- -E dias : número de dias decorridos em relação a 0 1 /0 1 / 1 970, a partir dos quais a conta não estará mais disponível. Também pode ser expresso no for mato de data local (dia/mês/ano);
- -I dias : inatividade ou tolerância de dias, após a expiração da senha, para que a conta seja bloqueada;
- -W dias : dias anteriores ao fim da validade da senha, quando será emitido um aviso sobre a expiração da validade.
Com a opção -l
listamos as informações de um determinado usuario também passado como parametro:
chage -l alphabraga
Last password change : Jun 30, 2018
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
getent
O comando getent
fornece informações de usuários, grupos e elementos de rede.
Para pegar informações de usuarios passamos como parametro o nome passwd
:
getent passwd alphabraga
alphabraga:x:1000:1000:alphabraga,,,:/home/alphabraga:/usr/bin/zsh
Para pegar informações de grupos passamos group
:
getent group alphabraga
alphabraga:x:1000:
groupadd
Comando utilizado para adicionar grupos no sistema. A sua sintaxe é bem similar ao useradd
:
# groupadd suporte
O comando acima ira adicionar o grupo suporte ao sistema. Executando o comandos abaixo, podemos nos certificar que o grupo foi criado com sucesso:
# grep suporte /etc/group
suporte:x:1002:
# grep suporte /etc/gshadow
suporte:!::
Abaixo todas as opções que o comando possui:
# groupadd --help
Usage: groupadd [options] GROUP
Options:
-f, --force exit successfully if the group already exists,
and cancel -g if the GID is already used
-g, --gid GID use GID for the new group
-h, --help display this help message and exit
-K, --key KEY=VALUE override /etc/login.defs defaults
-o, --non-unique allow to create groups with duplicate
(non-unique) GID
-p, --password PASSWORD use this encrypted password for the new group
-r, --system create a system account
-R, --root CHROOT_DIR directory to chroot into
--extrausers Use the extra users database
Podemos definir por exemplo o gid
com o parametro -g, ficando dessa forma:
# groupadd -g5000 suporte
groupmod
Comando utilizado para mudar informações de grupos. Abaixo opções do comando:
# groupmod --help
Usage: groupmod [options] GROUP
Options:
-g, --gid GID change the group ID to GID
-h, --help display this help message and exit
-n, --new-name NEW_GROUP change the name to NEW_GROUP
-o, --non-unique allow to use a duplicate (non-unique) GID
-p, --password PASSWORD change the password to this (encrypted)
PASSWORD
-R, --root CHROOT_DIR directory to chroot into
Exemplo de como mudar o nome de um grupo
# groupmod -n devops suporte
O comando acima muda o nome do grupo de suporte
para devops
.
Para mudar o id podemos utilizar o parametro -g
:
groupmod -g 5005 devops
O comando acima muda o gid do grupo devops para 505.
groupdel
passwd
Comando realiza a alteração de senha de usuario.
$ passwd
O comando acima muda a senha do usuário que executa o comando. O usuário root pode mudar a senha de qualquer usuário, basta passa como parâmetro o nome do usuário:
$ passwd fulano
useradd
Esse comando é responsável pela adição de novos usuários no sistema. A forma mais simples de utilização do mesmo é:
# useradd fulano
O comando acima realiza a adição de um usuário no sistema, inserindo registros nos arquivos /etc/passwd
, /etc/shadow
e /etc/group
. Mas vale lembrar que apenas com esse comando não existe um senha válida para esse usuário e nem diretório home para o mesmo. O número maximo de caracteres para o nome de usuário são 8.
Os parametros mais utilizados desse comando são:
-m
para a a criação do home-c
para os comentários (quinto campo do /etc/passwd )-s
para definir o shell padrão do usuário-g
para definir o grupo padrão-
-G
definir os outros grupos do usuário# useradd -c “um usuario legal” -m -s /bin/bash -g testes fulano
Veja abaixo a lista de opções quie o comando possui:
# useradd --help
Usage: useradd [options] LOGIN
useradd -D
useradd -D [options]
Options:
-c, --comment COMMENT GECOS field of the new account
-d, --home-dir HOME_DIR home directory of the new account
-D, --defaults print or change default useradd configuration
-e, --expiredate EXPIRE_DATE expiration date of the new account
-f, --inactive INACTIVE password inactivity period of the new account
-g, --gid GROUP name or ID of the primary group of the new
account
-G, --groups GROUPS list of supplementary groups of the new
account
-h, --help display this help message and exit
-k, --skel SKEL_DIR use this alternative skeleton directory
-K, --key KEY=VALUE override /etc/login.defs defaults
-l, --no-log-init do not add the user to the lastlog and
faillog databases
-m, --create-home create the user's home directory
-M, --no-create-home do not create the user's home directory
-N, --no-user-group do not create a group with the same name as
the user
-o, --non-unique allow to create users with duplicate
(non-unique) UID
-p, --password PASSWORD encrypted password of the new account
-r, --system create a system account
-R, --root CHROOT_DIR directory to chroot into
-s, --shell SHELL login shell of the new account
-u, --uid UID user ID of the new account
-U, --user-group create a group with the same name as the user
-Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user mapping
--extrausers Use the extra users database
Vale lembrar que esse comando pode ser utilizado para bloquear uma conta com o parametro -l
:
# passwd -l fulano
useradd
O useradd
é um comando utilizado pelo root para adicionar novos usuarios no sistema. As informações de usuários ficam no arquivo passwd
Opções do useradd
:
- -c : comentário (informações adicionais do usuário)
- -d : caminho para o diretorio padrão do usuário
- -g : grupo padrão do usuário
- -G : grupos adicionais
- -u : definir o UID
- -s : shell padrão do usuário
- -p : senha do usuário
- -e : data de validade
- -k : copia estrutura de diretorio do /etc/skel
- -m : cria diretorio pessoal, caso o mesmo não exista
Podemos usar tambem o adduser
Diversas Definições podem ser preestabelecidas no arquivo /etc/adduser.conf
. Veja uma parte do arquivo abaixo:
# /etc/adduser.conf: `adduser' configuration.
# See adduser(8) and adduser.conf(5) for full documentation.
# The DSHELL variable specifies the default login shell on your
# system.
DSHELL=/bin/bash
# The DHOME variable specifies the directory containing users' home
# directories.
DHOME=/home
# If GROUPHOMES is "yes", then the home directories will be created as
# /home/groupname/user.
GROUPHOMES=no
# If LETTERHOMES is "yes", then the created home directories will have
# an extra directory - the first letter of the user name. For example:
# /home/u/user.
LETTERHOMES=no
# The SKEL variable specifies the directory containing "skeletal" user
# files; in other words, files such as a sample .profile that will be
# copied to the new user's home directory when it is created.
SKEL=/etc/skel
userdel
O comando userdel
é responsalvel pela removoção de um usuário do sistema, sua sintaxe é simples:
# userdel fulano
O comando acima realiza a remoção do usuário do sistema. As linhas correspondentes ao usuário fulano
dos arquivos /etc/passwd
, /etc/shadow
e /etc/group
são removidas. Já o diretório /home/fulano
não é removido. Para realizar a remoção do diretório home é preciso passar o parametro -r
( r de remove) que remove o home e o spool de emails do usuário.
Usado com a opção -r
serve para apagar tambem o diretório pessoal:
$ userdel -r alphabraga
usermod
Podemos bloquear um usuário cvom o parametro -L
:
# usermod -L fulano
newgrp
Como já foi abordado nos topicos acima todo usuário linux possui um grupo padrão e pode fazer parte de outros grupos auxiliares. Sempre que criamos um aquivos o grupo do arquivo será o grupo padrão, veja o exemplo abaixo:
$ touch arquivo-teste
$ ls -la arquivo-teste
-rw-rw-r-- 1 alphabraga alphabraga 0 Jan 24 13:11 teste
Veja que o grupo do arquivo é o grupo padrão do usuario. Para mudar para um dos seus grupos auxiliares basta digitar o comando:
$ newgrp devops
$ touch teste-devops
$ls -la teste-devops
-rw-rw-r-- 1 alphabraga devops 0 Jan 24 13:11 teste-devops
Pronto agora o grupo é o devops. Para voltar ao grupo padão basta utilizar o comando sem parametros:
$ newgrp