Linux Home | Usuários e Grupos | Bash BC |

tux

Linux: Usuários e Grupos


Usuários e grupos de trabalho possuem características diferenciadas e o Linux proporciona bons recursos para manter a integridade do sistema (root), mesmo em meio as mais diferentes demandas. O Linux, a exemplo de outros sistemas, possui algumas restrições para sistemas de arquivos "não-nativos".



Num computador geralmente os usuários e grupos estão trabalhando com arquivos e diretórios, então inciemos como uma listagem simples utilizando o comando ls
ls -Sal /path/dir
[email protected]:~$ ls -Sal /var/www
total 20
drwxrwxr--+  4 tclark www-data 4096 May  8  2014 .
drwxr-xr-x  14 root   root     4096 Mar 13  2014 ..
d-rw-r-----  1 root   daemon    144 Mar  2  2012 aat.deny
drwxrwxr--+  4 tclark tclark   4096 May 22  2014 and_more
drwxrw-r--+  4 tclark www-data 4096 Jun  4  2014 brave_new
drwxrwxr--+  4 tclark www-data 4096 May 22  2014 models
-rwxrw-r--+  1 tclark www-data  177 Mar 13  2014 index.htm
-rwxrw-r--+  1 tclark www-data 1024 Mar 14  2013 bullet.jpg


o modificador -Sal organiza, mostra os ocultos e apresenta listagem vertical

com exceção das últimas linhas (index.htm e bullet.jpg) as demais iniciam com d de 
diretório.
alguns diretórios pertencem ao grupo www-data e foram criados pelo usuário tclark
o diretório aat.deny pertece ao grupo daemon criado pelo root e 
o diretório (..) do próprio root.

quando um grupo não é especificado, o grupo é o próprio usuário!
de forma análoga quando um usuário é criado o grupo default é ele mesmo, até que seja 
modificado o grupo default desse usuário.



root


o root aparece misturado aos demais, mostra-se como igual, sua presença é tão rotineira que acaba por se tornar familiar... por estas e outras que ficamos tentados a considera-lo um igual, mas não se engane o root não é um igual!
o root está além, muito além, o root cria e descria, o root não precisa de permissões ele é a permissão...

root possui significados diversos e as mais diversas formas de ser invocado. os seus significados variam de base para estrutura de arquivos até super user. em algumas versões Linux é invocado via login e em outras via comandos como su ou sudo.
diversidade a parte, a idéia básica é que o root seja preservado e para tal só deve ser invocado em momentos específicos... se por um lado tal distanciamento aparenta uma grande restrição, por outro, os usuários se favorecem pela despreocupação ao transitar pelo sistema...



a minha identidade


quem sou eu? Eu sou quem sou, por causa de quem todos nós somos!

dois comandos para descobrir quem tu és:
whoami

id -a
[email protected]:~$ whoami
tclark
[email protected]:~$ id -a
uid=1001(tclark) gid=33(www-data) groups=1001(tclark),45(daemon),33(www-data)

na linha acima observe as 3 categorias (=)
uid = usuário tclark número: 1001
gid = grupo default www-data número: 33
groups = tclark está filiado aos grupos: tclark, daemon e www-data

root useradd: cria um usuário UID
useradd username

root groupadd: cria um grupo GID
groupadd nomedogrupo

root addgroup: adiciona usuario a um grupo
addgroup usuario nomedogrupo
ou
gpasswd -a username groupname

para verificar a quais grupos um usuario pertence
groups username

root useradd: adiciona o usuário a um de vários grupos possíveis
useradd -G groupname username

quando o usuário deseja se logar a um outro grupo a que está filiado
newgrp groupname

para retornar ao grupo original (default)
newgrp
exemplo de ID e NEWGRP

[email protected]:~$ id
[email protected]:~$ uid=503(tclark) gid=504(tclark) groups=504(tclark),506(authors)
[email protected]:~$ newgrp authors
[email protected]:~$ id
[email protected]:~$ uid=503(tclark) gid=506(authors) groups=504(tclark),506(authors)
[email protected]:~$ newgrp
[email protected]:~$ id
[email protected]:~$ uid=503(tclark) gid=504(tclark) groups=504(tclark),506(authors)

observe que o gid mudou de tclark para authors e depois voltou ao que era!

root usermod: muda o grupo default do usuário
usermod -g groupname username
[email protected]:~$ usermod -g www-data tclark



atribuições


diretórios e arquivos são relacionados a um usuário e a um grupo, tal atribuição ocorre no momento da criação do arquivo/diretório. o proprietário/dono do arquivo é o criador e o grupo será o qual ele estiver logado (comando: id). com os comandos abaixo se pode modificar tais atribuições, recursiva/coletiva (-R) ou individual.

root chown: modifica usuário e grupo de um arquivo e/ou diretorio o usuário também pode realizar esse comando, entretanto para os arquivos e diretórios que este usuário não possua permissão o sistema ("o root!!") emitirá um alerta e não realizará a operação!
chown -R username:groupname /path/dir
[email protected]:~$ chown -R tclark:www-data /var/www

o modificador -R acessa os subdiretórios

root chgrp: modifica grupo de um arquivo e/ou diretorio ( -R = dirs e subdirs)
chgrp -R groupname /path/dir
[email protected]:~$ chgrp -R www-data /var/www

o modificador -R acessa os subdiretórios



permissões rwx


cada arquivo ou diretório pertence a um usuário e a um grupo (mesmo que o grupo seja o próprio usuário)
as permissões de leitura(r), escrita(w) e execução(w) podem ser ajustadas de forma individual ou recursiva (-R)
as permissões aparecem em forma de letras (rwx) encadeadas no inicio da listagem
por algum motivo, seja histórico ou seja pela praticiade, a utilização do sistema numérico na representação das permissões é amplamente utilizado.
root ou usuario: chmod ( quando o grupo/usuário tiver tal permissão)
chomod xxx /path/dir
[email protected]:~$ chomod 764 /var/www/brave_new
[email protected]:~$ ls -Sal /var/www/brave_new
drwxrw-r--+  4 tclark www-data 4096 Jun  4  2014 brave_new

obs: chmod aceita -R (subdiretórios)

drwxrw-r-- = brave_new é um diretório
drwxrw-r-- = o usuário tclark com criador/dono, pode: read write execute
drwxrw-r-- = os demais usuários do grupo www-data, podem: read write
drwxrw-r-- = os outros, podem: read
 
sistema numérico: no lugar das 9 letras encadeadas, 3 números realizam a mesma tarefa, 
um para cada posição, respectivamente: dono grupo outros

4 - Indica permissão de leitura   r
2 - Permissão de escrita/gravação w
1 - Permis. execução e listagem   x
0 - Indica sem permissões         -

no exemplo acima: chomod -R 764 /var/www
764 equivale a rwxrw-r--
7 para o dono/criador    7 = 4 + 2 + 1 = rwx
6 para o grupo           6 = 4 + 2 + 0 = rw-
4 para quaisquer outros  4 = 4 + 0 + 0 = r--

"lembrete: o root está acima do proprietario/grupo"
 
números tipicos normalmente decrescem de dono grupo outros ( 777, 764, 664, 540 )
números NÃO tipicos seria inusitado um outro qualquer, um estranho, ter permissões 
maiores que dono/criador! ( 467, 056 )
da mesma forma não há sentido em permitir gravar (2) sem permitir a leitura (4) ( 724, 552,
722, 622 ) 

Sticky Bit - em executaveis mantem uma copia na memoria do programa ( um cache) assim acelera as demais execussoes - em diretorios inibe que outros usuarios manipulem arquivos que nao sejam donos, uma sobre seguranca modo "append only" - se ajusta colocando o numero 1 na frente da permissao (veja a leta "t"): [email protected]:~$ chomod 1764 /var/www/brave_new [email protected]:~$ ls -Sal /var/www/brave_new drwxrw-r--t 4 tclark www-data 4096 Jun 4 2014 brave_new Outras obs 1) na relação entre sistemas operacionais e/ou sistemas de arquivos não-nativos geralmente o "dono" possui permissão de leitura e escrita (rw-r--r--), entretanto nem ele pode executar programas nesse disco/diretorio/"ponto de montagem" ou seja, 777 (rwxrwxrwx) está disponivel para operações entre sistemas operacionais/arquivos! 2) o pacote ACL >> apt-get install acl possui um modo amigavel para gerenciar permissões



listagens



listagem simples de arquivos e diretorios, comando ls
ls -Sal /path/dir
exemplo no início desta página

lista os membros de um determinado grupo
members groupname

lista todos os usuários
cat /etc/passwd

procura um usuário, pode ser parte do nome
egrep -i "^tcla" /etc/passwd
[email protected]:~$ egrep -i "^tcl" /etc/passwd
tclark:x:1001:33:,,,:/home/tclark:/bin/bash

"^tcl" usuários iniciados (^) pelas letras tcl
separador : dois pontos
username : pass masked : user number UID : default group GID : Dados do usuário : 
/path/dir : /default/shell/path

lista todos os grupos
cat /etc/group

procura por grupos
groups 

groups username

egrep -i "^groupname" /etc/group
[email protected]:~$ groups
www-data
[email protected]:~$ groups daemon
daemon games-www system
[email protected]:~$ egrep -i "^www" /etc/group
www-data:x:33:daemon,tclark

"^www" grupos iniciados (^) pelas letras www

[email protected]:~$ egrep -i "www" /etc/group
www-data:x:33:daemon,tclark
games-www:x:38:system

"www" nomes de grupos que contenham www
separador : dois pontos
groupname : pass masked : group GID : list,of,users,comma,separeted

lista limpa de todos os usuários, duas versões
awk -F':' '{ print $1}' /etc/passwd

cat /etc/passwd | cut -d: -f1

lista os usuários e todos os grupos a que o usuário pertence
getent passwd | awk -F: '{print $1}' | while read name; do groups $name; done

lista arquivos pertecentes a um grupo
find /path -group groupname

lista todos os usuários logados
w

who -a

last
[email protected]:~$ w
 10:25:28 up 20 days, 11:00,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
tclark   pts/0    178.15.230.226   10:03    0.00s  0.39s  0.00s w
daemon   pts/1    178.15.230.227   07:24    0.00s  0.37s  0.00s w


lista arquivos pertecentes a um usuário
find /path -user username

listagem dos arquivos e diretórios com as permissões em forma numérica
stat -c "%a %n" /path/dir

stat -c "%a %n" /path/dir/*

ls -Sal /path/dir | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) *2^(8-i));
if(k)printf("%0o ",k);print}'
[email protected]:~$ ls -Sal /var/www/brave_new | awk '{k=0;for(i=0;i<=8;i++)
k+=((substr($1,i+2,1)~/[rwx]/) *2^(8-i));if(k)printf("%0o ",k);print}'
764 drwxrw-r--+  4 tclark www-data 4096 Jun  4  2014 brave_new

[email protected]:~$ stat -c "%a %n" /var/www/brave_new
764 /var/www/brave_new/

a forma numérica das permissões é apresentada no início de cada linha
no comando stat o * lista todo o conteudo