Pemahaman saya tentang UID adalah integer positif unik yang diberikan oleh sistem operasi mirip-Unix kepada setiap pengguna. Setiap pengguna diidentifikasi ke sistem dengan 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 bisakah itu memengaruhi izin dan log pengguna dll. Jadi sekarang jika pengguna ditambahkan dengan uid=0
dan gid=0
akan memiliki hak istimewa seperti akun root?
Jawaban:
Jawabannya di sini adalah bahwa Linux tidak melindungi Anda dari diri Anda sendiri.
Jika Anda benar-benar ingin
su root
dan masuk ke file / etc dan memberikan semua pengguna UID yang sama, Anda bisa. Itu hanya file teks.Tetapi Anda benar-benar tidak boleh dan itu akan memiliki konsekuensi yang tidak diinginkan.
sumber
useradd -o
Anda mengenali bahwa Anda berada di luar normaadduser
. Seperti @psusi sebutkan, itu membuat dua login menunjuk ke ID yang sama sejauh izin file dll. Ini mungkin juga menciptakan masalah karena itu bukan kasus penggunaan normal dan tidak diragukan lagi belum teruji dengan banyak paket.Sebenarnya ada alasan yang valid untuk ini. Sebagai contoh, saya dulu bekerja di lab di mana kami masing-masing memiliki komputer kami sendiri tetapi kami
$HOME
berada di drive bersama yang diekspor oleh server. Jadi, saya$HOME
adalahKarena
/users
folder itu sebenarnya bukan pada mesin lokal saya tetapi diekspor melalui NFS, untuk setiap 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 seluruh sistem dan satu yang lokal ke mesin yang dimaksud. Rumah pengguna lokal adalahNamun, saya perlu memiliki akses penuh ke file saya apakah saya login sebagai
terdon
atau sebagailocaluser
dan cara sysadmin kami telah diterapkan yaitu dengan memberikan UID keduanyalocaluser
danterdon
yang sama. Dengan begitu, saya bisa dengan bebas memanipulasi file lokal saya terlepas dari pengguna mana saya saat ini masuk.sumber
chmod 666
memiliki dampak yang sama?Dua pengguna dapat memiliki UID yang sama karena itu hanya angka dalam file teks sehingga Anda dapat mengaturnya untuk apa pun yang Anda inginkan, termasuk nilai yang sudah digunakan. Seperti yang telah Anda lihat, melakukan itu bukanlah ide yang baik.
sumber
Sebenarnya cukup umum untuk memiliki dua pengguna dengan ID yang sama. Di 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.
sumber
Sistem Unix & Linux umumnya tidak melakukan apa pun untuk melarang duplikat dalam
/etc/passwd
file. Maksud dari file ini adalah untuk mengaitkan UID dengan nama fisik yang dapat ditampilkan oleh alat-alat baris perintah sepertils
ketika pengguna mendaftar file.Tujuan lain dari file ini adalah untuk menentukan shell apa yang akan didapatkan pengguna saat mereka login.
Vektor serangan umum pada sistem tipe Unix adalah menambahkan baris seperti ini ke
/etc/passwd
file sistem :Peran
/etc/passwd
file TIDAK dimaksudkan untuk hanya melacak akun pengguna. Peran melacak nama pengguna dan kata sandi adalah tanggung jawab/etc/shadow
file tersebut. File seperti/etc/passwd
dan/etc/group
benar-benar dimaksudkan untuk memberikan nama yang dapat dibaca manusia ketika sistem Anda mendaftar file dari disk.Ingat bahwa file Anda ditulis ke disk menggunakan UID / GID bukan nama sebenarnya.
Perhatikan
Uid:
danGid:
, angkanya adalah apa yang sebenarnya ditulis ke disk!sumber
Di Linux, semua pengguna dan grup sebenarnya hanya angka. Itulah yang ditampilkan dari
id
perintah yang Anda posting.The
/etc/passwd
berkas peta pengguna nama pengguna ID (nomor) dan dalam contoh yang harus Anda berikan, Anda hanya dipetakan dua username dengan ID pengguna yang sama.Secara efektif, Anda telah membuat satu pengguna
test12
,, ID 1005, yang juga memiliki nama pengguna keduatest13
. Namun sistem akan memetakan UID 1005 ke nama pengguna pertama yang ditemukannyatest12
Linux "memungkinkan" Anda melakukan ini karena tidak ada sistem untuk mencegah Anda melakukan ini.
/etc/passwd
hanya file teks, nama pengguna dipetakan ke UID yang ditemukan untuk entri mereka dalam file itu, UID dipetakan ke nama pengguna pertama yang ditemukan dalam file itu.Tetapi apa yang Anda buat adalah situasi yang membingungkan bagi administrator systams lainnya; menghindarinya dengan mengubah UID dari
test13
sumber
/etc/passwd
file. Tetapi tidak ada cara untuk mencegah Anda melakukan ini. Apakah itu masuk akal?Alasan bahwa ini diizinkan hari ini, adalah hanya 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 pikir itu tidak akan pernah terjadi.
Awalnya hanya ada file sandi dan grup, dan mereka melayani tujuan mereka. tidak ada perintah adduser , tidak ada addgroup , file-file itu diedit oleh root menggunakan vi atau ed.
Ada beberapa kebiasaan!
Untuk mengingat id pengguna berikutnya yang akan digunakan, admin biasa memiliki pengguna khusus sebagai baris terakhir yang memiliki nama pengguna
!
(karena!
nama pengguna tidak valid) dan entri itu digunakan untuk menyimpan pengguna berikutnya identitas pengguna. Saya akui, tapi itu berhasil! Jadi mengapa membuat perut jadi lebih rumit, mirip dengan perkembangan tangkas hari ini.Ada kelemahan yang diketahui. Yang utama, bahwa itu harus dapat dibaca dunia, sehingga utilitas seperti
ls
bisa memetakanuser-id => name
. Ini berarti siapa pun dapat melihat kata sandi terenkripsi semua orang, dan semua pengguna dan id di sistem.Beberapa sistem Unix mulai memperkenalkan beberapa skrip shell
adduser
addgroup
, seringkali 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 sedikit keamanan, dengan menyembunyikan kata sandi yang dienkripsi. Sekali lagi, cukup banyak kompleksitas ditambahkan, tetapi masih cukup kasar dan sederhana. Utilitasuseradd
dangroupadd
diperkenalkan, yang disimpanshadow
danshadow-
diperbarui. Untuk memulainya, ini sering kali adalah pembungkus skrip shell sederhana di sekitar utilitas adduser / addgroup milik vendor . Sekali lagi itu cukup untuk terus berjalan.Jaringan komputer tumbuh dewasa, orang-orang bekerja pada beberapa sekaligus untuk menyelesaikan pekerjaan, sehingga admin
passwd/group
file menjadi mimpi buruk, terutama dengan NFS, sehingga datang Yellow Pages juga dikenal sebagai NIS untuk meringankan beban.Sudah jelas sekarang bahwa sesuatu yang sedikit lebih fleksibel diperlukan, dan PAM diciptakan. Jadi jika Anda benar-benar canggih dan menginginkan sistem otentikasi terpusat, aman, unik-id'ed, semua lonceng dan peluit Anda akan memanggil ke server pusat untuk otentikasi, mungkin server Radius, server LDAP atau direktori aktif.
Dunia telah tumbuh dewasa. Tetapi file passwd / group / shadow masih tetap bagi kita pengguna / pengembang / lab yang lebih kecil. Kami masih tidak benar-benar membutuhkan semua lonceng dan peluit. Saya kira filosofi telah berubah sedikit sekarang menjadi, "Jika Anda akan membuatnya lebih baik, Anda tidak akan menggunakannya sama sekali" , jadi jangan khawatir tentang hal itu.
Inilah mengapa saya tidak berpikir file passwd sederhana akan pernah berubah. Tidak ada gunanya lagi, dan itu hanya bagus untuk Raspberry Pi £ 30 dengan suhu pemantauan 2 mungkin 3 pengguna, dan feed twitter. OK, Anda hanya perlu sedikit berhati-hati dengan id-pengguna Anda jika Anda ingin mereka unik, dan tidak ada yang mencegah penggila membungkus useradd dalam sebuah skrip yang pertama-tama memilih id unik berikutnya dari database (file) untuk menetapkan id unik, jika itu yang Anda inginkan. Bagaimanapun, ini adalah open source.
sumber
The
/etc/passwd
File hanya memetakan username simbolik ke userID nyata. Jika Anda sengaja membuat dua nama simbolis yang memetakan ke satu userID maka itu akan membiarkan Anda.Itu tidak berarti itu ide yang baik 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) berpendapat bahwa administrator tahu apa yang mereka lakukan. Jika Anda menyuruhnya melakukan sesuatu yang bodoh maka itu adalah kesalahan Anda sendiri, seperti halnya jika Anda menyuruh mobil Anda mengemudi di atas tebing, Anda tidak dapat pergi ke pabrik dan bertanya mengapa mobil itu memungkinkan Anda melakukan ini.
sumber
Ada pengidentifikasi bahwa sistem operasi mengharapkan untuk menjadi unik, tetapi mereka digunakan untuk melacak perangkat keras. Pengetahuan bahwa IDentifier Unik Semesta tertentu berhubungan dengan hard drive yang berisi file sistem dapat membantunya untuk terus beroperasi jika konfigurasi perangkat keras berubah. Microsoft menyebut ID pastaiers Global Unik ini dan menggunakannya untuk melacak semua perangkat lunak Windows. Ironisnya, akronim ini dipilih dengan buruk.
Dari perspektif OS, sebagian besar pengidentifikasi pengguna dan grup mengubah jumlah hingga mengubah antarmuka luarnya. Itu bisa berfungsi secara normal meskipun tabrakan; terutama yang dibutuhkan oleh pengguna sistem dan grup adalah bahwa mereka ada. Tidak dapat mengetahui apa yang dibutuhkan pengguna. Dalam situasi seperti ini, filosofi Unix adalah bahwa OS harus mengasumsikan administrator tahu apa yang mereka lakukan, dan harus membantu mereka melakukannya dengan cepat.
sumber
Saya menemukan beberapa bukti yang mendukung jawaban @ andybalholm.
Dari APUE , §8.15:
Btw, saya ingin tahu apakah seseorang dapat beralih ke shell lain saat login.
sumber