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?
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).
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.
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.
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
Respostas:
Na verdade, existem duas partes na sua pergunta.
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.
No.
root
é apenas um nome, listado em / etc / passwd ou em algum outro armazenamento de autenticação. Você também pode ligar para a contaadmin
e o próprio sistema operacional não se importa, mas alguns aplicativos podem não gostar, porque esperam que exista uma conta privilegiada chamadaroot
. Chamar a conta uid 0 em um * nixroot
é 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 depoisroot
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).fonte
root
etoor
, 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.
fonte
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:
fonte