Mengapa pengguna yang tidak memiliki hak tidak dapat mengubah kepemilikan file?

15

Dari chown (2):

Hanya proses istimewa (Linux: satu dengan kemampuan CAP_CHOWN) yang dapat mengubah pemilik file. Pemilik file dapat mengubah grup file ke grup mana pun yang pemiliknya adalah anggota. Proses istimewa (Linux: dengan CAP_CHOWN) dapat mengubah grup secara sewenang-wenang.

Apa alasan pembatasan ini? Mengapa pengguna yang tidak memiliki hak tidak dapat mengubah kepemilikan file dari file yang dimilikinya (mis. Tidak ada / etc / shadow)?

$ touch blah
$ chown root:root blah
chown: changing ownership of `blah': Operation not permitted
Alexandru
sumber

Jawaban:

27

Dengan memungkinkan pengguna untuk "memberikan" file, Anda menjalankan berbagai fitur OS. Seperti:

Taking up another user's disk quota.
Impersonating another user (or even root) via setuid.
Having insufficient privileges to undo a mistaken chown.
Making it appear that someone else had created a given file.
Setting up cron jobs to run on other user's accounts.
And many more...
Chris Nava
sumber
8

Ini hanya pilihan pribadi para perancang linux untuk tidak mengizinkannya - semua alasan keamanan semu, yang diberikan , bersifat khusus, karena ada sistem unix yang memungkinkan ini.

Saya pikir fungsi ini turun ke apakah perilaku unix Anda mengikuti 'System-V' (AT&T) atau Berkeley's unix (BSD) ...

Adapun masalah keamanan lain yang disebutkan:

  • Menyamar sebagai pengguna lain (atau bahkan root) melalui setuid.

    Non-masalah: Mengubah 'pemilik' menghapus bit 'setXid' (U / G)

  • Memiliki hak istimewa yang tidak memadai untuk membatalkan chown yang salah

    Bukan benar-benar 'risiko keamanan', TETAPI itu mungkin pada sistem yang memungkinkan perubahan pengguna, Anda dapat mengubahnya kembali jika berada di direktori yang Anda miliki, bijaksana lain: 'hati-hati'!

  • Tampaknya orang lain telah membuat file yang diberikan.

    Itu masih berada di direktori yang dapat Anda tulis. Yaitu Anda tidak dapat memindahkannya ke homedir mereka, kecuali jika sudah terbuka untuk menulis ke grup Anda atau semua (atau Anda secara khusus jika ACL tersedia).

  • Menyiapkan pekerjaan cron untuk dijalankan di akun pengguna lain.

    Sekali lagi, tidak akan berfungsi - karena crondir dimiliki oleh pengguna dan bahkan tidak dapat dibaca oleh pengguna lain, apalagi dapat ditulis.

  • jika ada yang bisa mengubah kepemilikan, maka siapa pun dapat mengubah izin untuk mendapatkan akses ke file apa pun di sistem.

    Tidak: hanya jika pengguna 'memiliki' direktori yang berisi file itu. Yaitu saya bisa memberikan file bernama 'passwd' untuk di-root, tapi saya tidak bisa memindahkannya ke / etc / kecuali saya punya izin menulis ke / etc /.

  • kuota

    Poin yang berpotensi valid - JIKA Anda menggunakan kuota, tetapi sepertinya akan mudah untuk mendeteksi jika Anda meringkas ruang disk dengan dir-home; Satu-satunya masalah adalah dir yang dapat ditulis oleh banyak pengguna. Dalam hal ini, mungkin pergi oleh pemilik 'dir' itu. Ini MUNGKIN menjadi kasus pada sistem-sistem yang mendukung 'memberikan' file, bahwa Anda hanya dapat melakukan ini di direktori yang Anda 'sendiri', tapi sudah lama sejak aku sudah benar-benar berada di sistem yang memungkinkan ini, sehingga Saya tidak ingat batasan pastinya.

Sepertinya saya ingat ada beberapa 'trade-off' untuk memungkinkan 'memberikan file' ... misalnya - pada sistem yang memungkinkan itu, sesuatu yang lain tidak diizinkan yang memang dibolehkan linux, tetapi tidak dapat mengingat apa yang tidak aktif tangan...

Saya akan mengatakan 'jawaban' di atas tidak bertanda sebagai jawabannya, karena BUKAN jawaban yang sebenarnya. Ini lebih merupakan keputusan desain - saya hanya tidak tahu apa untungnya.

Mungkin ada masalah keamanan yang tidak diangkat di atas yang akan menjadi kekhawatiran yang valid, tetapi yang di atas tidak valid.

IMO, itu harus menjadi 'nilai' yang dapat diatur sistem dalam "/ proc", tetapi secara umum, saya pikir kebanyakan orang tidak terlalu peduli.

Jika ada kebutuhan yang kuat untuk itu, 'chown' dapat ditingkatkan keamanannya dan dimodifikasi untuk memperbolehkannya dan kemudian mengatur tanpa 'root' untuk memungkinkannya mengimplementasikan kebijakan semacam itu.

Astara
sumber
Kuota selalu didasarkan pada kepemilikan file , bukan lokasi . Kalau tidak, seseorang bisa menyimpan semuanya /tmp.
user1686
+1, Anda benar sekali :). Pada sistem OpenSolaris (yang memang merupakan keturunan System V), Anda dapat mengatur ini melalui mountopsi (karena itu pengaturan ini dapat dibatasi pada satu titik pemasangan bukannya lebar sistem sesuai dengan saran nilai yang dapat diatur oleh sistem Anda): rstchown(default ) untuk membatasi perubahan pemilik file ke pengguna root, norstchownuntuk memungkinkan pengguna yang tidak memiliki hak pribadi mengubah pemilik file mereka sendiri (mereka tidak dapat mengubahnya kembali).
WhiteWinterWolf
6

Nah, jika ada yang bisa mengubah kepemilikan, maka siapa pun dapat mengubah izin untuk mendapatkan akses ke file apa pun di sistem. Ini buruk tidak hanya dari sudut pandang malware (tidak diperlukan sudo), tetapi dari sudut pandang sysadmin. Jika ada pengguna yang dapat mengubah file, maka izin file tidak berguna.

Halo71
sumber
2
Baik. Saya memodifikasi pertanyaan agar jelas bahwa saya merujuk pada file yang dimiliki pengguna dan bukan file apa pun.
Alexandru
1
@Alexandru: pikirkan tentang pengguna jahat yang berubah myTrojan.shuntuk dimiliki oleh root dan memiliki bendera SUID.
Benjamin Bannier
@honk: masuk akal sekarang.
Alexandru
5

Karena dengan begitu pengguna dapat menghindari kuota sistem file. Jika saya mendapat kuota 100MB dan kuota 100MB, saya bisa mengunggah 100MB, chmod a + r, chown Anda, lalu unggah 100MB lainnya.


sumber