Mengapa pengguna baru mewarisi file dari pengguna yang dihapus?

24

Jadi saya harus melakukan latihan dalam sebuah buku sebagai pekerjaan rumah. Pertama, Anda harus membuat pengguna seperti:

useradd -c "Steven Baxter" -s "/bin/sh" sbaxter

Maka Anda harus menambahkan beberapa file ke /home/sbaxterdirektori:

touch /home/sbaxter/ some.txt new.txt files.txt

Kemudian Anda harus menghapus sbaxterpengguna dan membuat nama pengguna baru mjane. Yang mengejutkan saya ketika saya berlari find /home/ -user mjane, pengguna baru mjanesekarang memiliki semua file lama sbaxter, apa yang terjadi?

John
sumber

Jawaban:

41

Iblis ada di perinciannya, di useraddhalaman manual (Anda dapat melihatnya dengan mengeluarkan man 8 useradd):

   -u, --uid UID
       The numerical value of the user's ID. This value must be unique,
       unless the -o option is used. The value must be non-negative. The
       default is to use the smallest ID value greater than or equal to
       UID_MIN and greater than every other user.

Jadi akan menggunakan default untuk terkecil uid yang tidak terpakai, yang lebih besar dari pengguna lain, dalam file kata sandi. Melihat menghapus sbaxter menghapusnya dari file passwd, uid-nya "bebas" dan ditugaskan ke mjane (karena useraddpick uid adalah sama untuk kedua pengguna pada saat useraddperintah itu digunakan).

File pada disk hanya menyimpan uid, dan BUKAN terjemahan nama pengguna (karena terjemahan ini didefinisikan dalam file kata sandi). Anda dapat mengonfirmasi bahwa dengan mengeluarkan ls -lnuntuk melihat apa yang dimiliki file kepemilikan uid.

Saya sebenarnya menyarankan Anda menonaktifkan daripada menghapus akun. Mengunci akun di sebagian besar distribusi Linux dapat dicapai dengan usermod -L -e today <username>, yang mengunci kata sandi dan menetapkan akun untuk kedaluwarsa hari ini (Anda dapat melihat tanggal kedaluwarsa dari sebuah akun dengan chage -l).

Drav Sloan
sumber
2
... ini sepertinya cacat keamanan yang mengerikan. Apakah ada cara untuk mengatasinya?
BlueRaja - Danny Pflughoeft
6
@ BlueRaja-DannyPflughoeft Ini bukan kelemahan keamanan: pengguna diidentifikasi dengan ID pengguna mereka, bukan dengan nama pengguna mereka. Ketika Anda menghapus akun, Anda harus menghapus semua file-nya (yaitu semua file yang dimiliki oleh ID pengguna ini, bukan hanya direktori home pengguna). Ini adalah bagian dari prosedur normal untuk menghapus akun.
Gilles 'SANGAT berhenti menjadi jahat'
2
@OlivierDulac Itu disebut cadangan. Atau, kunci tetapi jangan menghapus akun selama Anda perlu menyimpan datanya. Lagi pula, jika Anda perlu menyimpan data, maka akun masih diperlukan.
Gilles 'SANGAT berhenti menjadi jahat'
1
Mengunci akun di sebagian besar distribusi Linux dapat dicapai dengan usermod -L -e today <username>, yang mengunci kata sandi dan menetapkan akun untuk kedaluwarsa hari ini (Anda dapat melihat tanggal kedaluwarsa dari sebuah akun dengan chage -l).
Drav Sloan
5
Ini adalah kelemahan keamanan, menurut standar saat ini. Seperti yang ditunjukkan contoh, ini berarti Anda tidak dapat mengaitkan manusia dengan file. Tentu, manusia mungkin sangat terkait dengan akun, tetapi file asosiasi <-> akun manusia <-> rusak karena daur ulang UID. Kemudian lagi, Unix tidak pernah memiliki keamanan besar dalam hal ini ( rootbisa memalsukan hampir semua hal). Anda perlu jejak audit untuk itu.
MSalters
13

UID dari pengguna yang dihapus digunakan kembali oleh pengguna baru, dan sistem file menggunakan UID untuk kepemilikan, bukan nama pengguna.

Ignacio Vazquez-Abrams
sumber