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
tclark@debian:~$ 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
tclark@debian:~$ whoami
tclark
tclark@debian:~$ 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
tclark@debian:~$ id
tclark@debian:~$ uid=503(tclark) gid=504(tclark) groups=504(tclark),506(authors)
tclark@debian:~$ newgrp authors
tclark@debian:~$ id
tclark@debian:~$ uid=503(tclark) gid=506(authors) groups=504(tclark),506(authors)
tclark@debian:~$ newgrp
tclark@debian:~$ id
tclark@debian:~$ 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
tclark@debian:~$ 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
root@debian:~$ 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
root@debian:~$ 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
tclark@debian:~$ chomod 764 /var/www/brave_new
tclark@debian:~$ 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"):
tclark@debian:~$ chomod 1764 /var/www/brave_new
tclark@debian:~$ 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
tclark@debian:~$ 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
tclark@debian:~$ groups
www-data
tclark@debian:~$ groups daemon
daemon games-www system
tclark@debian:~$ egrep -i "^www" /etc/group
www-data:x:33:daemon,tclark
"^www" grupos iniciados (^) pelas letras www
tclark@debian:~$ 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
tclark@debian:~$ w
10:25:28 up 20 days, 11:00, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ 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}'
tclark@debian:~$ 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
tclark@debian:~$ 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