A conta raiz sempre possui UID / GID 0?

50

Em todos os sistemas Linux que eu gerenciei, a conta root possui um GID e um UID igual a 0. Isso é garantido ou é possível que o sistema dê ao root um ID diferente?

Tanaki
fonte
3
O ID 0 tem todos os direitos. O nome real (ou nomes -multiple-) pode ser diferente. Por exemplo, meu servidor tem dois usuários uid 0. Um chamado 'root', um chamado 'toor'.
Hennes

Respostas:

80

Na verdade, existem duas partes na sua pergunta.

A conta do superusuário sempre possui uid / gid 0/0 no Linux?

Sim. Como apontado por Rich Homolka em um comentário , há um código no kernel que verifica explicitamente o uid 0 quando é necessário verificar o usuário root, o que significa que o root sempre tem pelo menos o uid 0.

O nome da conta de usuário com uid 0 é sempre root?

No. root é apenas um nome, listado em / etc / passwd ou em algum outro armazenamento de autenticação. Você também pode ligar para a conta admine o próprio sistema operacional não se importa, mas alguns aplicativos podem não gostar, porque esperam que exista uma conta privilegiada chamada root. Chamar a conta uid 0 em um * nix rooté uma convenção muito forte, mas não é exigida pelo sistema (embora possa ser exigida por determinados softwares do usuário, possivelmente incluindo utilitários de administração do sistema).

É importante notar também que, como fora apontado por Simon Richter , em BSDs lá muitas vezes existe uma segunda uid 0 conta, por convenção chamado toor(que é "raiz" soletrado para trás, e também lexically vem depois root de uma lista ordenada alfabeticamente). Por exemplo, o FreeBSD o utiliza para fornecer ao usuário root uma configuração de shell personalizada, deixando ao usuário root um shell padrão que é garantido que existe na partição raiz do sistema (útil para fins de recuperação).

um CVn
fonte
15
Há código no kernel para verificar a raiz, uid == 0. Sim, é codificado e permanente.
Rich Homolka
11
BSD normalmente tem roote toor, ambos com UID 0.
Simon Richter
@SimonRichter Nesse caso, existe uma conta de superusuário com o nome root; portanto, não há problema, desde que as bibliotecas de armazenamento de autenticação não sejam confundidas com os dois usuários com o mesmo UID (nesse caso, os BSDs não fariam isso maneira, ou as bibliotecas seriam corrigidas).
um CVn 02/08/19
Não há código no kernel que usa UID = 0 como representante da raiz, e lojas que em variáveis nomeadas "root_uid", mas eu não encontrar nada (6 anos mais tarde), que realmente depende do usuário que está sendo chamado "root". Se o UID estiver em / etc / passwd ou não, haverá processos iniciados com UID = 0. :)
dannysauer 06/06
15

1) o administrador é sempre uid == 0. Isso é codificado no kernel. Seria necessário algum código no kernel para mudar isso. Não há muito sentido nisso, então não está feito. Por exemplo, seria inconsistente para outros unixes que compartilham o mesmo NFS, por exemplo.

2) uid 0 não é necessariamente mapeado para raiz. O melhor exemplo é o FreeBSD. Ele tem duas contas uid == 0, a diferença sendo o shell. O root possui shell / bin / sh, que é um shell simples, útil para quando seus discos estão com problemas e você precisa de fsck / usr. O toor usa o tcsh, que é muito mais útil em situações não emergenciais, pois possui coisas como história etc.

Outro exemplo mais pessoal; um emprego que eu tinha, onde eles tinham uma conta equivalente (ou seja, uid = 0) no NIS. A senha, em branco! Porque o novo sysadmin não conseguia se lembrar da senha root nas máquinas. Eu gritei sobre isso por razões óbvias (as senhas do NIS, por definição, não podem esconder o vazio). Eu não estava feliz com esta conta.

E realmente não é o sistema que fornece o uid 0 como root, é você. Você pode mudar isso usando arquivos passwd ou outros diretórios de nomenclatura (NIS, ldap), mas não está compilado. Embora você deva ter pelo menos uma conta uid 0 em / etc / passwd, pois você pode não ter rede quando realmente precisa dela .

Portanto, root é sempre uid 0, mas uid 0 nem sempre é necessariamente root.

Rich Homolka
fonte
11
Oof, a dor de escolher apenas uma resposta aceita ...
Tanaki
5
@Tanaki Geralmente, "aceite" a resposta que mais o ajudou a responder à sua pergunta e vote todas as respostas que achou úteis. Não há nada que diga que você precisa aceitar a resposta mais votada ou a primeira escrita.
um CVn 02/08/19
1

Bem, para sistemas que usam o servidor nonStop, o ROOT_UID não é 0, mas 65535.

Usuários e grupos do OSS O ambiente OSS não fornece nomes de usuário e IDs de usuário padrão comuns do UNIX, a menos que eles sejam criados explicitamente por um administrador do site. No entanto, nomes de usuário e IDs de usuário equivalentes existem. Por exemplo, os privilégios normalmente associados à raiz do nome de usuário UNIX e ao ID do usuário 0 existem para o ID do usuário OSS (UID) de 65535 (o super ID), que é o usuário SUPER.SUPER e seus aliases.

Consulte https://h20195.www2.hpe.com/V2/GetPDF.aspx/4AA4-6316ENW.pdf

No coreutils, você pode encontrar o arquivo de cabeçalho root-uid.h:

/* The user ID that always has appropriate privileges in the POSIX sense.

   Copyright 2012-2016 Free Software Foundation, Inc.

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.

   Written by Paul Eggert.  */

#ifndef ROOT_UID_H_
#define ROOT_UID_H_

/* The user ID that always has appropriate privileges in the POSIX sense.  */
#ifdef __TANDEM
# define ROOT_UID 65535
#else
# define ROOT_UID 0
#endif

#endif
Nuxwin
fonte