Tornando-se super usuário (ou usuário raiz)
Para muitas tarefas no Linux, é necessária autoridade de usuário raiz ou super usuário. O usuário raiz, também chamado de super usuário, é o usuário que é normalmente usado para tarefas administrativas, como configurar o sistema ou instalar software. Use raiz apenas quando for necessário fazer tarefas administrativas; evite usar raiz para o trabalho normal. O usuário raiz pode fazer qualquer coisa, incluindo destruir acidentalmente o sistema, o que geralmente não é algo bom. Usuários normais possuem menos privilégios e o sistema é muito mais protegido contra danos acidentais causados por usuários normais.
A maioria dos aplicativos administrativos que possuem uma interface gráfica agora pede senha de usuário raiz antes de permitir que usuários não raiz acessem a função. Quando é preciso executar comandos em uma janela de terminal como usuário raiz, isso não ajuda nada.
Sua primeira ideia pode ser alternar para outro ID de usuário, fazendo logout do ID atual e fazendo login em um novo ID. Mas e se você precisar executar alguns rápidos comandos como outro usuário? O Linux tem uma solução para você: os comandos su (substitute user) e sudo permitem executar temporariamente um ou mais comandos como outro usuário. Isso é geralmente usado para tarefas que exigem acesso do root. De fato, se o usuário conectar remotamente a um sistema usando um programa de terminal como
ssh (ou o muito inseguro telnet), muitas distribuições do Linux impedirão que esse usuário conecte-se como raiz. Essa é uma boa prática de segurança, e nós incentivamos os usuários a não tentar ignorá-la. Em vez disso, deve-se conectar como usuário não privilegiado e em seguida usar o comando su ou sudo para fazer o trabalho necessário com a autoridade de usuário raiz.
Para resumir, há duas maneiras principais de executar um comando arbitrário com autoridade de usuário raiz.
- Use o comando
su, geralmente com a opção-para se tornar usuário raiz. - Use o comando
sudopara executar um único comando com autoridade de usuário raiz.
Em sistemas como Fedora ou OpenSUSE, ambos os métodos estão disponíveis, mas usar su talvez seja mais comum. Em sistemas baseados em Debian, como Ubuntu, o modelo de segurança não permite login do usuário raiz, portanto não é possível fazer login como raiz ou usar su para se tornar usuário raiz, por isso é preciso usar sudo.
Imagine que você esteja conectado e olhando para uma janela de terminal e que você não é o usuário raiz, mas precisa executar um comando, como fdisk, que exige autoridade de usuário raiz. Você alterna para raiz usando o comando su sozinho, ou, o que é mais comum, inclui a opção -.
O comando su sem a opção - apenas faz com que o usuário se torne raiz, mas não altera as variáveis de ambiente, incluindo o caminho. A opção -, que pode também ser digitada como -l ou -login
se você gostar de digitar letras extras, permite que os arquivos de inicialização de login do usuário substituto sejam lidos, assim definindo coisas como o caminho, ambiente e prompt para aqueles do usuário de destino. Lista 2 mostra exemplos dessas duas formas em nosso sistema Fedora. Usamos o comando pwd (print working directory) para mostrar o diretório de trabalho atual em cada caso. Observe como o prompt muda. Se você quiser entender melhor como customizar seus prompts ou por que os prompts aparecem dessa forma, confira a dica "Mágica do Prompt" no developerWorks.
Lista 2. Alternando para o usuário raiz
[ian@echidna ~]$ su Password: [root@echidna ian]# pwd /home/ian [root@echidna ian]# su - [root@echidna ~]# pwd /root |
Você perceberá, sem surpresa, que foi preciso fornecer uma senha para alternar para o usuário raiz. Quando tiver autoridade de raiz, é possível usar su ou su -
para alternar para outro usuário ou para alternar para raiz com a opção de login. Para alternar para um usuário não raiz, basta incluir o ID. Como antes, a opção - pode ser usada ou não, de acordo com as necessidades. Por exemplo:
su - db2inst1
Para retornar ao ID anterior, pressione Ctrl-d
ou digite exit e pressione Enter se estiver usando a bash shell, que é o padrão na maioria dos sistemas Linux.
Agora que aprendemos a usar suvamos colocá-lo em prática com o comando fdisk.
Lista 3. Executando o comando fdisk com su
[ian@echidna ~]$ fdisk /dev/sda Unable to open /dev/sda [ian@echidna ~]$ su - Password: [root@echidna ~]# fdisk /dev/sda Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help): q [root@echidna ~]# exit logout [ian@echidna ~]$ |
Como o comando su, o comando sudo permite executar comandos com a autoridade de outro usuário. Os comandos que um usuário ou classe de usuário específicos podem executar são listados no arquivo /etc/sudoers. Ao contrário do comando su, não é preciso saber a senha do raiz, ou de outro usuário, embora seja preciso fornecer a senha do usuário que está executando o comando. O arquivo /etc/sudoers é mantido pelo usuário raiz e pode ser editado com o comando visudo.
Geralmente, para executar vários comandos sudo em sucessão rápida, não é preciso inserir novamente a senha para cada um. Uma alternativa é executar sudo com a opção -s, que executa um shell para o usuário a partir a qual é possível executar vários comandos como o usuário de destino antes de fechar o shell. Lista 4 demonstra ambos os métodos.
Lista 4. Usando o comando sudo no Ubuntu
ian@pinguino:~$ fdisk /dev/sda
Unable to open /dev/sda
ian@pinguino:~$ sudo fdisk /dev/sda
[sudo] password for ian:
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): p
Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x54085408
Device Boot Start End Blocks Id System
/dev/sda1 * 1 2611 20972826 7 HPFS/NTFS
/dev/sda2 2612 2624 104422+ 83 Linux
/dev/sda3 2625 14593 96140962 5 Extended
/dev/sda5 2625 2689 522081 82 Linux swap / Solaris
/dev/sda6 2690 5180 20008926 83 Linux
/dev/sda7 5181 9341 33423201 83 Linux
/dev/sda8 9342 14593 42186658+ 83 Linux
Command (m for help): q
ian@pinguino:~$ sudo -s
root@pinguino:~# fdisk /dev/sda
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): q
root@pinguino:~# exit
ian@pinguino:~$ |
Se o usuário não estiver autorizado no arquivo sudoers, ele receberá uma mensagem de erro semelhante à da Lista 5.
Lista 5. Tentando usar sudo sem autoridade
[ian@echidna ~]$ sudo fdisk /dev/sda [sudo] password for ian: ian is not in the sudoers file. This incident will be reported. |
