Pertanyaan Mengapa saya bisa membuat Pengguna dengan UID yang sama?


Pemahaman saya tentang UID adalah bahwa ini adalah bilangan bulat positif unik yang diberikan oleh sistem operasi mirip Unix untuk setiap pengguna. Setiap pengguna diidentifikasi ke sistem oleh UID-nya, dan nama pengguna umumnya hanya digunakan sebagai antarmuka untuk manusia.

Bagaimana dua pengguna dapat memiliki UID yang sama, bukankah ini konflik untuk sistem dan paket saya?

root@kdc:~# id test12
uid=1005(test10) gid=1000(server) groups=1005(test10)
root@kdc:~# id test13
uid=1005(test10) gid=1000(server) groups=1005(test10)
root@kdc:~#

Saya telah menambahkan dua pengguna dengan UID dan GID yang sama: test12 dan test13

Output dari /etc/passwd:

client@kdc:~$ cat /etc/passwd | grep test12
test12:x:1005:1000::/home/test12:/bin/sh
client@kdc:~$ cat /etc/passwd | grep test13
test13:x:1005:1000::/home/test13:/bin/sh

Saya menambahkan pengguna dengan useradd -ou 1005 -g1000 username.

Saya bingung apa tujuan dari ini, dan dapat mempengaruhi perizinan dan log pengguna dll. Jadi sekarang jika pengguna ditambahkan dengan uid=0 dan gid=0 akan memiliki hak istimewa seperti akun root?


32
2018-02-27 15:36


asal


Tidak yakin tentang itu, tapi saya pikir hasilnya adalah mencetak UID pengguna "test10" di kedua perintah. Mengapa melakukan itu, saya tidak tahu, tetapi harus ada pengguna yang Anda buat sebelumnya. - animaletdesequia
seolah-olah yang mengatakan ada pengguna yang memiliki id ini - nux
OK, saya salah mengerti pertanyaan itu. Saya berpikir bahwa Anda menciptakan pengguna secara normal dan sistem memberi mereka UID yang sama. - animaletdesequia
tidak ada manusia yang biasanya tidak, pertanyaannya di sini, bagaimana sistem menerima cairan unik - nux
Mengerti. Pertanyaan bagus, terima kasih atas penjelasannya :) - animaletdesequia


Jawaban:


Jawabannya di sini adalah Linux tidak melindungi Anda dari diri sendiri.

Jika Anda benar-benar menginginkannya su root dan masuk ke file / etc dan memberikan semua pengguna UID yang sama, Anda bisa. Itu hanya file teks.

Tapi Anda benar-benar tidak boleh dan itu akan memiliki konsekuensi yang tidak diinginkan.


35
2018-02-27 15:47



pertanyaan saya mengapa sistem menerima ini? - nux
Apa maksudmu "menerima" itu? Bagaimana TIDAK menerimanya? ini seperti menjadi koki dan bertanya mengapa sup memungkinkan Anda untuk memasukkan terlalu banyak garam ke dalamnya. Dalam hal komputasi modern, Anda mungkin terbiasa dengan mentalitas RDBMS, di mana batasan pada hal-hal penting seperti ID membuat Anda tidak bisa menembak diri sendiri di kaki. ID pengguna Linux jauh lebih primitif dan tidak memiliki pemeriksaan atau koreksi internal. - Digital Chris
Benar, dan dengan menggunakan useradd -o Anda mengakui bahwa Anda berada di luar norma adduser. Seperti yang disebutkan @psusi, ini menciptakan dua login yang menunjuk ke ID yang sama sejauh izin file dll. Mungkin juga menciptakan masalah karena itu bukan kasus penggunaan normal dan tidak diragukan lagi belum diuji dengan banyak paket. - Digital Chris
Jawaban: untuk memiliki 2 login menunjuk ke hak akses sistem file yang identik. - Digital Chris
@Yosh tentu saja, ada alasan yang sah untuk memiliki beberapa pengguna dengan UID yang sama, lihat jawaban saya untuk satu contoh. - terdon♦


Sebenarnya ada alasan yang sah untuk ini. Misalnya, saya dulu bekerja di lab di mana kami masing-masing memiliki komputer sendiri tetapi komputer kami $HOME berada di drive bersama yang diekspor oleh server. Jadi, saya $HOME adalah

/users/terdon

Sejak itu /users folder sebenarnya bukan pada mesin lokal saya tetapi diekspor melalui NFS, untuk analisis yang berat pada I / O, saya akan menggunakan data yang disimpan pada hard drive lokal saya agar tidak membebani jaringan lab. Untuk itu, saya, dan semua orang, memiliki dua pengguna: satu yang keseluruhan sistem dan satu yang lokal ke mesin yang dimaksud. Rumah pengguna lokal adalah

/home/localuser

Namun, saya harus memiliki akses penuh ke file saya apakah saya masuk sebagai terdon atau sebagai localuser dan cara sysadmin kami menerapkan itu dengan memberikan keduanya localuser dan terdon UID yang sama. Dengan begitu, saya dapat dengan bebas memanipulasi file lokal saya terlepas dari pengguna yang saya masuki saat ini.


33
2018-02-27 22:56



Untuk mendukung jawaban ini, perlu dicatat bahwa beberapa pengaturan seperti virtual email hosting menggunakan ini untuk efek yang besar, yaitu sejumlah besar akun email virtual yang berbagi UID tunggal - dokumentasi untuk server surat Dovecot sebenarnya menyarankan ini sebagai pendekatan opsional di wiki2.dovecot.org/UserIds#mailusers - Matt Thomason
tidak akan chmod 666 memiliki pengaruh yang sama? - Brian
@GIJoe yang memungkinkan kedua pengguna untuk membaca / menulis tetapi tidak akan mempertahankan kepemilikan yang bisa menjadi masalah. Juga, tidak semua file dapat disetel ke izin tersebut (kunci ssh misalnya) dan tidak praktis untuk perlu bermain dengan izin sepanjang waktu. - terdon♦


Dua pengguna dapat memiliki UID yang sama karena hanya berupa angka dalam file teks sehingga Anda dapat mengaturnya ke apa pun yang Anda inginkan, termasuk nilai yang sudah digunakan. Seperti yang Anda lihat, melakukannya bukanlah ide yang bagus.


12
2018-02-27 15:45



bagaimana sistem menangani pengguna itu? izin berbagi - nux
@nux, keduanya sama-sama pengguna. Mereka hanya dapat memiliki nama pengguna / kata sandi yang berbeda untuk tujuan masuk. - psusi
@ bigbadonk420, istilah "didukung" agak samar-samar. Ini tentu saja adalah sesuatu yang selalu dapat Anda lakukan pada sistem unix dan itu digunakan untuk menjadi backdoor yang cukup umum untuk mengatur pengguna lain yang memiliki uid 0 sehingga Anda dapat masuk dan secara efektif menjadi root, tanpa perlu mengetahui atau mengubah kata sandi. pada pengguna root normal. - psusi
@ bigbadonk420 didukung, ada kasus di mana ini berguna, lihat jawaban saya untuk satu contoh. - terdon♦


Sistem Unix & Linux umumnya tidak melakukan apa pun untuk melarang duplikat di /etc/passwd mengajukan. Maksud dari file ini adalah untuk mengaitkan UID dengan nama fisik yang dapat ditampilkan oleh alat baris perintah seperti ls ketika pengguna mencantumkan file.

$ ls -n | head -5
total 986000
drwxrwxr-x.   3 1000 1000      4096 Feb 13 19:51 1_archive_sansa
-rw-rw-r--.   1 1000 1000    760868 Dec 16 08:21 2.18.x Database Scheme.jpg
-rw-rw-r--.   1 1000 1000       972 Oct  6 20:26 abcdefg
drwxrwxr-x.   2 1000 1000      4096 Feb 11 03:34 advanced_linux_programming

Tujuan lain yang dimaksudkan dari file ini adalah untuk menentukan shell apa yang pengguna akan dapatkan ketika mereka masuk.

$ getent passwd saml
saml:x:1000:1000:saml:/home/saml:/bin/bash

Vektor serangan umum pada sistem jenis Unix adalah menambahkan garis seperti ini ke sistem /etc/passwd mengajukan:

$ getent passwd r00t
r00t:x:0:0:root:/root:/bin/bash

$ getent passwd toor
toor:x:0:0:root:/root:/bin/bash

Peran dari /etc/passwd file adalah TIDAK dimaksudkan untuk hanya melacak akun pengguna. Peran pelacakan username dan password adalah tanggung jawab dari /etc/shadow mengajukan. File seperti /etc/passwd dan /etc/group benar-benar dimaksudkan untuk memberikan nama yang dapat dibaca manusia ketika sistem Anda mencantumkan file dari disk.

Ingat bahwa file Anda ditulis ke disk dengan menggunakan nama asli UID / GID.

$ stat afile 
  File: ‘afile’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fd02h/64770d    Inode: 6560621     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    saml)   Gid: ( 1000/    saml)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2014-02-27 15:54:21.852697029 -0500
Modify: 2014-02-27 15:54:21.852697029 -0500
Change: 2014-02-27 15:54:21.852697029 -0500
 Birth: -

Perhatikan Uid: dan Gid:, angka-angka adalah apa yang sebenarnya ditulis ke disk!


11
2018-02-27 22:25





Sebenarnya cukup umum untuk memiliki dua pengguna dengan ID yang sama. Pada FreeBSD, biasanya ada dua pengguna dengan UID 0: root dan toor. Root menggunakan shell built-in / bin / sh, dan toor menggunakan shell yang berbeda, biasanya bash.


10
2018-02-27 23:48





Di Linux, semua pengguna dan grup sebenarnya hanyalah angka. Itulah yang menjadi output dari id memerintahkan Anda memposting acara.

Itu /etc/passwd file memetakan pengguna nama-nama kepada pengguna ID (angka) dan dalam contoh yang Anda berikan, Anda baru saja memetakan dua nama pengguna ke ID pengguna yang sama.

Secara efektif, Anda telah membuat satu pengguna, test12, ID 1005, yang juga memiliki nama pengguna kedua test13. Namun sistem akan memetakan UID 1005 ke nama pengguna pertama yang ditemukan, yang akan menjadi test12

Linux "memungkinkan" Anda melakukan ini karena tidak ada sistem untuk mencegah Anda melakukan hal ini. /etc/passwd hanya file teks, nama pengguna dipetakan ke UID yang ditemukan untuk entri mereka di file itu, UID dipetakan ke nama pengguna pertama yang ditemukan di file itu.

Tetapi apa yang telah Anda buat adalah situasi yang membingungkan bagi administrator systam lainnya; hindari dengan mengubah UID test13


9
2018-02-27 16:48



ini adalah manusia mesin virtual uji saya, pertanyaan saya adalah ada tujuan untuk memetakan dua pengguna untuk uid yang sama - nux
Satu-satunya tujuan yang dapat saya pikirkan adalah memberi nama pengguna UID, alias yang kedua. Namun perilaku ini tidak terdefinisi dan tidak disarankan. Sebenarnya ini adalah situasi yang tidak diinginkan: Anda lebih baik dengan hubungan 1: 1 antara nama pengguna dan UID - Josh
Itulah mengapa saya menanyakan pertanyaan ini yang perlu saya ketahui, saya merasa ini adalah cara yang membingungkan - nux
Ini membingungkan; itulah mengapa kamu tidak harus melakukannya. Itu tidak memiliki "tujuan", itu lebih merupakan penyalahgunaan /etc/passwd mengajukan. Tapi tidak ada sarana untuk itu mencegah Anda melakukan ini. Apakah itu masuk akal? - Josh
seorang pengguna menyebutkan bahwa tujuannya adalah memiliki 2 titik masuk ke perizinan sistem file yang identik. - nux


Alasan bahwa ini diperbolehkan hari ini, hanyalah karena sistem tidak mencegahnya.

Jika ini berubah, maka itu akan merusak sistem di mana admin telah menggunakan fitur ini, (lihat contoh terdon). Jadi itu tidak pernah berubah, dan saya tidak berpikir itu akan terjadi.

Awalnya hanya ada file passwd dan grup, dan mereka melayani tujuan mereka. tidak ada Tambahkan pengguna komando, tidak addgroup, file-file itu diedit oleh root menggunakan vi atau ed.

Ada beberapa quirks!

Untuk mengingat ID pengguna berikutnya untuk digunakan, sudah umum bagi admin untuk memiliki pengguna khusus sebagai baris terakhir yang memiliki nama pengguna ! (karena ! adalah nama pengguna yang tidak valid) dan entri itu digunakan untuk menyimpan id pengguna berikutnya. Mentah, aku akui, tapi berhasil! Jadi mengapa meledakkan usus membuatnya lebih rumit, mirip dengan perkembangan tangkas hari ini.

Ada kekurangan yang diketahui. Yang utama, bahwa itu harus bisa dibaca dunia, sehingga utilitas seperti ls bisa memetakan user-id => name. Ini berarti siapa pun dapat melihat kata sandi yang dienkripsi semua orang, dan semua pengguna dan id dalam sistem.

Beberapa sistem Unix mulai memperkenalkan beberapa skrip shell adduser  addgroup, sering ini diabaikan, karena mereka tidak konsisten antara Unix, jadi kebanyakan orang hanya melanjutkan dengan pengeditan manual.

Butuh beberapa tahun, sebelum shadow file kata sandi ditemukan, ini memberikan keamanan yang lebih sedikit, dengan menyembunyikan kata sandi terenkripsi. Sekali lagi, cukup banyak kerumitan ditambahkan, tetapi masih cukup kasar dan sederhana. Utilitas useradd dan groupadd diperkenalkan, yang disimpan shadow dan shadow- diperbarui. Untuk mulai dengan, ini sering pembungkus skrip shell sederhana di sekitar vendor proprietary adduser / addgroup utilitas. Sekali lagi itu hanya cukup untuk terus berjalan.

Jaringan komputer tumbuh, orang-orang bekerja pada beberapa sekaligus untuk menyelesaikan pekerjaan, jadi admin dari passwd/group file menjadi mimpi buruk, terutama dengan NFS, jadi di datang Yellow Pages juga dikenal sebagai NIS untuk meringankan beban.

Sudah menjadi jelas sekarang bahwa sesuatu yang sedikit lebih fleksibel dibutuhkan, dan PAM diciptakan. Jadi jika Anda benar-benar canggih dan menginginkan sistem otentikasi lonceng dan peluit yang tersentralisasi, aman, unik, semua Anda akan memanggil server pusat untuk mengotentikasi, mungkin server Radius, server LDAP atau direktori Aktif.

Dunia telah tumbuh dewasa. Tetapi file passwd / group / shadow masih tersisa untuk kita pengguna / pengembang / lab yang lebih kecil. Kami masih tidak benar-benar membutuhkan semua lonceng dan peluit. Saya kira filosofi telah berubah sedikit sekarang, "Jika Anda akan membuatnya lebih baik, Anda tidak akan menggunakannya sama sekali", jadi jangan khawatir tentang itu.

Inilah mengapa saya tidak berpikir file passwd sederhana akan pernah berubah. Tidak ada gunanya lagi, dan itu hanya bagus untuk mereka £ 30 Raspberry Pi dengan 2 mungkin 3 pemantauan suhu pengguna, dan feed twitter. OK, Anda hanya perlu sedikit berhati-hati dengan user-id Anda jika Anda menginginkannya unik, dan tidak ada yang mencegah para penggemar membungkus useradd dalam skrip yang pertama-tama memilih id unik berikutnya dari database (file) untuk menetapkan id unik, jika itu yang Anda inginkan. Ini adalah open source.


5
2018-02-28 02:34





Itu /etc/passwd file hanya memetakan nama pengguna simbolis ke userID yang sebenarnya. Jika Anda dengan sengaja membuat dua nama simbolis yang dipetakan ke satu userID maka itu akan membiarkan Anda.

Itu tidak berarti itu adalah ide yang bagus untuk benar-benar melakukannya. Beberapa orang mungkin telah menemukan kasus penggunaan yang sangat spesifik di mana mereka dapat memanfaatkan fitur ini, tetapi secara umum Anda tidak boleh melakukannya.

Linux (dan UNIX lainnya) menerima pendapat bahwa administrator tahu apa yang mereka lakukan. Jika Anda mengatakannya untuk melakukan sesuatu yang bodoh maka itu adalah kesalahan Anda sendiri, dengan cara yang sama bahwa jika Anda memberi tahu mobil Anda untuk mengemudi di atas tebing, Anda tidak dapat pergi ke pabrik dan bertanya mengapa mobil memungkinkan Anda melakukan hal ini.


1
2018-02-28 03:33



mengapa itu disebut sebagai bug? - nux


Ada pengidentifikasi bahwa sistem operasi mengharapkan untuk menjadi unik, tetapi mereka digunakan untuk melacak perangkat keras. Pengetahuan itu khusus Pengenal Unik Universal terkait dengan hard drive yang berisi file sistem dapat membantu untuk terus beroperasi jika konfigurasi perangkat keras berubah. Microsoft menyebutnya IDoosiers unik global dan menggunakannya untuk melacak semua perangkat lunak Windows. Ironisnya, akronim ini tidak dipilih dengan baik.

Dari perspektif OS, sebagian besar pengguna dan pengidentifikasi grup berubah jumlahnya menjadi mengubah antarmuka luarnya. Itu bisa berfungsi normal meskipun tabrakan; terutama apa yang diperlukan dari pengguna dan kelompok sistem adalah bahwa mereka ada. Tidak dapat mengetahui apa yang dibutuhkan pengguna. Dalam situasi seperti ini, filosofi Unix adalah bahwa OS harus menganggap administrator tahu apa yang mereka lakukan, dan harus membantu mereka melakukannya dengan cepat.


1
2018-02-28 07:59