Apakah akun root selalu memiliki UID / GID 0?

50

Pada semua sistem Linux yang saya kelola, akun root memiliki GID dan UID 0. Apakah ini dijamin, atau apakah mungkin bahwa sistem akan memberikan root ID yang berbeda?

Tanaki
sumber
3
ID 0 memiliki semua hak. Nama sebenarnya (atau nama -beberapa-) dapat berbeda. Misalnya server saya memiliki dua pengguna uid 0. Satu disebut 'root', satu disebut 'toor'.
Hennes

Jawaban:

80

Sebenarnya ada dua bagian untuk pertanyaan Anda.

Apakah akun pengguna super selalu memiliki uid / gid 0/0 di Linux?

Iya nih. Seperti yang ditunjukkan oleh Rich Homolka dalam komentar , ada kode di kernel yang secara eksplisit memeriksa uid 0 ketika perlu memeriksa pengguna root, yang berarti bahwa root selalu memiliki setidaknya uid 0.

Apakah nama akun pengguna dengan uid 0 selalu root?

Tidak. root Hanya nama, terdaftar di / etc / passwd atau toko otentikasi lainnya. Anda bisa saja memanggil akun itu admin, dan OS itu sendiri tidak akan peduli, tetapi beberapa aplikasi mungkin tidak menyukainya karena mereka mengharapkan ada akun istimewa bernama root. Memanggil akun uid 0 pada * nix rootadalah konvensi yang sangat kuat, tetapi tidak diharuskan oleh sistem (meskipun mungkin diperlukan oleh perangkat lunak userland tertentu, mungkin termasuk utilitas administrasi sistem).

Ini juga diperhatikan bahwa, sebagai keluar menunjuk oleh Simon Richter , di BSD sana sering ada suatu kedua uid 0 akun, dengan konvensi bernama toor(yang merupakan "akar" dieja terbalik, dan juga leksikal datang setelah root dalam daftar diurutkan sesuai abjad). Sebagai contoh, FreeBSD menggunakannya untuk memberikan pengguna root dengan pengaturan shell yang disesuaikan, meninggalkan pengguna root dengan shell default yang dijamin ada pada partisi root sistem (berguna untuk tujuan pemulihan).

sebuah CVn
sumber
15
Ada kode di kernel untuk memeriksa root, uid == 0. Ya, ini sulit dikodekan dan permanen.
Rich Homolka
1
BSD biasanya memiliki rootdan toor, keduanya dengan UID 0.
Simon Richter
@SimonRichter Dalam hal ini terdapat akun pengguna super dengan nama root, jadi tidak ada masalah di sana selama perpustakaan toko otentikasi tidak bingung pada dua pengguna dengan UID yang sama (dalam hal ini BSD tidak akan melakukan itu cara, atau perpustakaan akan diperbaiki).
CVn
Ada kode di kernel yang menggunakan UID = 0 sebagai perwakilan dari root, dan menyimpannya dalam variabel bernama "root_uid", tetapi saya tidak menemukan apa-apa (6 tahun kemudian) yang sebenarnya tergantung pada pengguna yang bernama "root". Apakah UID ada di / etc / passwd atau tidak, pada akhirnya akan ada proses yang diluncurkan w / UID = 0. :)
dannysauer
15

1) administrator selalu uid == 0. Ini dikodekan dalam kernel. Butuh beberapa pengkodean di kernel untuk mengubahnya. Tidak banyak gunanya, jadi belum selesai. Sebagai contoh, itu akan tidak konsisten untuk unix lain yang berbagi NFS yang sama misalnya.

2) uid 0 tidak perlu dipetakan untuk di-root. Contoh terbaik adalah FreeBSD. Ini memiliki dua uid == 0 akun, perbedaannya adalah shell. root memiliki shell / bin / sh, yang merupakan shell sederhana, berguna untuk ketika disk Anda buruk dan Anda perlu fsck / usr. toor menggunakan tcsh, yang jauh lebih berguna dalam situasi non-darurat, karena memiliki hal-hal seperti sejarah, dll.

Contoh lain yang lebih pribadi; satu pekerjaan yang saya miliki di mana mereka memiliki akun root equiv (yaitu uid = 0) di atas NIS. Kata sandi, kosong! Karena sysadmin baru tidak dapat mengingat kata sandi root pada mesin. Saya berteriak tentang ini karena alasan yang jelas (kata sandi NIS menurut definisi tidak dapat menyembunyikan kekosongannya). Saya tidak senang dengan akun ini.

Dan itu sebenarnya bukan sistem yang memberi Anda 0 adalah root, itu Anda. Anda mengubah ini dengan menggunakan file passwd, atau direktori penamaan lainnya (NIS, ldap) tetapi tidak dikompilasi. Meskipun Anda harus memiliki setidaknya satu akun 0 uid di / etc / passwd, karena Anda mungkin tidak memiliki jaringan saat Anda benar-benar membutuhkannya .

Jadi root selalu uid 0, tetapi uid 0 tidak selalu root.

Homolka yang kaya
sumber
1
Oof, sakitnya memilih hanya satu jawaban yang diterima ...
Tanaki
5
@ Tanaki Secara umum, "terima" jawaban yang paling membantu Anda menjawab pertanyaan Anda, dan utamakan semua jawaban yang menurut Anda berguna. Tidak ada yang mengatakan Anda harus menerima jawaban yang dipilih dengan suara tertinggi atau tertulis pertama.
CVn
1

Baik untuk sistem yang menggunakan server nonStop, ROOT_UID bukan 0 tetapi 65535.

Pengguna dan grup OSS Lingkungan OSS tidak memberikan nama pengguna dan ID pengguna standar UNIX yang umum kecuali mereka dibuat secara eksplisit oleh administrator situs. Namun, nama pengguna dan ID pengguna OSS yang setara memang ada. Misalnya, hak istimewa yang biasanya terkait dengan root nama pengguna UNIX dan ID pengguna 0 ada untuk ID pengguna OSS (UID) dari 65535 (ID super), yang merupakan pengguna SUPER.SUPER dan alias-aliasnya.

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

Di coreutils, Anda dapat menemukan file header 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
sumber