Bagaimana Linux mengidentifikasi pengguna?

9

Maksud saya, jika dua pengguna memiliki nama yang sama, bagaimana sistem tahu bahwa mereka sebenarnya pengguna yang berbeda ketika memberlakukan izin file?

Keraguan ini muncul di benak saya ketika saya mempertimbangkan untuk mengubah nama rumah saya /home/old-archsebelum menginstal ulang sistem (saya /homememiliki partisi sendiri dan saya tidak memformatnya), sehingga saya dapat memiliki yang baru, murni /home/arch. Saya bertanya-tanya apakah sistem baru akan memberi saya izin lama pada file saya atau apakah itu akan mengenali saya sebagai berbeda arch.

Arch Stanton
sumber
12
Jawaban sederhananya adalah "tidak", karena Anda seharusnya tidak memiliki banyak pengguna dengan nama pengguna yang sama.
Ignacio Vazquez-Abrams
6
UID, yang berbeda dari tetapi biasanya terkait dengan nama pengguna, adalah bagaimana hal semacam ini dilacak. Lihat output dari ls -n.
DopeGhoti
5
"Kirim" adalah operasi yang terlalu samar untuk menjawab pertanyaan. Izin hanya berlaku untuk satu sistem (ukuran sewenang-wenang).
Ignacio Vazquez-Abrams
1
@ IgnacioVazquez-Abrams Pertanyaan ini benar-benar muncul di benak saya ketika saya mempertimbangkan untuk mengubah nama rumah saya /home/old-archsebelum menginstal ulang sistem (saya /homememiliki partisi sendiri dan saya tidak memformatnya), sehingga saya dapat memiliki yang baru, yang masih asli /home/arch. Saya bertanya-tanya apakah saya akan mempertahankan izin yang sama pada file saya, atau apakah sistem akan mengenali saya sebagai berbeda arch.
Arch Stanton
1
Saya pikir kasus yang Anda sebutkan dalam komentar Anda menarik, tentang dua pengguna dengan nama pengguna yang sama, tetapi pada sistem yang berbeda yang diinstal pada mesin yang sama, mengakses file yang sama pada partisi bersama. Mungkin Anda bisa menambahkannya ke pertanyaan?
Time4Tea

Jawaban:

10

Di Unix, pengguna diidentifikasi oleh ID mereka (uid), yang harus unik (dalam lingkup sistem lokal). Jadi, bahkan jika memungkinkan untuk membuat 2 pengguna yang berbeda dengan nama yang sama (adduser di sistem saya menolak untuk melakukan ini, lihat pertanyaan ini untuk informasi lebih lanjut. Dapat memisahkan akun unix yang berbagi nama pengguna tetapi memiliki kata sandi yang terpisah? ), Mereka perlu mendapatkan uids berbeda. Meskipun Anda mungkin dapat memanipulasi file yang berisi informasi pengguna agar sesuai dengan kriteria Anda, setiap program didasarkan pada asumsi bahwa uids adalah unik pada sistem, sehingga pengguna tersebut akan identik.

EDIT: Jawaban lain menunjukkan kasus di mana Anda memiliki 2 nama pengguna yang berbeda untuk uid yang sama - sejauh yang menyangkut sistem, ini seperti memiliki dua nama yang berbeda untuk pengguna yang sama, jadi konstruksi seperti ini harus dihindari jika mungkin , kecuali Anda secara khusus ingin membuat alias untuk pengguna di sistem (lihat pertanyaan alias pengguna unix di serverfault untuk informasi lebih lanjut tentang teknis).

Sistem menggunakan cairan ini untuk menegakkan izin file. Uid dan gid (id grup) dari pengguna yang dimiliki file tersebut dituliskan ke dalam metadata file tersebut. Jika Anda membawa disk ke komputer lain dengan pengguna berbeda yang secara acak menggunakan uid yang sama, file tersebut tiba-tiba akan menjadi milik pengguna ini di sistem itu. Mengetahui bahwa uids biasanya tidak lebih dari 16-bit integer pada sistem unix, ini menunjukkan bahwa uids tidak dimaksudkan untuk menjadi unik secara global, hanya unik dalam ruang lingkup sistem lokal.

Lollen Jumplan
sumber
22

Jika Anda memaksa ada beberapa pengguna dengan nama pengguna yang sama, maka akan ada banyak entri /etc/{shadow,passwd}dengan nama yang sama:

$ cat /etc/passwd
...
a:x:1001:1002::/home/a:/bin/bash
a:x:1002:1003::/home/b:/bin/bash

# cat /etc/shadow
a:...:17702:0:99999:7:::
a:...:17702:0:99999:7:::

Jika Anda mencoba masuk sebagai pengguna itu, Anda akan masuk sebagai pertandingan pertama.

$ ssh a@<host>
Password:
$ id
uid=1001(a) gid=1002(a) groups=1002(a)
$ pwd
/home/a

Tidak akan ada cara untuk masuk sebagai pengguna kedua dengan nama yang sama.

Perhatikan bahwa Linux melacak pengguna dengan cairan mereka, bukan dengan nama pengguna mereka.

Akan tetapi, memiliki dua nama pengguna yang berbeda menjadi ID pengguna yang sama. Pertimbangkan versi lain dari /etc/passwd:

$ cat /etc/passwd
...
a:x:1001:1002::/home/a:/bin/bash
b:x:1001:1002::/home/b:/bin/bash

Perhatikan bahwa untuk kedua nama pengguna adan b, kolom ketiga adalah 1001 - itulah ID pengguna / uid. Sekarang, jika pengguna aatau pengguna bmasuk (bahkan dengan kata sandi yang berbeda), keduanya akan menjadi "pengguna 1001", dan ditampilkan sebagai pengguna adari perspektif OS. Di sini juga, entri yang cocok pertama adalah yang dikembalikan (dalam kebanyakan kasus):

$ ssh a@host
Password: <a's password>
$ id
uid=1001(a) gid=1002(a) groups=1002(a)

$ ssh b@host
Password: <b's password>
$ id
uid=1001(a) gid=1002(a) groups=1002(a)

Keduanya adan bbersifat uid 1001dan akan memiliki akses ke sumber daya yang tersedia untuk uid 1001.

Andy Dalton
sumber
mengapa tidak memeriksa duplikat nama pengguna saat membuat yang baru?
phuclv
9
Perhatikan bahwa saya pikir bahkan garis dasar yang paling useraddakan cocok jika Anda mencoba untuk menambahkan pengguna yang sudah ada, jadi dengan 'memaksa' di sini Andy cukup banyak berarti 'mengedit secara manual /etc/passwddan /etc/shadowyang sangat banyak Jangan Coba Ini Di Wilayah Rumah.
Shadur
"Tidak akan ada cara untuk masuk sebagai pengguna kedua dengan nama yang sama." Tidak bisakah Anda masih menelepon setuiddengan UID kedua? Atau bahkan sudo -u '#<uid>' bash?
jazzpi
1
@jazzpi Itu mungkin tergantung pada definisi "login" seseorang. Namun, saya pasti bisa melihat manajer login grafis yang memungkinkan situasi ini ...
a CVn
3

Saya sedang mempertimbangkan untuk mengganti nama rumah saya /home/old-archsebelum menginstal ulang sistem. Saya bertanya-tanya apakah sistem baru akan memberi saya izin lama pada file saya atau apakah itu akan mengenali saya sebagai lengkungan yang berbeda.

Jika Anda memiliki sistem pengguna tunggal dan melakukan instal ulang dengan distribusi yang sama, atau serupa, sangat mungkin bahwa akun pengguna Anda akan memiliki id pengguna yang sama, dan karenanya menjadi pengguna yang sama dari perspektif kernel. Sebagai contoh, pengguna yang dibuat selama instalasi adalah UID 1000 pada sistem Debian sejauh yang saya ingat. Sistem lain mungkin menggunakan beberapa nomor lain, tetapi sangat mungkin menjadi bilangan bulat kecil yang sama pada setiap pemasangan.

Hal yang sama berlaku untuk pengguna lain juga (jika Anda punya) karena UID biasanya dialokasikan secara berurutan. Pengguna ketiga yang dibuat cenderung memiliki UID yang sama dengan pengguna ketiga yang dibuat di sistem lain. Anda harus mengambil langkah-langkah sebelumnya untuk memastikan bahwa UID tidak digunakan kembali pada kedua sistem.

Untuk alasan yang sama, apa pun yang menggunakan NFS harus memiliki basis data pengguna bersama.

Tetapi dalam hal ini, karena ini adalah sistem pribadi Anda, Anda dapat masuk sebagai root dan menjalankannya chown newuser. -R /home/oldusermeskipun UIDnya berbeda.

(Sistem Windows berbeda, mereka menghasilkan string ID gondrong yang lebih acak. Di sana, jika Anda memindahkan disk ke komputer lain, file akan terlihat dimiliki oleh pengguna yang tidak dikenal, dan Anda tidak akan memiliki akses tanpa menggunakan kekuatan administrator.

Juga, saya katakan "kemungkinan" banyak di atas. Tidak ada yang tahu apakah beberapa distribusi berperilaku berbeda. Linux Modern juga mendukung 32-bit UID, jadi sementara itu tidak hampir selama Windows SID, masih ada beberapa ruang untuk digunakan jika seseorang ingin memiliki misalnya UID acak. Namun, biasanya tidak banyak gunanya. Administrator sistem seharusnya mengetahui disk apa yang mereka lampirkan pada sistem dan untuk menyesuaikan kepemilikan file yang sesuai, atau membuat mountpoint tidak dapat diakses oleh pengguna lain.)

ilkkachu
sumber
1

Unix adalah sistem yang sangat tua, era di mana kapasitas penyimpanan sangat kecil, dan semuanya - juga file sebagai pengguna - diidentifikasi dengan angka . Nama-nama datang kemudian , setelah penyimpanan tumbuh sedikit.

Sebuah kebajikan dari sistem ini adalah bahwa namanya hanya label tersambung ke pegangan nyata: ID numerik. Jadi Anda dapat memiliki beberapa nama untuk satu pengguna (dalam pengeditan / etc / passwd secara langsung), serta beberapa nama untuk satu file (berguna untuk menyimpan file hanya sekali, tetapi melihatnya di beberapa lokasi).

Batas adalah sistem untuk pengguna, dan partisi untuk file.

Saya katakan itu hanya untuk memperjelas, untuk menjelaskan mengapa semuanya itu .

Saya harus mengakui bahwa saya tidak pernah mencoba cara yang berlawanan - nama yang sama dengan ID yang berbeda - saya selalu berpikir itu tidak mungkin. Apakah itu? Bukan sebagai bug?

ypouplard
sumber
1
Jadi, apakah Anda mengatakan bahwa sistem file lain seperti NTFS atau CIFS menggunakan nama pengguna dan bukan SIDS alfanumerik untuk menyimpan hubungan dan izin file?
selesai24
Tidak yakin, tapi saya percaya ini masalahnya, karena SIDS alfanumerik tidak ada ketika Windows dibuat - saya masih ingat hari saya membeli Windows 286 , yang merupakan penerus grafis pertama dari MS-DOS ...
ypouplard
1
@ DougO'Neal: NT SID memiliki dua format: representasi tekstual, dan bentuk biner 12 byte. AFAIK, NTFS menggunakan yang terakhir secara internal, sehingga masih menggunakan angka untuk mengidentifikasi pengguna - hanya angka yang sangat besar. :)
cHao
3
@Pasangan Ketika Windows dibuat, itu adalah sistem operasi satu pengguna. Tidak perlu mengatur file owership karena orang yang duduk di keyboard mengatur semuanya.
selesai24