2008-01-16

Diferenças e semelhanças entre su e sudo

No Linux existe o conceito de super-utilizador que normalmente é o root, que tem permissões absolutas sobre todos os ficheiros do sistema, podendo aceder e modificar qualquer deles à descrição.

Com este "poder" vem também a responsabilidade de saber o que se está a fazer, pois executar um comando fora do sítio ou com erros de digitação pode ser fatal (para o sistema, claro).

Mandam então as boas regras de comportamento que se executem as tarefas do dia-a-dia como um utilizador "normal" ou "não-privilegiado", para que se minimize os efeitos de erros e operações mais mal sucedidas. No entanto, há por vezes a necessidade de executar um comando ou editar um ficheiro como root, especialmente tratando-se de tarefas de administração do sistema ou configurações de programas (e.g., X, servidores de mail).

Para este propósito existe o comando 'sudo'. Este comando permite a utilizador regular executar um programa como root. Os utilzadores que estão autorizados a correr o sudo estão designados no ficheiro "/etc/sudoers" onde também se encontram os programas que esses utilizadores podem correr bem como algumas opções de auditoria e registo de comandos executados.

Por exemplo, para editar o ficheiro /etc/X11/xorg.conf (configuração do X11), basta fazer :

sudo vi /etc/X11/xorg.conf

e assim podemos editar este ficheiro como se fôssemos root.

Um outro comando, muitas vezes confundido com 'sudo' é o 'su'. Ao contrário de algumas opiniões, o su não serve apenas para executar comandos como root ou para passar a ser root. De facto, este comando serve para abrir uma consola (ou shell) como outro utilizador. o nome 'su' vem de 'substitute user' e não de 'super user'. É um comando muitas vezes usado pelo root para tomar a identidade de um determinado utilizador do sistema. Se for executado sem especificar um utilizador, assume que queremos tomar a identidade de root.

Por exemplo, supondo que o root da máquina queria assumir a identidade do utilizador "postgres", bastava fazer:

su postgres

na consola.

No fundo, sudo apenas nos permite executar um comando de cada vez, enquanto que su nos fornece um completo ambiente de emulação de outro utilizador.
Ambos os comandos estão disponíveis nas distribuições Linux mais comuns.

Como de costume, mais informações podem ser obtidas através da leitura dos respectivos manuais:

man sudo

man su

Até breve !

5 comentários:

Anónimo disse...

Sempre pensei que su significava super user.

Congrats pelas dicas. :)

Anónimo disse...

Só uma achega: o sudo não limita a um comando. Aliás, a utilização habitual que faço é "sudo bash", que me abre uma shell com privilégios de root.

Cumprimentos,

Pedro Ribeiro disse...

@mn:

Ao fazer "sudo bash" estás a executar apenas um comando !!

Anónimo disse...

Bom, tu dizes:

"No fundo, sudo apenas nos permite executar um comando de cada vez, enquanto que su nos fornece um completo ambiente de emulação de outro utilizador."

O meu reparo é que fazeres "sudo bash" abre-te uma shell como root, o que será quase exactamente igual a fazeres "su -". Existem diferenças de pormenor, não relevantes para a discussão.

Aliás, neste caso (correr comandos como root), é muito mais útil o "sudo", na medida em que podes determinar quais os utilizadores autorizados e não é necessário partilhar com eles as passwords de root. Daí ser muito utilizado no Ubuntu, por exemplo. Já o "su" será mais utilizado para alternar entre utilizadores.

Pedro Ribeiro disse...

@mn:

No fundo, podemos quase dizer que "sudo bash" é uma forma algo semelhante a "su", ressalvando essas diferenças de pormenor...

No entanto, essa não é a forma mais usada do "sudo". Como afirmas, e com razão, o sudo é óptimo para executar comandos como outros users, com um grau de controle das permissões bem superior ao "su".