Banyak Akun * NIX dengan UID Identik

14

Saya ingin tahu apakah ada perilaku standar yang diharapkan dan apakah itu dianggap praktik buruk ketika membuat lebih dari satu akun di Linux / Unix yang memiliki UID yang sama. Saya telah melakukan beberapa pengujian pada RHEL5 dengan ini dan berperilaku seperti yang saya harapkan, tapi saya tidak tahu apakah saya menggoda nasib menggunakan trik ini.

Sebagai contoh, katakanlah saya memiliki dua akun dengan ID yang sama:

a1:$1$4zIl1:5000:5000::/home/a1:/bin/bash
a2:$1$bmh92:5000:5000::/home/a2:/bin/bash

Ini artinya:

  • Saya bisa masuk ke setiap akun menggunakan kata sandi sendiri.
  • File yang saya buat akan memiliki UID yang sama.
  • Alat-alat seperti "ls-l" akan mencantumkan UID sebagai entri pertama dalam file (a1 dalam kasus ini).
  • Saya menghindari masalah izin atau kepemilikan di antara kedua akun tersebut karena mereka benar-benar pengguna yang sama.
  • Saya mendapatkan audit masuk untuk setiap akun, jadi saya memiliki rincian yang lebih baik untuk melacak apa yang terjadi pada sistem.

Jadi pertanyaan saya adalah:

  • Apakah kemampuan ini dirancang atau itu hanya cara kerjanya terjadi?
  • Apakah ini akan konsisten di seluruh varian * nix?
  • Apakah ini praktik yang diterima?
  • Adakah konsekuensi yang tidak diinginkan terhadap praktik ini?

Catatan, ide di sini adalah menggunakan ini untuk akun sistem dan bukan akun pengguna normal.

Tim
sumber

Jawaban:

8

Pendapat saya:

Apakah kemampuan ini dirancang atau itu hanya cara kerjanya terjadi?

Ini dirancang. Sejak saya mulai menggunakan * NIX, Anda dapat menempatkan pengguna di grup umum. Kemampuan untuk membuat UID tetap sama tanpa masalah hanyalah hasil yang dimaksudkan bahwa, seperti semuanya, dapat membawa masalah jika dikelola secara tidak benar.

Apakah ini akan konsisten di seluruh varian * nix?

Saya percaya begitu.

Apakah ini praktik yang diterima?

Diterima seperti pada umumnya digunakan dalam satu atau lain cara, ya.

Adakah konsekuensi yang tidak diinginkan terhadap praktik ini?

Selain audit masuk, Anda tidak punya apa-apa lagi. Kecuali Anda menginginkan hal itu, mulailah dengan.


sumber
Catatan, ini bukan menempatkan pengguna dalam grup yang sama, ini memberi mereka ID grup yang identik. Jadi akan ada grup a1 dengan GID 5000 dan grup a2 dengan GID 5000. Namun, konsep yang lebih kritis di sini adalah UID yang identik, karena Anda bisa mendapatkan penanganan grup saat Anda usulkan.
Tim
1
Nama yang diberikan kepada grup * NIX tidak relevan. GID-lah yang penting. Dengan memberikan GID yang sama kepada lebih dari satu kelompok, Anda hanya menghasilkan sedikit; mengapa tidak menggunakan nama grup / GID yang sama untuk sebanyak mungkin pengguna yang Anda inginkan? UID adalah masalah yang sedikit berbeda, karena nama yang ramah akan dicatat.
Saya mungkin harus terjebak dengan hanya membahas UID, karena ini adalah item yang lebih relevan dalam pertanyaan.
Tim
Jawaban ini tidak valid hari ini.
Astara
@Astara: Ingin menguraikan?
user63623
7

Apakah ini akan berfungsi pada semua Unix? Iya.

Apakah ini teknik yang baik untuk digunakan? Tidak. Ada teknik lain yang lebih baik. Sebagai contoh, penggunaan yang tepat dari grup unix dan konfigurasi "sudo" yang dikontrol secara ketat dapat mencapai hal yang sama.

Saya telah melihat persis satu tempat di mana ini digunakan tanpa masalah. Dalam FreeBSD adalah tradisional untuk membuat akun root kedua yang disebut "toor" (root dieja mundur) yang memiliki / bin / sh sebagai shell default. Dengan cara ini jika shell root kacau Anda masih bisa login.

TomOnTime
sumber
3
Ini bukan hanya tradisional, tetapi juga standar. Pengguna toor dibuat pada setiap instalasi tunggal sehingga jika pengguna mengacaukan toor akun root masih tersedia. Yang sedang berkata, kebanyakan orang tidak pernah menetapkan kata sandi untuk akun pengguna toor!
X-Istence
Jawaban ini salah - dulu dan sekarang. Saya yakin itu tidak dan tidak akan bekerja pada semua varian unix.
Astara
Apa salahnya? Varian mana yang tidak berfungsi?
TomOnTime
Dengan peta layanan nama berbasis file (/ etc / passwd, / etc / group), ini berfungsi secara konsisten pada setiap UNIX yang pernah saya lihat. AIX atau HP-UX (saya lupa yang mana) akan secara otomatis menambahkan grup kedua bernama "group2" (dan "group3," dll) dengan GID yang sama ketika jumlah anggota dalam grup itu meningkat untuk membuat baris dalam file lebih lama dari panjang jalur maksimum OS. Saya secara manual melakukan itu pada yang lain, dan pada SunOS, dan Linux. Sampai kami bermigrasi ke LDAP, yaitu. :)
dannysauer
1
@ TomOnTime Ini bukan masalah apakah praktik buruk dilarang, tetapi lebih pada masalah apa yang didukung dan diuji oleh vendor. Saya tidak tahu ada vendor unix atau linux yang akan mendukung penggunaan tersebut. Mengingat bahwa itu tidak mungkin diuji, konsekuensinya tidak diuji dan tidak diketahui. Perusahaan mana pun yang mengikuti praktik terbaik akan mengikuti yang didukung oleh vendor. Tidak melakukan hal itu akan membuka pintu bagi tuntutan hukum jika masalah timbul di kemudian hari. Itu meminta potensi masalah. Untuk menggunakan fitur seperti itu, akan membutuhkan pengujian penuh dari semua jalur yang diperlukan. Itu akan sangat mahal.
Astara
4

Saya tidak dapat memberikan jawaban kanonik untuk pertanyaan Anda, tetapi secara anekdot perusahaan saya telah melakukan ini selama bertahun-tahun dengan pengguna root dan tidak pernah memiliki masalah dengan itu. Kami membuat pengguna 'kroot' (UID 0) yang satu-satunya alasan keberadaannya adalah memiliki / bin / ksh sebagai shell alih-alih / bin / sh atau bin / bash. Saya tahu Oracle DBAs kami melakukan sesuatu yang mirip dengan penggunanya, memiliki 3 atau 4 nama pengguna per instal, semua dengan ID pengguna yang sama (Saya percaya ini dilakukan untuk memiliki direktori home yang terpisah dengan masing-masing pengguna. Kami telah melakukan ini setidaknya untuk sepuluh tahun, di Solaris dan Linux. Saya pikir ini berfungsi seperti yang dirancang.

Saya tidak akan melakukan ini dengan akun pengguna biasa. Seperti yang Anda catat, setelah login awal semuanya kembali ke nama depan dalam file log, jadi saya pikir tindakan satu pengguna dapat disamarkan sebagai tindakan yang lain di log. Untuk akun sistem meskipun berfungsi dengan baik.

jj33
sumber
4

Apakah kemampuan ini dirancang atau itu hanya cara kerjanya terjadi?

Didesain seperti itu.

Apakah ini akan konsisten di seluruh varian * nix?

Seharusnya begitu.

Apakah ini praktik yang diterima?

Tergantung apa yang Anda maksud. Jenis hal ini menjawab masalah yang sangat spesifik (lihat akun root / toor). Di tempat lain dan Anda meminta masalah bodoh di masa depan. Jika Anda tidak yakin apakah ini solusi yang tepat, mungkin itu bukan.

Adakah konsekuensi yang tidak diinginkan terhadap praktik ini?

Sudah menjadi kebiasaan umum untuk memperlakukan nama pengguna dan UID sebagai yang dapat dipertukarkan. Seperti yang ditunjukkan beberapa orang lainnya, audit masuk / aktivitas akan tidak akurat. Anda juga ingin meninjau perilaku skrip / program terkait pengguna yang relevan (useradd distro Anda, usermod, skrip userdel, skrip pemeliharaan berkala, dll.).

Apa yang Anda coba selesaikan dengan hal ini yang tidak akan dicapai dengan menambahkan dua pengguna ini ke grup baru dan memberikan grup itu izin yang Anda butuhkan?

sh-beta
sumber
4

Adakah konsekuensi yang tidak diinginkan terhadap praktik ini?

Ada satu masalah yang saya ketahui. Cron tidak cocok dengan aliasing UID ini. Coba jalankan "crontab -i" dari skrip Python untuk memperbarui entri cron. Kemudian jalankan "crontab -e" di shell untuk memodifikasi yang sama.

Perhatikan bahwa sekarang cron (vixie, saya pikir) akan memperbarui entri yang sama untuk a1 dan a2 (di / var / spool / cron / a1 dan / var / spool / cron / a2).

Srid berkata Reinstate Monica
sumber
3

Ini adalah perilaku yang diharapkan pada semua distribusi yang saya lihat, dan merupakan trik umum yang digunakan 'musuh' untuk menyembunyikan akun dengan akses root.

Ini tentu saja bukan standar (saya belum melihat ini dalam permainan di mana pun), tetapi seharusnya tidak ada alasan bahwa Anda tidak dapat menggunakan ini di lingkungan Anda sendiri jika Anda mau.

Satu-satunya Gotcha yang terlintas dalam pikiran saat ini adalah bahwa hal ini dapat mempersulit audit. Jika Anda memiliki dua pengguna dengan uid / gid yang sama, saya yakin Anda akan kesulitan menentukan mana yang melakukan apa ketika Anda menganalisis log.

Michael Gorsuch
sumber
Ini benar. Login awal akan mendaftar sebagai a1 atau a2 di / var / log / secure, tetapi kegiatan selanjutnya bisa dicatat sebagai a1 tidak peduli bagaimana Anda masuk.
Tim
3

Berbagi ID grup utama adalah umum, jadi pertanyaannya benar-benar berkisar pada UID .

Saya telah melakukan ini sebelumnya untuk memberikan akses root kepada seseorang, tanpa harus membocorkan password root - yang telah bekerja dengan baik. (meskipun sudo akan menjadi pilihan yang lebih baik, saya pikir)

Hal utama yang saya harus berhati-hati adalah hal-hal seperti menghapus salah satu pengguna - program mungkin menjadi bingung dan menghapus kedua pengguna, atau file milik keduanya, atau hal-hal serupa.

Bahkan, saya berpikir bahwa programmer mungkin berasumsi hubungan 1: 1 antara pengguna dan UID, jadi ada kemungkinan konsekuensi yang tidak terduga dengan program lain yang mirip dengan apa yang saya jelaskan untuk userdel.

Brent
sumber
Berbagi ID grup tidak begitu umum, saya pikir, memiliki banyak pengguna menjadi satu grup. Ada perbedaan yang halus. Kuncinya benar-benar ada dalam penanganan UID. Poin bagus untuk menghapus, yang akan saya uji.
Tim
2

BTW - pertanyaan / jawaban ini diperbarui untuk OS hari ini.

Mengutip dari redhat: mengelola penugasan UID dan GID Number yang unik , ini menggambarkan penggunaan UID dan GID serta manajemennya dan bagaimana generator (server ID)

harus menghasilkan nilai UID dan GID acak dan secara bersamaan memastikan bahwa replika tidak pernah menghasilkan nilai UID atau GID yang sama. Kebutuhan untuk nomor UID dan GID yang unik bahkan mungkin melintasi domain IdM, jika satu organisasi memiliki beberapa domain yang berbeda.

Demikian pula, utilitas yang memungkinkan akses ke sistem dapat berperilaku tak terduga (referensi yang sama):

Jika dua entri diberikan nomor ID yang sama, hanya entri pertama yang dikembalikan dalam pencarian untuk nomor itu.

Masalahnya muncul ketika konsep "pertama" tidak jelas. Bergantung pada layanan yang diinstal, nama pengguna dapat disimpan dalam hash berukuran variabel yang akan mengembalikan nama pengguna yang berbeda berdasarkan faktor yang tidak konsisten. (Saya tahu ini benar, karena saya kadang-kadang mencoba menggunakan 2 nama pengguna dengan satu ID, satu menjadi nama pengguna lokal, dan yang lainnya menjadi domain.username yang ingin saya petakan ke UID (yang akhirnya saya bahas di cara yang berbeda), tetapi saya bisa masuk dengan "usera", melakukan "siapa" atau "id" dan melihat "userb" ATAU "usera" - secara acak.

Ada antarmuka untuk mengambil beberapa nilai UID dari grup (grup dengan GID tunggal dirancang untuk dikaitkan dengan beberapa UID), tetapi tidak ada antarmuka portabel untuk mengembalikan daftar nama untuk satu UID, jadi siapa pun yang mengharapkan yang sama atau perilaku serupa antara sistem atau bahkan aplikasi pada sistem yang sama mungkin terkejut.

Di Sun (sekarang oracle) yp (yellowpages) atau NIS (NetworkInformationServices), ada juga banyak referensi untuk persyaratan keunikan. Berbagai fungsi dan server khusus disiapkan untuk mengalokasikan ID unik di beberapa server dan domain (contohnya adalah uid_allocd, gid_allocd - UID dan GID daemon alokasi daemon manpage

Sumber ketiga yang mungkin diperiksa adalah dokumentasi server Microsoft untuk Pemetaan Akun NFS. NFS adalah protokol berbagi file unix dan mereka menggambarkan bagaimana izin dan akses file dikelola oleh ID. Di sana, mereka menulis:

  • UID. Ini adalah bilangan bulat yang tidak ditandatangani yang digunakan oleh sistem operasi UNIX untuk mengidentifikasi pengguna dan harus unik dalam file passwd.

  • GID. Ini adalah bilangan bulat yang tidak ditandatangani yang digunakan oleh kernel UNIX untuk mengidentifikasi grup dan harus unik dalam file grup. Halaman manajemen MS-NFS

Sementara beberapa OS mungkin telah mengizinkan beberapa nama / UID (turunan BSD, mungkin?) Sebagian besar OS bergantung pada ini menjadi unik dan mungkin berperilaku tidak terduga ketika mereka tidak.

Catatan - Saya menambahkan halaman ini, karena seseorang menyebut entri bertanggal ini sebagai dukungan untuk utilitas modern untuk mengakomodasi UID / GID yang tidak unik ... yang kebanyakan, tidak.

Astara
sumber
1

Saya juga tidak tahu apakah itu ide yang bagus atau tidak, tetapi saya menggunakan perilaku di atas di beberapa tempat. Sebagian besar untuk akun yang digunakan untuk mengakses server ftp / sftp dan memperbarui konten situs web. Tampaknya tidak merusak apa pun dan tampaknya membuat penanganan izin lebih mudah daripada dengan beberapa akun.

Sakit kepala
sumber
0

Hanya mengalami masalah (agak tidak jelas) yang berasal dari penggunaan beberapa akun dengan UID yang sama, dan berpikir saya akan membagikannya sebagai contoh mengapa ini bukan praktik yang baik.

Dalam kasus saya, vendor menyiapkan server basis data Informix dan server aplikasi web di RHEL 7. Selama penyiapan, beberapa akun "root" dengan UID 0 dibuat (jangan tanya kenapa). Yaitu, "root", "user1" dan "user2", semuanya memiliki UID 0.

Server RHEL 7 kemudian bergabung dengan domain Direktori Aktif menggunakan winbind. Pada titik ini, server Informix DB tidak lagi dapat memulai. Menjalankan oninitgagal dengan pesan kesalahan yang mengatakan itu "Must be a DBSA to run this program".

Inilah yang kami temukan saat pemecahan masalah:

  1. Menjalankan id rootatau getent passwd 0(untuk menyelesaikan UID 0 menjadi nama pengguna) pada sistem Active Directory bergabung akan secara acak mengembalikan "user1" atau "user2" bukannya "root".

  2. Informix tampaknya mengandalkan perbandingan string untuk memeriksa apakah nama pengguna tekstual dari pengguna yang memulai itu adalah "root" dan akan gagal sebaliknya.

  3. Tanpa winbind, id rootdan getent passwd 0secara konsisten akan mengembalikan "root" sebagai nama pengguna.

Cara mengatasinya adalah menonaktifkan caching dan kegigihan di /etc/nscd.conf:

enable-cache    passwd      no
persistent      passwd      no

Setelah perubahan ini, UID 0 sekali lagi secara konsisten diselesaikan ke "root" dan Informix dapat memulai.

Semoga ini bermanfaat bagi seseorang.

Daibhi O Domhnaill
sumber
Saya punya perasaan bahwa ini bekerja dan bahkan tidak sepenuhnya "disukai" ketika UID 16-bit angka dan hanya digunakan sebagai cara untuk masuk ke mesin. Demikian pula, saya merasa ini mulai berubah dengan diperkenalkannya UUID dan GUID, pada 128 bit / angka yang khusus dibuat pada ukuran itu untuk membuatnya sangat tidak mungkin bahwa dua pengguna yang berbeda akan berakhir dengan ID yang sama. Ini untuk pelacakan, penagihan + lisensi. Ketika pemerintah meningkatkan kontrol teknologi, persyaratan untuk ID unik telah meningkat. Diperlukan untuk mengupas anonimitas. Tidak, saya tidak paranoid, sungguh! ; ^ /
Astara