Em relação ao bit "Set-User-ID" citado anteriormente de passagem (tema de casa para quem tiver interesse), caso der o comando abaixo:
# chmod us arquivo.txt
ativa o bit SUID e faz com que qualquer um que tente acessar esse arquivo o fará como sendo o proprietário do arquivo.
E se der o comando abaixo:
# chmod a=rw arquivo.txt
dará permissão de leitura e escrita para todos ao arquivo.txt (a de all, todos em Português).
Testando algumas coisas
No diretório root crie um diretório:
# mkdir teste
e dê um ls -l
# ls -l teste
total 0
Entre no teste:
# cd teste
Crie um arquivo dentro do diretório teste:
# vim teste1
Usei o vim, use teu editor de texto preferido.
Digite qualquer coisa dentro do arquivo. Salve e saia.
Volte ao root:
# cd
Dê um ls -l:
# ls -l teste
total 4
-rw-r--r-- 1 root root 6 abr 15 20:50 teste1
E vemos que o arquivo teste1 foi criado com as permissões padrões do umask para arquivos txt.
Vamos criar um diretório dentro de teste:
# cd teste
# mkdir teste2
Entrando no diretório teste2:
# cd /teste/teste2
Vamos criar um arquivo dentro de teste2:
# vim teste3
Digite qualquer coisa dentro, salve e saia.
Volte ao root:
# cd
Dê um ls -l no diretório teste:
# ls -l teste
total 8
-rw-r--rr-- 1 root root 6 abr 15 20:50 teste1
drwxr-xr-x 2 root root 4096 abr 15 20:58 teste2
O comando não exibiu o arquivo dentro de teste2 porque não estamos no diretório teste2.
Percebam que as permissões padrões criadas para o diretório teste2 são diferentes das permissões do arquivo teste1, isso acontece porque o
Linux cria permissões padrões diferentes para diretórios e arquivos.
Os diretórios, dentro da estrutura Linux, recebem umas permissões padrões e os arquivos outras, dependendo se o arquivo é texto ou binário.
A umask (user mask, máscara do usuário, grosso modo) é somente um padrão que pode ser alterado pelo root.
Um diretório tem permissão de execução para que se possa entrar nele. Além disso, as permissões de um diretório tem precedência sobre as dos arquivos que ele contém.
Caso você alterar as permissões do diretório teste2 sem o parâmetro -R (recursivamente), as permissões do arquivo teste3 permanecerão as mesmas.
Caso você der um chmod 0 teste2:
# chmod 0 teste2
verá que o diretório teste2 ficará sem permissão nenhuma, mas o arquivo dentro continuará com as permissões anteriormente definidas.
Mas vamos entender mais um pouco.
# ls -l
-rw-r--rr-- 1 root root 6 abr 15 20:50 teste1
d--------- 2 root root 4096 abr 15 20:58 teste2
Agora vamos dar um:
# ls -l teste2
A saída será:
total 4
-rw-r--r-- 1 root root 6 abr 15 20:50 teste3
Isso acontece por que o comando "ls -l teste2" mostra somente as permissões do que está dentro do diretório teste2.
Para vermos as permissões de teste2 devemos digitar o comando ls -l sem parâmetros:
# ls -l
-rw-r--rr-- 1 root root 6 abr 15 20:50 teste1
d--------- 2 root root 4096 abr 15 20:58 teste2
Também temos o arquivo /etc/sudoers (man sudoers) que em sistemas Debian e derivados, além de alguns outros não derivados do Debian, é o arquivo que determina os privilégios de sudo.
A man page sudoers (Manual do sudoers) descreve também o grupo wheel.
Em sistemas Debian e derivados o grupo é chamado de sudo e em outros sistemas como Red Hat e derivados o grupo é chamado de wheel.
No arquivo /etc/sudoers do Debian, por exemplo, sequer toca no nome da patota do wheel.
Quando você usa sudo, su, etc, na realidade você está quase como root.
Para estar como root mesmo - o todo poderoso superusuário com plenos poderes de super-vaca - você precisa logar como root na inicialização do sistema. Porém, isto não é aconselhável e nem é necessário.
Entendendo um pouco as linhas do /etc/sudoers:
1. ALL=(ALL:ALL) ALL: O primeiro ALL representa todos os hosts, o segundo ALL indica todos os usuários e o terceiro ALL indica todos os grupos. O último ALL representa todos os comandos. Dar estes privilégios a um usuário o coloca no grupo sudo e o mesmo não precisa mais digitar a senha antes de um comando específico com sudo.
E se não estiver na patota do sudo dará a mensagem: lebowski não está no arquivo sudoers.
2. ALL=(ALL) ALL: O primeiro ALL representa todos os hosts, o segundo ALL indica todos os usuários, como não tem o terceiro ALL o usuário colocado com estes privilégios não poderá executar comandos como outros grupos. O último ALL representa todos os comandos.
Para abrir o arquivo /etc/sudoers com o editor de texto padrão do sistema execute o comando:
sudo visudo
senão use o teu editor preferido:
# vim /etc/sudoers
Podes colocar o seguinte para teu usuário:
ALL=(ALL:ALL) NOPASSWD: ALL
Salve e saia.
Não precisará mais digitar senha com sudo, exemplo:
sudo apt-get update
ou qualquer outro comando que precise de privilégios root não pedirá senha nunca.
Curiosidade importante
No Debian e derivados se você digitar como usuário su ou su - verá a diferença no terminal:
su
digitando a senha mudará para:
#
As inicias "su" em si significam "Substitute User", substitui o ID do usuário e do grupo, ou seja, você entra temporariamente nessa condição.
su sem parâmetro mudará para o usuário em que está (no caso acima estava em lebowski). É a mesma coisa que digitar:
su lebowski
Para mudar de usuário:
su postgres
su usuario
etc
A senha que pedirá é a senha do usuário, não é a senha de root ou do seu usuário, no caso, lebowski.
Caso der falha de autenticação provavelmente é por que você não cadastrou senha para o usuário, ele só foi criado, mas não tem senha.
sudo passwd usuario
e digite a senha do seu usuário para logar e depois digite as duas senhas para o usuário.
Para mudar para outro usuário com ou sem poderes de root depende em qual grupo o usuário foi colocado.
Caso estiver no grupo sudo terá privilégios de root.
Basta digitar su seguido do nome do usuário que se quer.
O su - (com hífen) sem parâmetro entra no root.
Pode utilizar também o comando usermod para inserir usuários, mudar diretórios, etc.
Mudando o nome lebowski para grande_lebowski:
# usermod -l lebowski_grande_lebowski
Para trancar uma conta:
# usermod -L lebowski
Utilize a opção -U para destrancar:
# usermod -U lebowski
Para criar um usuário e um diretório /home para esse novo usuário use a opção -m do comando
# useradd -m grande_lebowski