Guia Completo: Permissões e Comandos

Motivo: Posto este material, para servir de apoio a algumas pessoas que me pediram, ao invés de ficar enviando por e-mail, posto aqui, pois pode ajudar mais, caso alguém esteja procurando. 
Estas também são as atividades propostas nos exercícios e portfolios do curso "Sistemas Operacionais I"
Claro que, isso abaixo, é fácil de encontrar em qualquer fórum de qualquer distro, além do guia "Foca Linux", e 90% dos livros "meia-boca" possuem este material em suas primeiras páginas.
Neste texto, listo alguns comandos básicos no bash, e trato sobre as permissões básicas. 
Lembre-se existe permissões especiais, como SUID e SGID, Sticky, além de atributos estendidos, como immutable e append, estes não trato no texto, mas podemos abordar mais a frente.





COMANDOS
Um comando é uma palavra especial que representa uma ou mais ações.
Ao digitar um comando, ele pode ser seguido ou não por opções/argumentos, que são caracteres ou strings de texto ou números,
precedidos por 1 ou 2 hífens ( - / - - ).
Os comandos podem ser internos (a um determinado Shell, não ao S.O.), ou externos (programas utilitários armazenados em disco).

Conhecendo ou não o DOS (objeto de comparação, em relação ao shell do Linux), você poderá estranhar bastante os comandos do Linux ou simplesmente não ter dificuldade alguma. Tudo depende de você. Essencialmente, trabalhar com o Linux é uma questão de prática e logo você ficará bem familiarizado.




Principais versões de Shell

Bourne Shell (sh)
Desenvolvido por Stephen Bourne da Bell Labs (da AT&T onde também foi desenvolvido o Unix), este foi durante muitos anos o Shell default do sistema operacional Unix.
É também chamado de Standard Shell por ter sido durante vários anos o único e até hoje é o mais utilizado até porque ele foi portado para todos os ambientes Unix e distros Linux.

Korn Shell (ksh)
Desenvolvido por David Korn, também da Bell Labs, é um superset do sh, isto é, possui todas as facilidades do sh e a elas agregou muitas outras. A compatibilidade total com o sh vem trazendo muitos usuários e programadores de Shell para este ambiente.

Boune Again Shell (bash)
Este é o Shell mais moderno e cujo número de adeptos mais cresce em todo o mundo, seja por ser o Shell default do Linux, seu sistema operacional hospedeiro, seja por sua grande diversidade de comandos, que incorpora inclusive diversos instruções características do C Shell.


C Shell (csh)

Desenvolvido por Bill Joy da Berkley University é o Shell mais utilizado em ambientes *BSD e Xenix. A estruturação de seus comandos é bem similar à da linguagem C. Seu grande pecado foi ignorar a compatibilidade com o sh, partindo por um caminho próprio.

 

[[email protected] /root]#
O Linux usa uma estrutura diferente de organização em seu sistema de arquivos.
Por isso, em vez da sua pasta ser c:\arquivos\pasta\arquivo.txt, simplesmente no Linux, pode ser /home/pasta/arquivo.txt. Para você entender melhor, vamos analisar o prompt do Linux:
[[email protected] /root]#
usuário - diretório / local (PC ou rede) - modo usuário
 
Usuário: No Linux, cada pessoa precisa ter uma conta de usuário. Uma conta de usuário indica um nome e senha que devem ser utilizados para se conectar no sistema. Se o nome escolhido por você for, por exemplo, Fulano, em vez de root aparecerá fulano no lugar.
Usuário "root" (ou super-usuário): é quem tem acesso irrestrito ao sistema. Quando você se conecta como usuário root, você poderá fazer qualquer operação no Linux, como alterações de configuração do sistema, apagar ou modificar arquivos importantes, etc. Por isso, se conectar como root é muito arriscado, já que você pode causar algum dano sem querer. Tendo isso em mente, nunca se conecte como root a não ser que seja mesmo necessário. Para usar o Linux no dia-a-dia, conecte-se com uma conta de usuário comum, assim não haverá risco de danos. Também não se esqueça de guardar muito bem a senha do root, pois se alguém descobrir, poderá destruir o sistema.
localhost /root : é o local (diretório) onde você está no momento (/root é padrão e equivale a C:\ no DOS). 
 
Modo usuário: indica quem está usando a máquina, se um usuário comum ou o super-usuário. Veja:
# - modo super-usuário
$ - modo usuário


ALGUNS COMANDOS BÁSICOS:
Hoje há diversos livros, guias de consulta, impressos ou digitais, com uma quantidade gigantesca de comandos e referências/atributos. Não se preocupe, NINGUÉM decora tudo, sempre necessita de uma ajudazinha uma vez ou outra. Claramente, com o passar do tempo e frequência de uso/estudos, os comandos fluirão naturalmente...

Man, help, info ---- exibe informações sobre comandos, programas, etc
(qualquer comando) --help  ---- mostra o HELP (arquivo de ajuda) do comando que você digitou;
ls ---- lista os arquivos e diretórios da pasta (DIR no DOS);
clear ---- limpa a tela (CLS no DOS);
cd /xxx/zzz : entra no diretório zzz dentro do xxx
cd ---- vai direto para o diretório raiz do usuário conectado;
\ ---- abre uma linha de comando "livre" , onde você pode digitar um comando extenso (digite q e clique em enter para sair);
pwd ---- mostra o diretório inteiro que você está;
cat ---- igual ao TYPE no DOS;
df ---- Mostra as partições usadas ou livres do HD;
|more ---- lista o arquivo com pausa de linha em linha (exemplo: CAT leiame |more)
|lpr ---- imprime o arquivo listado;
free ---- mostra a memória do computador (MEM no DOS);
shutdown ---- desliga o computador:
shutdown -r now  ---- reinicia o computador;
shutdown -h now  ---- desliga o computador (só desligue quando aparecer escrito "system halted" ou algo equivalente);
OBS.: O NOW pode ser mudado. Por exemplo: shutdown -r +10 e o sistema irá reiniciar daqui a 10 minutos).
Reboot ---- reinicia o sistema instantaneamente (pouco recomendável, preferível shutdown -r now). Use somente em emergências;
startx ---- inicia o X-Windows (interface gráfica) do Linux;
kde ---- Inicia a Interface gráfica K Desktop Enviroment;
mkdir ---- cria um diretório (MD no DOS);
rmdir ---- destrói um diretório VAZIO (RD no DOS);
rm ---- apaga um arquivo (DEL no DOS);
rm –r ---- apaga um diretório;
who ---- mostra quem está usando a máquina;
wc ---- conta a quantidade de:
wc -c arquivo ---- quantidade de bytes
wc -w arquivo ---- quantidade de palavras
wc -l arquivo ---- quantidade de linhas;
date ---- mostra data e hora;
telnet ---- inicia a TELNET;
m ---- abre o MINICOM e permite configurar o modem;
type ---- explica um determinado arquivo do sistema;
file ---- descreve um determinado arquivo;
find / - name xxx  ---- procura arquivo "xxx";
useradd nome_do_novo_usuário ---- cria uma nova conta usuário;
passwd nome_do_usuário ---- cria ou modifica a senha do usuário;
userdel -r nome_do_usuário ---- apaga um usuário;
su ---- passa para o superusuário (perceba que no prompt irá mudar o $ pelo #);
sndconfig ---- permite configurar a placa de som;
TAR ---- arquivo para criar Backups:
TAR –c ---- cria
TAR –x ---- restaura
TAR –v ---- lista cada arquivoTAR –t: lista os arquivos de backups;
write ---- escreve mensagens para outro usuário em rede
linuxconf ---- configuração do Linux;
alias ---- possibilita a criação de comandos simples;
& ---- coloca o comando desejado em background, ou seja, trabalha enquanto você faz outra coisa no computador;
history ---- mostra os comandos que o usuário já digitou;
lpr ---- imprime um arquivo (exemplo: lpr arquivo);
lpq ---- mostra o status da fila de impressão;
lprm ---- remove trabalhos da fila de impressão;
mtools ---- permite o uso de ferramentas compatíveis com DOS. Após digitar o comando, você verá que    todo comando do DOS terá um M na frente. Isso é normal.
ls ---- lista arquivos de um diretório (pasta)
rm ---- remove diretórios
cp ---- copia arquivos
mv ---- move arquivos
mv ---- renomeia arquivos
cat, more, tail ---- mostra conteúdo de um arquivo
pwd ---- mostra o diretório corrente
mkdir ---- cria pasta
rmdir ---- apaga pasta
cd ---- navega entre os diretórios
find ---- localiza arquivos
who ---- mostra os usuários conectados e seus respectivos terminais
whoami ---- exibe usuário atual
adduser ---- adiciona usuário ao sistema
userdel ---- remove usuários do sistema
passwd ---- altera a senha
chmod ---- altera permissões
mount, unmount ---- “habilita” e “fecha” dispositivos conectados ao computador.
chown ---- altera o proprietário do arquivo
chgrp ---- altera o grupo a qual pertence o arquivo
groupadd ---- cria um novo grupo
usermod ---- altera informações da conta de um usuário
kill ---- finaliza um processo
ps ---- mostra um quadro atual e estático dos processos em execução
top ---- exibe me tempo real os processos sendo executados
su ---- troca de usuário
sudo --- Permite a um usuário autorizado, executar um comando como superusuário (root)
lsmod ---- lista os módulos carregados
insmod ---- carrega / instala um módulo
lsdev ---- lista o hardware instalado e informações de cada dispositivo
lspci ---- exibe informações sobre os barramentos PCI e os dispositivos conectados a eles
lsusb ---- exibe informações sobre os barramentos USB e os dispositivos conectados a eles




PERMISSÕES

As permissões são um dos pontos mais importantes e essenciais nas distribuições linux, desde servidores até desktops domésticos.
Uma permissão aplicada a um documento ou diretório determina o que os usuários do sistemas podem ou não podem fazer, como por exemplo, a leitura desse arquivo, edição e execução.

chmod → Altera as permissões do arquivo
chown → Altera o proprietário do arquivo
chgrp → Altera o grupo a qual pertence o arquivo

r - Read - ler → permite ou não a leitura do arquivo ou abertura do diretório
w - Write - escrever → permite ou não a edição/alteração do arquivo ou gravação em um diretório
x - eXecute - executar → permite ou não a execução de um arquivo
x = 1, w = 2, r = 4

Podemos determinar em um arquivo quais usuários terão acesso a ele e com qual finalidade, como apenas ler ou gravar. 
Cada usuário do sistema possui três conjuntos de permissões para cada arquivo= “r”, “w” e “x”.

Os grupos são categorias (conjunto) de usuários, e eles possuem um grupo distinto de permissões para os arquivos.
Um usuário é dono de um arquivo e tem suas permissões, este usuário pode pertencer a vários grupos, mas estes grupos (outros usuários que também pertencem a este mesmo grupo) possuem permissões diferentes em relação ao arquivo daquele usuário.
Temos então, a possibilidade e necessidade de atribuir permissões diferentes para o dono do arquivo (u), para o grupo (g), para outros usuários (o), ou para todos (a).

Cada arquivo tem um UID (User ID), e um GID (Group ID), que mostra quem é o dono do arquivo, e a qual grupo ele pertence.
Ao definir as permissões, podemos usar letras (rwx), ou usar o formato octal,
que são 8 números (de 0 à 7) que correspondem a permissões especificas cada.
octal   letras   binário
0     - - -     000 → Nenhuma Permissão
1    - -x      001 → executa o arquivo, entra no diretório
2     -w-     010 → apenas grava
3     -wx    011 → grava e executa
4     r- -     100 → apenas lê
5     r- -x    101 → lê e executa o arquivo
6     rw -     110 → lê e grava
7    rwx      111 → permissão total com os arquivos e/ou diretorios


Para alterar as permissões, utilizamos os comandos:

Chown → Altera o proprietário do arquivo
root# chown <nome do novo dono> <nome do arquivo>

chgrp → Altera o grupo a qual pertence o arquivo
root# chgrp <nome do novo grupo> <nome do arquivo>

chmod → Altera as permissões do arquivo
Chmod ugo+rwx <nome do arquivo ou pasta>
Chmod 777 <nome do arquivo ou pasta>

No comando, definimos qual usuário(s) estamos relacionando (através das letras ugoa), quais as permissões (usando a forma octal ou alfabética) e por fim, qual o arquivo ou diretório.
Ainda na linha de comando, adicionamos os simbolos +, - ou =”.
+ --> adiciona as permissões especificadas no conjunto de permissões já existentes do arquivo
- -->  remove as permissões especificadas do conjunto de permissões pertencentes ao arquivo
= --> altera as permissões para as novas que estão sendo definidas.



O sistema operacional Unix (e também Linux) difere de outros ambientes de computação em que não é apenas um sistema multitarefa, mas também é um sistema multi-usuário também.

O que exatamente significa isso?

Isso significa que mais de um usuário pode estar operando o computador ao mesmo tempo.

Enquanto o computador terá apenas um teclado e um monitor, ele ainda pode ser usado por mais de um usuário.
Por exemplo, se o computador estiver conectado a uma rede, ou pela Internet, os usuários remotos podem login via telnet ou ssh (secure shell) e utilizar o computador.
Na verdade, os usuários remotos podem executar aplicativos X e ter a saída gráfica exibida em um computador remoto. O sistema X Windows suporta isso.


A capacidade multi-usuário do Unix não é uma "recente" inovação, mas sim um recurso que está profundamente enraizado na concepção do sistema operacional.
Se você se lembrar o ambiente em que o Unix foi criado, isso faz sentido.
Anos atrás, antes dos computadores eram "pessoais" e eles eram grandes, caros e centralizados.
Um computador com sistema universitário típico consistia de um grande mainframe localizado em algum prédio do campus e os terminais foram localizados por todo o campus, cada um conectado ao computador central de grande porte.
O computador seria suportar muitos usuários ao mesmo tempo.

A fim de tornar esta prática, um método tinha de ser concebido para proteger os usuários uns dos outros.
Afinal, você não pode permitir que as ações de um usuário para travar o computador, nem você poderia permitir que um usuário para interferir com os arquivos pertencentes para outro usuário.



As permissões de arquivo

Linux usa o esquema de permissões mesmo que o Unix.
Cada arquivo e diretório em seu sistema são atribuídos direitos de acesso para o dono do arquivo, os membros de um grupo de usuários relacionados, e todos os outros (o resto..).
Os direitos podem ser atribuídos para ler um arquivo, para gravar um arquivo, e para executar um arquivo (ou seja, executar o arquivo como um programa).


Para ver as configurações de permissão para um arquivo, podemos usar o comando ls -l



Podemos determinar uma série de examinar os resultados deste comando:

  • O arquivo "teste" é propriedade do usuário "eslih", que pode ler e escrever (ou seja, é um arquivo simples, se fosse script ou programa, também poderia ser executado, daí ficaria: rwx) 
  • O arquivo é propriedade do grupo "eslih" (ao criar um usuário, também é criado um grupo com o mesmo nome)
  • Os membros do grupo "eslih" apenas podem ler este arquivo
  • Todo mundo pode ler este arquivo

São 3 conjuntos, cada um possui até 3 letras (rwx) indicando suas permissões.

Vamos tentar um outro exemplo. Vamos olhar para o programa bash, que está localizado no diretório / bin: 


Aqui podemos ver:

  • O arquivo "/ bin / bash" pertence ao "usuário" root
  • O superusuário tem direito a ler, escrever e executar este ficheiro (rwx)
  • O arquivo é propriedade do grupo "root"
  • Os membros do grupo "root" também pode ler e executar este ficheiro (r-x)
  • Todo mundo pode ler e executar este ficheiro (r-x)

No diagrama abaixo, podemos ver como a primeira parte do anúncio é interpretada.
É constituída por um caractere indicando o tipo de arquivo, seguido por três conjuntos de três letras/caracteres que transmitem a leitura, escrita e permissão de execução para o dono, grupo e todos os outros.


chmod
O comando chmod é usado para alterar as permissões de um arquivo ou diretório.
Para usá-lo, você pode especificar as configurações de permissão desejadas e o arquivo ou arquivos que você deseja modificar.
Há duas maneiras para especificar as permissões.

É fácil pensar nas configurações de permissão como uma série de bits (que é como o computador pensa sobre eles). Veja como funciona:

rwx rwx rwx = 111 111 111
rw- rw- rw- = 110 110 110
rwx --- --- = 111 000 000

e assim por diante ...

rwx = 111 em binário = 7
rw- = 110 em binário = 6
r-x = 101 em binário = 5
r-- = 100 em binário = 4
Agora, se você representa cada um dos três conjuntos de permissões (proprietário, grupo e outros) como um único dígito você tem uma maneira muito conveniente de expressar as permissões possíveis cenários.
Por exemplo, se quiséssemos definir o arquivo “teste” para ter permissão de leitura e gravação para o proprietário, mas queria manter o arquivo privado dos outros, teríamos:
chmod 600 teste 


Aqui está uma tabela de números que abrange todas as configurações comuns. Os que começam com "7" são usados com programas (uma vez que permitem a execução) e os restantes são para outros tipos de arquivos. 


Valor
Significado
777
(rwxrwxrwx) Não há restrições nas permissões. Qualquer pessoa pode fazer qualquer coisa. Geralmente não é desejável estabelecer um.
755
(rwxr-xr-x) O dono do arquivo pode ler, escrever e executar o arquivo. Todos os outros podem ler e executar o arquivo. Essa configuração é comum para programas que são utilizados por todos os usuários.
700
(rwx------) O dono do arquivo pode ler, escrever e executar o arquivo. Ninguém mais possui qualquer direito. Essa configuração é útil para programas que somente o proprietário pode usar e deve ser mantida privada de outras pessoas.
666
(rw-rw-rw-) Todos os usuários podem ler e gravar o arquivo.
644
(rw-r--r--) O proprietário pode ler e gravar um arquivo, enquanto todos os outros só podem ler o arquivo. Um cenário comum para arquivos de dados que todos podem ler, mas somente o proprietário pode mudar.
600
(rw-------) O proprietário pode ler e gravar um arquivo. Todos os outros não têm direitos. Um cenário comum para arquivos de dados que o proprietário quer manter privadas.


Lista de permissões
O comando chmod pode também ser usado para controlar as permissões de acesso para diretórios (no mundo DOS/Win diretório=pasta).
Na maioria das formas, o regime de permissões para diretórios funciona da mesma forma como acontece com os arquivos.
No entanto, a permissão de execução é utilizada de uma maneira diferente. Ele fornece controle de acesso ao arquivo de listagem e outras coisas.
Aqui estão algumas configurações úteis para diretórios:


Valor
Significado
777
(rwxrwxrwx) Não há restrições nas permissões. Qualquer um pode listar os arquivos, criar novos arquivos no diretório e apagar arquivos no diretório. Em geral não é uma boa configuração.
755
(rwxr-xr-x) O dono do diretório tem acesso total. Todos os outros podem listar o diretório, mas não podem criar arquivos ou excluí-los. Essa configuração é comum para os diretórios que deseja compartilhar com outros usuários.
700
(rwx------) O dono do diretório tem acesso total. Ninguém mais possui qualquer direito. Essa configuração é útil para as pastas que só o proprietário pode usar e deve ser mantida privada de outras pessoas.


Tornando-se root por um curto tempo

Muitas vezes,
é útil logar como root para executar tarefas de administração de sistema importantes,
mas como você foi avisado
(e não apenas por mim!),
Você não deve ficar logando-se como superusuario.
Felizmente, existe um programa que pode lhe dar acesso temporário ao root.

Este programa é chamado de su (abreviação de superusuário) e pode ser usado nos casos em que você precisa ser o root
para realizar um pequeno número de tarefas, algum comando especifico, etc.
Para se tornar o superusuário basta digitar o comando su, e será solicitado a senha do root:

Pode-se usar apenas o comando “su”

Para logar tanto como root ou outro usuário, pode-se usar o su precedido do nome (login) do usuário que deseja. Ex.: “su root” ou ”su user”

Após executar o comando su, você tem uma nova sessão de shell, digite exit e para voltar a sessão anterior.




Alterando a propriedade do arquivo

Você pode alterar o dono de um arquivo usando o comando chown.

Está aqui um exemplo: suponha que eu queria mudar o dono do arquivo teste do "eslih" para o "root". Eu poderia:

Su
Chown root teste
Ls –l (apenas para conferir....)
exit

 
Observe que, para alterar o proprietário de um arquivo que você deve ser o root. Para fazer isso, nosso exemplo, usei o comando su, então chown executado (chown, nome do novo dono, e nome do arquivo que será alterado) e, finalmente, nós digitamos exit para voltar à nossa sessão anterior.

chown funciona da mesma maneira em diretórios como o em arquivos.

Perceba que alterou o dono, mas o grupo a qual pertence o arquivo continua o mesmo anterior.

Alterando o grupo do arquivo/diretório

A propriedade de grupo de um arquivo ou diretório pode ser alterado com chgrp
Este comando é usado da seguinte forma:

Chgrp novo_grupo arquivo

No exemplo acima, nós mudamos a propriedade de grupo do arquivo “teste” de seu grupo anterior para "root". Você deve ser o dono do arquivo ou do diretório para executar um chgrp.


__________________________________________________________________
=]  Bem, é isso aí, qualquer coisa, veja as "man pages" no linux, ou o Foca Linux.... 
referências: man pages / Guia Foca / LinuxCommand.org

Mais vistos no mês:

As melhores distribuições Linux para 2017

TuxMath - Tux, do Comando da Matemática. Ensino e diversão a crianças.

Teste de Performance de Rede com Iperf

DHCP - Guia Completo

Aula #14 - Os sistemas de arquivos ext2/ext3/ext4

OPNsense - Firewall Open Source

Ophcrack: Descubra todas as senhas do Windows

SSD no linux

Oracle Linux 7.0 Server com Xfce - Instalação e configurações iniciais