Administrando usuários do sistema |
Em um sistema multi-usuário, é necessário existir mecanismos para proteger os usuários, de forma que seus arquivos privativos fiquem seguros, inacessíveis aos outros. Outro aspecto é em relação aos recursos do sistema reservados: não deve ser possível a um usuário criar arquivos que ocupem todo o espaço do disco, por exemplo, e assim, indiretamente, proibir todos os outros usuários de salvarem seus próprios arquivos. Atingimos esse objetivo criando contas, que representam todos os recursos e informações pertencentes a um determinado usuário. A origem do nome conta, depende muito da história da computação, quando o espaço em disco e tempo de uso da máquina tinha que ser cobrado de acordo com o seu uso, de foma semelhante a uma conta telefõnica.
A cada usuário é destinado um nome de login e senha, como
já vimos anteriormente, bem como um UID, GID, nome do diretório
home e shell inicial (veja
informação sobre o arquivo /etc/passwd
).
Maiores informações podem ser obtidas com o comando
man 5 passwd
.
Os números UID e GID não importam muito quando os usuários são todos locais, mas tornam-se restritivos quando o mesmo usuário tem contas separadas em várias máquinas interligadas via rede. Neste caso, devemos usar um sistema como o NIS [23].
Para trocar o shell de login do usuário já vimos o comando
chsh
. Para trocar o nome completo, e outras
informações (que podem ser obtidas via rede com o finger), como
o seu endereço, telefones do escritório e de casa, podemos usar
o comando chfn
(abreviatura de change finger),
finalmente para trocar sua senha, o comando passwd
.
O usuário pode pertencer a vários grupos, para isso bastando o seu nome (login) estar presente no arquivo /etc/group. Este arquivo tem o seguinte formato:
nome_do_grupo:passwd:GID:usuário1,usuário2,...
onde o último argumento é uma lista dos nomes de login dos
usuários separados por vírgulas.
Para mudar de grupo, um usuário pode executar newgrp <grupo
novo>
e retornar a sua situação original com
exit
. Para verificar o GID corrente (bem como o nome do grupo e
outras informaçóes), usamos id
.
Etapas na criação de um usuário | |
|
Existem programas que automatizam todas essas etapas, como
adduser e useradd . Cada distribuição
Linux tem alguns procedimentos particulares que devem ser seguidos. As etapas
ao lado são apenas um guia.
Existe também um pacote chamado "shadow suite" que
é um conjunto de utilitários para usar shadow
passwords, que essencialmente retira as senhas (mesmo criptografadas) do
arquivo |
Sistemas com o shadow password instalados especificam uma data limite para as senhas, por usuário. Dessa maneira, o usuário é obrigado a mudar a sua senha ou perderá o acesso ã sua conta, como medida de segurança contra crackers.[24] O arquivo /etc/shadow tem um formato já familiar para nós, com vários campos eparados por ":", com a seguinte forma:
nome:senha criptografada:data da última
mudança:mínimo dias:máximo dias:dias de aviso:dias
inatividade:data limite
onde o "máximo dias" e "mínimo dias" representam quando o usuário é permitido mudar a senha; "dias de aviso" é o número de dias com antecedência ao limite final (para a conta ser desativada) que o usuário será avisado a mudar a senha. A senha nesse arquivo fica igualmente criptografada, só que neste caso, o campo de senha do arquivo /etc/passw passa a não conter esta senha.
Quando o usuário efetua o seu login, o arquivo
/etc/profile
é carregado. Este arquivo contém
definição de variáveis para o shell, comandos para
configurar aspectos da sessão do usuário, programas como o
fortune, para enviar uma "frase do dia" ao usuário, etc. Se existir o
arquivo ~/.bash_profile
(no diretório home deste
usuário), este é carregado em seguida, com as
configurações preferidas deste usuários particular. Se
não existir, o bash procura por ~/.bash_login
e finalmente
por ~/.profile
, nessa ordem, carregando o primeiro encontrado. Um
destes arquivos usualmente é colocado no diretório
/etc/skel
, para servir de modelo na abertura de conta dos
usuários do sistema.
Se quisermos que todos os usuários do nosso sistema usem o
joe
, por exemplo, colocaremos a seguinte linha no arquivo , antes
de criar os usuários (depois, somente editando cada arquivo
~/.bash_profile
manualmente, ou através de um script)
:
export EDITOR=joe
Outro tipo de serviço que podemos prestar aos nossos susário,
é definir alguns aliases, comandos que são expandidos pelo
shell, de forma a simplificar o uso do embaralhado de chaves
(opções) que existem em muitos comandos. Por exemplo, o
comando ls
mostra somente os nomes dos arquivos, multi-colunado,
preto-e-branco, se executado sem nenhuma chave. Entretanto o comando
ls --8bit --color=tty -F -b -T 0
,
apresenta um diretório de forma bem mais agradável, colorido,
também multi-colunado, com uma tabulação melhor (pelo uso
de espaços), com os caracteres "invisíveis" transformados numa
forma visível, com um caracter especial indicando o tipo de arquivo.
Entretanto, dá para se notar que o usuário jamais
desejará ficar digitando todas essas opções a cada vez
que for listar um diretório. A forma usual de se fazer isto é
criar uma variáel (digamos LS_OPTIONS) com o conteúdo dessas
chaves, literalmente; depois criar um alias com o comando
alias ls='/bin/ls $LS_OPTIONS'
, que é semelhante
ao export de variáeis que já vimos no shell. Colocando estes
dois comandos no .profile (global) ou no .bash_profile (local de cada
usuário), teremos o efeito desejado. O conteúdo exato a ser
adicionado é:
export LS_OPTIONS=--8bit --color=tty -F -b -T 0 alias ls='/bin/ls $LS_OPTIONS'
ulimit | umask | biff | mesg |
mais usado na forma ulimit 0 para evitar a criação
de coredump files, arquivos (de nome core ) que salvam
uma imagem da memória quando acontece uma falha, devido a um
bug no programa.
|
umask 022 define a máscara de criação de
arquivos default. O número 022 (octal) determina acesso
"rx" para usuários do mesmo grupo e outros, e acesso
"rwx" para o próprio usuário.
|
biff y especifica que o usuário seja notificado quando
chegar algum mail para ele. Posteriormente, esse usuário pode fazer
biff n para desabilitar esse comportamento.
|
semelhante ao biff (ao lado), controla se mensagens de outros
usuários (em tempo real) podem ser recebidas. Normalmente se usa
mesg y .
|
Arquivos criados por um determinado usuário retêm o seu nome e
grupo, e os valores dos flags (rwxrwxrwx
) definidos pelo
último comando umask executado antes de criar o arquivo. Tudo isso pode
ser controlado com o nosso velho amigo Midnight Commander (mc), mas existem
situações, como num script, por exemplo, aonde precisamos de uma
maneira rápida de efetuar essas transformações.
Existem comandos para mudar cada um destes atributos dos arquivos:
Vejamos uma rápida sequêcia de comandos copiados de uma sessão (terminal):
~ # ls -l rildo.txt -rw-r--r-- 1 root root 6989 Jan 6 21:59 rildo.txt ~ # chown rildo rildo.txt ~ # ls -l rildo.txt -rw-r--r-- 1 rildo root 6989 Jan 6 21:59 rildo.txt ~ # chgrp users rildo.txt ~ # ls -l rildo.txt -rw-r--r-- 1 rildo users 6989 Jan 6 21:59 rildo.txt ~ # chmod g+w rildo.txt ~ # ls -l rildo.txt -rw-rw-r-- 1 rildo users 6989 Jan 6 21:59 rildo.txt ~ # chmod a+rwx rildo.txt ~ # ls -l rildo.txt -rwxrwxrwx 1 rildo users 6989 Jan 6 21:59 rildo.txt* ~ #
Usamos o ls
para mostrar como está o arquivo entre as
operações. Observe que o prompt está diferente (do
conhecido ~ $
) porque o usuário é o root
(superusuário). Nas 2 primeiras linhas, o arquivo pertence ao root,
grupo root, como podemos ver com a saida do ls
. Logo após
trocamos o usuário dono do arquivo (chwon
) para
rildo
. Continuando, trocamos o grupo. As últimas duas
trocas, com o chmod
, podem ser explicadas de maneira mais simples
com uma figura:
modificando arquivos com o chmod
O formato geral do comando é chmod <flags> <arquivo(s)> onde <flags> está resumido na figura ao lado. Essencialmente, devemos fornecer:
|
Alguns usuários, quando merecem a sua confiança, podem lhe auxiliar nas tarefas administrativas. Para que um usuário tenha acesso aos arquivos protegidos, ele poderia:
root
),
o que pode ser perigoso, pois voce não saberia que fez algo errado.
chmod +s <programa>
). Essa alternativa apresenta
brechas para crackers., e deve ser usada com cuidado. Nem todos os
programas podem ter o setuid ligado, pois podem ser
modificados e fazer qualquer coisa com o sistema. Por exemplo, jamais ligue o
setuid de um script (shell).
sudo
.
As três primeiras possibilidades foram tratadas anteriormente, restando
essa última. Para um usuário executar programas privilegiados,
ele pode se tornar o root, sem a necessidade de conhecer a senha do
superusuário. A diferença é que todos os programas que
ele executar com essa possibilidade, será comunicado ao root, na forma
de um syslog (no arquivo /var/log/messages
)
gerado automaticamente cada vez que um comando é executado com esse
procedimento.
Para executar um programa como root, o usuário iria entrar no sistema com a sua própria senha, e executar o comando privilegiado colocando sudo no início da linha de comando. Após receber uma mensagem de advertência, o usuário poderia prosseguir com o comando. A cada 5 minutos aproximadamente, ele teria que reintroduzir sua senha para executar novamente comandos prefixados com sudo.
O arquivo /etc/sudoers controla que tem acesso, e os programas que estes
usuários estão permitidos de executar (ou a palavra
ALL
) se tudo é permitido. O formato desse arquivo
é bem simples: nome_de_login hostname=comando
onde hostname é o nome da máquina aonde o usuário se
encontra (pode ser que ele esteja via rede). Quando a máquina é
local, usa-se o nome localhost para descrevê-la. O campo
comando
pode ser um ou mais comandos separados por
vírgulas, com o path completo. Podem também serem descritos
aliases para simplificar a gestão de uma quantidade grande de
usuários e comandos. (veja man 8 sudo
para maiores
detalhes)
O superusuário também deverá usar o sistema com cuidado, para não cometer enganos que trariam muita dor de cabeça posteriormente. Uma sugestão é que o administrador do sistema tenha uma conta separada, como usuário normal, e que utilize-se de uma forma similar a esta para se tornar root, só nos momentos necessários (instalação de alguns programas, mas não durante a compilação; tarefas administrativas como criar usuários novos, efetuar recuperação de backups, etc). |
Outra alternativa é utilizar o comando su (sem
argumentos) para se tornar root nos instantes desejados, executando exit para
voltar a ser "um simples mortal". Nesse instante, elê entrará a
senha do root e terá todo o poder de modificar o que quiser no sistema.
Para simular um login completo, incluindo a leitura dos arquivos de
inicialização (~/.bash_profile , etc), o comando
su - é mais adequado.
|