'Izin ditolak' ke file yang saya miliki?

13

Pengguna saya, bob, tidak dapat mengakses file yang ia (secara teoritis miliki). Saya menjalankan Fedora Core 8. Mungkin lebih mudah ditampilkan daripada memberi tahu:

> ls -al .
total 32
drwxrwxr-x 7 bob bob 4096 May 18 14:33 .
drwxrwxr-x 4 bob bob 4096 May 12 15:44 ..
drwxr-xr-x 2 bob bob 4096 June 1 14:22 log

> cd ./log
-bash: cd: log/: Permission denied

> ls -al ./log
ls: cannot access log/..: Permission denied
ls: cannot access log/the.log: Permission denied
ls: cannot access log/.: Permission denied
total 0
d????????? ? ? ? ?            ? .
d????????? ? ? ? ?            ? ..
-????????? ? ? ? ?            ? the.log

> sudo ls -al ./log
drw-rw-r-- 3 bob bob      4096 Jun  2 04:11 .
drwxrwxr-x 7 bob bob      4096 May 18 14:33 ..
-rw-rw-r-- 1 bob bob         0 Jun  1 04:12 the.log

Yang ls -almenonjol sangat aneh. Itu akan menampilkan file yang saya tidak punya izin untuk melihatnya, tetapi tidak menunjukkan saya izin?

Jadi pertanyaannya adalah, apa yang menyebabkan ini? Dan apa yang bisa saya lakukan untuk memperbaikinya?

Gordon Wilson
sumber

Jawaban:

17
> sudo ls -al ./log
...
drw-rw-r-- 3 bob bob      4096 Jun  2 04:11 .

Sepertinya Bob tidak menjalankan izin untuk ./log, jadi ia tidak cdbisa melakukannya.

Tapi

> ls -al .
...
drwxr-xr-x 2 bob bob 4096 June 1 14:22 log

menunjukkan bahwa dia melakukannya. Tapi sepertinya mereka tidak menunjuk ke file yang sama (izin berbeda, modtime berbeda).

Coba sudo ls -ail ./logdan ls -aillihat apakah inodenya sama.

CoverosGene
sumber
10

Hal-hal lebih sederhana daripada korupsi filesystem atau selinux. Seperti yang Anda lihat, Anda kehilangan izin x (executable) pada direktori log. Sebenarnya untuk direktori x berarti seseorang dapat mengubah direktori tersebut. Lakukan saja "chmod + x log" untuk memperbaiki perm itu dan Anda harus dapat mengaksesnya.


sumber
> Sebenarnya untuk direktori x berarti seseorang dapat mengubah ke direktori itu Wow. Saya terus lupa itu; Terima kasih.
yPhil
6

Saya telah melihat hal-hal seperti itu ketika filesystem rusak, atau jika Anda memiliki drive yang gagal. Cara mengatasinya biasanya adalah menjalankan fsck terhadap sistem file dan membiarkannya memperbaiki kesalahan yang telah ditemukan.

Sakit kepala
sumber
Saya melakukan ini sekitar satu jam yang lalu di salah satu server file saya. +1
Thomas Denton
2

Juga, periksa pengaturan SE / Linux. Terkadang izin pada file tidak ada hubungannya dengan apakah Anda dapat mengaksesnya atau tidak.

David Mackintosh
sumber
1
Saya Setuju dengan @David Mackintosh. Jika SELinux diaktifkan dan jika file / direktori dibuat oleh orang lain dan kemudian berubah kepemilikan menjadi bob, ini kemungkinan terjadi. sebagai konteks file tetap dengan penulis asli dan tidak dapat diakses sampai konteksnya juga diubah menjadi pengguna Bob.
Viky
2

File-file itu mungkin memiliki atribut yang diperluas yang tidak berubah atau hanya ditambahkan yang ditetapkan. Saya sudah pernah mengalami ini sebelumnya dan bahkan root tidak bisa menghapus file.

Atribut yang diperluas dapat dilihat melalui "lsattr" dan diubah melalui "chattr"

Haakon
sumber
1
> sudo ls -al ./log
drw-rw-r-- 3 bob bob 4096 2 Jun 04:11.

Saya tidak yakin mengapa tetapi "." entri ./log/ tidak memiliki izin eksekusi. Izin harus identik dengan yang untuk ./log.

Bisakah Anda mencoba chmod 755 ./log dan chmod 755 ./log/. dan lihat apakah salah satu perintah memperbaiki akses?

Selain itu saya akan menyarankan Anda menjalankan fsck pada sistem file karena sepertinya tidak sinkron.

Russell Heilling
sumber
1

Sudahkah Anda mencoba mengubah kepemilikan direktori ke orang lain, lalu kembali ke Bob? Saran Zoredache lebih baik, tapi - fsck saja!

RainyRat
sumber
2
Jenis masalah ini selalu berakhir dengan izin direktori.
doublejosh
1

Jawaban IMO yang lebih ringkas.

Direktori Anda tidak memiliki izin yang dapat dieksekusi, yang diharuskan oleh cd .

Memperbaiki:

$ sudo chmod +x ./log

Secara rekursif:

$ sudo chmod -R +x ./log

+ x menambahkan atribut yang dapat dieksekusi. Anda selalu dapat menghapus atribut dengan melakukan -x

Justin Fortier
sumber