sudo chown gagal dengan operasi tidak diizinkan

8

Saya telah menemukan pertanyaan serupa di sini, tetapi jawaban yang diberikan untuk pertanyaan itu tidak menyelesaikan masalah saya.

Jika aku melakukan:

sudo chown <username> main.m

Saya mendapatkan operasi yang tidak diizinkan kesalahan.

Solusi umum untuk kesalahan sebelumnya adalah:

sudo chflags nouchg main.m

untuk menghapus bendera kunci. Namun, setelah melakukan ini, saya masih tidak bisa melihat file. Saya juga sudah mencoba:

chflags noschg main.m

dalam mode pengguna tunggal tanpa keberuntungan - Saya mendapatkan operasi yang tidak diizinkan kesalahan.

Jika ada yang punya pikiran, saya akan tertarik.

ericg
sumber
Apa hal mendasar yang sedang Anda coba lakukan? Mungkin ada alasan mengapa file itu terkunci.
Tamara Wijsman
Jadi saya dapat menggunakannya sebagai data uji tanpa menempatkan kode dalam alat bantu yang aman, yang membutuhkan kerja ekstra untuk men-debug - bukan tidak mungkin, tetapi cukup menjengkelkan bahwa jika saya dapat mengubah atribut file sehingga alat bantu yang aman tidak diperlukan, itu akan membuat segalanya lebih mudah. Menimbang bahwa ini hanyalah data uji yang telah dibuat, tidak ada lagi alasan yang baik untuk memiliki kunci.
ericg
1
Tipe sistem file apa yang digunakan? Anda tidak mencoba menggunakan chownsistem file NTFS / FAT, bukan?
Zoredache
@ ericgorr: Sebagian besar di atas kepala saya; Saya tidak tahu apa sebenarnya alat bantu yang aman itu. Tetapi seperti yang Anda katakan, itu hanya data uji yang telah dibuat; sudahkah Anda menutup file tes dengan benar dalam kode Anda?
Tamara Wijsman
@ Tom alat bantu adalah cara OS X memberikan aplikasi hak istimewa yang ditinggikan sambil mempertahankan hak istimewa - jadi jika aplikasi ingin memodifikasi file yang aman, misalnya, ia memberi tahu alat bantu helper (resmi) untuk memodifikasi file untuk itu. Saya kira ericgorr ingin menghindari meninggikan aplikasinya atau sesuatu untuk menghindari debugging ketat yang menyertainya.
Jelas

Jawaban:

8

File Mac dapat dilindungi dalam empat tiga cara berbeda yang saya ketahui:

  1. Kepemilikan dan izin Unix standar seperti r / w / x untuk pengguna / grup / orang lain yang Anda lihat ls -ldan perbaiki bersama chown(1)dan chmod(1).
  2. File flag suka uchgdan schgyang Anda lihat ls -lOdan perbaiki chflags(1).
  3. Metadata Finder lama "Kunci bit" yang Anda lihat GetFileInfo filename. Anda juga dapat melihat keberadaan metadata Finder, tetapi tidak maknanya, dengan ls -l@. Anda dapat memperbaikinya dengan SetFile(1). Sudahlah, ini sudah dipetakan ke uchgbendera sekarang.
  4. Daftar Kontrol Akses (ACL) yang Anda lihat ls -ledan perbaiki dengan argumen terkait ACL chmod(1).

Jadi mari kita lihat apa yang terjadi dengan file Anda dengan menggabungkan semua flag tersebut ke ls:

ls -lO@e main.m

Sepertinya Anda sudah tahu cara menangani # 1 dan # 2.

Jika Anda melihat ACL (# 4), Anda dapat memperbaikinya dengan argumen terkait ACL untuk chmod(1).

Jika Anda masih bingung, perbarui Jawaban Anda dengan output dari lsperintah gabungan yang saya sarankan di atas, sehingga kita dapat melihat apa yang terjadi.

Spiff
sumber
Masalahnya tampaknya dengan ACL. Saya merasa menarik bahwa sudo tidak mendapatkan satu di sekitar kunci tersebut. Selain itu, chmod -R -a # 0 * memang menghapus ACL dari sebagian besar file dalam hierarki, tetapi gagal menghapusnya dari beberapa - menggunakan sudo dengan chmod tidak membantu.
ericg