Saya tidak dapat menghapus file yang saya miliki izin untuk menulis sebagai anggota grup

12
$ touch testfile
$ chmod g+w testfile
$ sudo adduser user2 user1
$ stat -c'%a %A' testfile
664 -rw-rw-r--
$ su user2
Password: 
$ groups
user2 user1
$ rm testfile 
rm: cannot remove `testfile': Permission denied

Apa yang hilang?

tepang
sumber

Jawaban:

21

Menghapus file berarti Anda membuat perubahan pada direktori tempatnya berada, bukan file itu sendiri. Grup Anda perlu rw di direktori untuk dapat menghapus file. Izin pada file hanya untuk membuat perubahan pada file itu sendiri.

Ini mungkin membingungkan pada awalnya sampai Anda berpikir tentang cara kerja sistem file. File hanyalah inode, dan direktori merujuk ke inode. Dengan menghapusnya, Anda hanya menghapus referensi ke inode file itu di direktori. Jadi Anda mengubah direktori, bukan file. Anda dapat memiliki tautan keras ke file itu di direktori lain, dan Anda masih dapat menghapusnya dari direktori pertama tanpa benar-benar mengubah file itu sendiri, itu masih ada di direktori lain.

jsbillings
sumber
Saya dapatkan 775 drwxrwxr-xuntuk direktori.
tshepang
1
Apa kepemilikan grup dari direktori? Ingat, 7 detik yang Anda sebutkan adalah izin yang dimiliki grup direktori, bukan grup pengguna Anda.
jsbillings
1
ls -ld /path/to/directoryatau hanya ls -ld .jika Anda sudah cd ke direktori itu.
jsbillings
1
untuk alasan apa pun, stat tidak dapat mencari ID grup 1002. stat mencari ID grup di / etc / group, NIS, LDAP, dll, dan itu mendapatkan kesalahan, itu sebabnya Anda melihat UNKNOWN. Saya akan mencoba berlari getent group 1002untuk melihat apakah itu memberi Anda kesalahan yang lebih banyak.
jsbillings
1
Sebenarnya, saya tidak menemukan perilaku ini membingungkan sama sekali. Ini identik dengan cara kerja direktori "kehidupan nyata" yang sebenarnya, itulah sebabnya mengapa disebut "direktori", dan tidak, misalnya, "folder", yang akan berperilaku sangat berbeda. Jika saya ingin menghapus seseorang dari direktori ponsel saya, saya tidak pergi ke rumahnya dan membunuhnya, saya hanya mengambil pena dan memeriksa nomornya. TKI: Saya perlu akses tulis ke direktori, dan tidak ada akses padanya. Windows memiliki folder, Unix memiliki direktori, dan keduanya berperilaku seperti rekan kehidupan nyata mereka. Kebingungan hanya terjadi jika Anda mencampuradukkannya.
Jörg W Mittag
0

Hanya sistem yang dapat menghapus file, dan hanya jika tidak memiliki referensi. Seorang pengguna biasa hanya dapat memutuskan tautan suatu file, yaitu menghapusnya dari suatu direktori. Anda perlu akses tulis ke direktori untuk memutuskan tautan file darinya. Membatalkan tautan file tidak mengubah file, jadi akses tulis ke file tidak relevan.

David Schwartz
sumber