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?
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?
Respostas:
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 admin
e 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).
root
e toor
, ambos com UID 0.
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).
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.
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