Spesifikasi POSIX untuk chown
utilitas menyebutkan di bagian rasionalnya tentang chown user:group
sintaks (sebelumnya chown user.group
) (penekanan milik saya):
Metode 4.3 BSD menentukan pemilik dan grup dimasukkan dalam volume POSIX.1-2008 ini karena:
- Ada kasus di mana kondisi akhir yang diinginkan tidak dapat dicapai menggunakan utilitas chgrp dan chown (yang hanya mengubah ID pengguna). (Jika pemilik saat ini bukan anggota dari grup yang diinginkan dan pemilik yang diinginkan bukan anggota dari grup saat ini, fungsi chown () dapat gagal kecuali jika pemilik dan grup diubah pada saat yang sama.)
Saya pikir user:group
sintaks adalah hal yang mudah. Sekarang hal di atas menyiratkan ada hal-hal yang dapat Anda lakukan dengan chown user:group
yang tidak dapat Anda lakukanchgrp group; chown user
Sekarang teks itu tidak masuk akal bagi saya. Di 4.3BSD, hanya root yang bisa mengubah pemilik file sehingga dalam hal apa pun tidak ada batasan dalam apa yang bisa ia lakukan.
SysV dan beberapa sistem lainnya memungkinkan (atau digunakan untuk mengizinkan) pemilik file untuk mengubah pengguna dan grup file menjadi apa pun, tetapi bahkan dalam sistem tersebut, teks di atas tidak masuk akal bagi saya. OK, jika seseorang melakukan a chown someone-else the-file
, ia tidak dapat melakukannya chgrp something-else the-file
setelah itu karena ia bukan lagi pemilik file, tetapi tidak ada yang mencegahnya melakukan yang chgrp
pertama (tetap menjadi pemilik file) dan chown
setelahnya, dan bukan itu yang teks di atas persis mengatakan.
Saya tidak mengerti apa dan pemilik yang diinginkan bukan anggota dari grup saat ini yang ada hubungannya dengan masalah tersebut.
Jadi apa saja kondisi di mana fungsi chown () bisa gagal kecuali jika pemilik dan grup diubah pada saat yang sama , dan pada sistem apa?
chown me:my-group file
jika file berada di lokasi di mana saya memiliki akses baca / tulis (tidak lengket). Saya tidak bisa chgrp dulu karena bukan pemilik. Saya tidak bisa chown dulu karena ini akan menghasilkan file yang tidak bisa saya buat: saya memiliki file dengan grup yang bukan anggota saya.Jawaban:
The Microsoft Interix Unix subsistem (sekarang pensiun) untuk kernel NT yang ditangani kecil yang berbeda dengan pengguna dan kelompok hak akses dari beberapa orang lain lakukan:
Berikut adalah beberapa kutipan manual yang lebih spesifik:
Saat saya membacanya, itu berarti bahwa jika akun pengguna Anda milik grup Windows dengan hak istimewa yang cukup untuk memodifikasi izin file yang dimiliki oleh grup itu, maka dimungkinkan untuk secara efektif
chgrp
file itu di luar kendali akun pengguna Anda. Ini berarti kontrol yang lebih rendah daripada yang mungkin Anda miliki denganchown
danuser:group
parameter eksplisit . Dalam konteks itu tanpa kemungkinan menyatakanuser:
dan:group
Anda tidak akan pernah bisa mencapai hasil yang sama seperti sebaliknya.Berikut ini adalah tautan ke tampilan terperinci tentang bagaimana Interix berinteraksi dengan Windows ACL dengan fokus pada bagaimana pengetahuan tersebut mungkin berlaku untuk sistem file Samba pada varian Unix lainnya.
Berikut ini tautan ke dokumen Solaris yang sekarang sudah usang yang menjelaskan tentang merdu
rstchown
yang ...Rupanya, jika parameter diatur ke nilai
0
...Opsi seperti itu tidak membatalkan kesesuaian POSIX Solaris . Hanya saja itu adalah opsi yang memenuhi syarat sebagai konforman :
Fungsi
chown()
sistem - yang merupakan panggilan sistem terdokumentasi yang dibuat oleh utilitas shellchown
danchgrp
- adalah ditentukan untuk gagal karena berbagai alasan. Diantara mereka:Namun, perilaku pemberian hak modifikasi izin kepada pengguna non-root tidak pernah unik bagi Solaris. Ada cakupan sangat baik - jika agak tanggal - izin file Unix dalam posting forum ini di mana penulis menyatakan:
Pos mailing list lain yang bagus - dan yang lebih baru - mengutip ini dan berlanjut:
Dan seperti yang Anda tunjukkan pada tahun 2003 :
... yang tergantung pada konfigurasi
setprivgroup
parameter .Dalam kasus apa pun di mana pengguna non-root dapat memanipulasi file-izin itu dapat dibayangkan, seperti yang disebutkan dalam alasan yang dikutip dalam pertanyaan Anda, bahwa pengguna mungkin
chown
memiliki file yang dimiliki pengguna sehingga dimiliki oleh pengguna lain. Jika kepemilikan grup file dan grupchown
pengguna tidak sejajar, maka pengguna tidak lagi dapat memodifikasi file itu.Dalam skenario ini
chown
makachgrp
akan gagal karena pengguna tidak lagi memiliki izin untuk mengubah izin file itu, sedangkanchown user:group
- selama grup berada di antara pengguna sendiri - akan berhasil.Ada mungkin banyak situasi niche lain yang mungkin mengakibatkan sama, yang mungkin termasuk direktori lengket dan / atau setgid bit, file sistem dan / atau daftar akses kontrol implementasi khusus. Utas ini menarik, misalnya. Permutasi yang tak terhitung jumlahnya jauh melampaui genggaman lemah saya sendiri - itulah sebabnya mengapa jawaban ini digunakan. Jika Anda membaca ini, Anda yakin itu layak untuk ditingkatkan, dan Anda yakin Anda tahu caranya - silakan lakukan .
Ada juga dokumentasi yang luas tentang berbagai efek yang mungkin terjadi dari izin file, traversal pohon, dan tautan simbolik yang mungkin berdampak pada kegagalan yang serupa sehubungan dengan aplikasi
-R
ecursive dichown
sini:Dari judul bagian POSIX XRAT, Domain Ketiga dan Keempat :
Dan dari
chgrp
halaman POSIX yang tepat ada ini yang menunjuk pada kemungkinan-R
tindakan ecursive yang tidak lengkap , atau setidaknya apa yang dulu :sumber
chgrp
chown
... mungkin tidak berperilaku seperti yang Anda harapkan ...Asumsi 1: aturan untuk menentukan apakah
chown
berhasil memeriksa pengguna target dan bagian-bagian kelompok secara mandiri, yaitu mereka dari formuliruser_condition(target_uid, other_environment_parameters) && group_condition(target_gid, other_environment_parameters)
.Asumsi 2:
chown(file, -1, -1)
berhasil.Asumsi 3: aturan untuk menentukan apakah
chown
berhasil tidak bergantung pada grup mana file saat ini milik.Konsekuensi: jika
chown(file, uid, gid)
mau berhasil maka demikian jugachown(file, -1, gid) && chown(file, uid, -1)
.Saya tidak tahu varian Unix yang akan melanggar asumsi-asumsi ini, mereka tampaknya cukup aman.
Kalimat ini memiliki tampilan seperti yang dikatakan seseorang dalam komite ketika mereka lelah setelah berjam-jam berdebat berapa banyak pilihan yang bisa diterima di kepala suatu
ps
panggilan telepon - atau bahwa sekretaris salah menerjemahkan - dan tidak ada yang tertangkap selama peninjauan. Lagi pula, ada alasan lain yang bagus untuk memungkinkan pengguna dan grup diubah secara otomatis, termasuk alasan kinerja yang juga dikutip dalam alasan POSIX, serta atomicity (ah, jika saja ada satu panggilan untuk mengubah kepemilikan dan izin) ).Kasus di mana asumsi 3 bisa salah ada pada sistem di mana proses bisa mendapatkan kemampuan untuk mengubah pemilik file tetapi hanya jika mereka memiliki izin menulis pada file. Meskipun agak realistis, saya tidak tahu sistem apa pun di mana ini terjadi. Kemudian
chgrp
ke grup dari proses yang berjalan baik sebagai root atau sebagai pengguna yang memiliki file dapat membuat file terlarang untuk nantichown
.Untuk panggilan rekursif, ada kasus tepi di mana seluruh operan
chgrp
diikuti oleh operan keseluruhanchown
dapat gagal ketika satu operan berhasil. Ini bukan argumen yang sangat meyakinkan karena melibatkan direktori bahwa pemiliknya tidak memiliki izin untuk melintasi, dan aplikasi yang ingin melindungi terhadap semua kasus seperti itu perlu mengutak-atik izin. Meskipun demikian secara teknis memenuhi kondisi pemikiran ini. Asumsikan bahwa proses yang berjalan memiliki pengguna yang efektifalice
, grup yang efektifstaff
, dan kemampuan untuk mengubah pemilik file secara sewenang-wenang (bukan hanya untuk memberikannya; beberapa varian unix memiliki kemampuan seperti itu, meskipun jarang diberikan pada proses non-root).sumber
chgrp
atauchown
bisa memiliki efek samping yang mempengaruhi kemampuan untuk melakukan yang lain. Misalnyachown
menghilangkan kemampuan untukchgrp
, itu fakta.chgrp
menghapus bit setuid / setgid, mungkin menghapus beberapa bentuk ACL atau bentuk lain dari konteks keamanan ...chown
diikuti olehchgrp
bisa gagal, tetapi pertanyaannya adalah tentangchgrp
diikuti olehchown
. Hmmm, konteks keamanan ... mungkin dalam sistem dengan kontrol akses wajib,chgrp
dapat menodai file dan membuatnya tidak lagi bisa dikenali? Itu tampaknya dibuat-buat.dir
, jadi untuk itu untuk bekerja,chown
perlu memproses kedalaman file terlebih dahulu dan saya tidak tahu ada implementasi yang melakukannya. Jadi ini adalah kasus yang hampir valid di mana chgrp + chown akan gagal di mana chmod u: g tidak bisa, tetapi itu tidak benar-benar cocok dengan teks rasionalnya.chown
teori rekursif tepi-kasus tampaknya bertentangan.