Mengapa laporan chown "Operasi tidak diizinkan" pada OS X?

65

Saya mencoba melakukan hal berikut di Mac saya (10.6.7):

sudo chown myusername:wheel ./entries

tetapi Unix / Mac mengembalikan "Operasi tidak diizinkan". Saat saya ls -lashfile pelakunya, tampilannya sebagai berikut:

8 -rwxrwxrwx   1 myusername  staff   394B Apr 26 23:26 entries

Saya sudah mencoba sudodan sudo su; tidak ada yang berhasil. Ada ide apa yang terjadi?

Saya mencoba chmodfile yang saya salin dari kotak Ubuntu lama saya. Sebagian besar file telah berhasil chmodsecara rekursif; hanya yang ini macet dan saya tidak mengerti mengapa.

josef.van.niekerk
sumber
1
Sudahkah Anda mencoba sudo chgrp wheel ./entries?
Tupai
1
Lakukan pemeriksaan sistem file. Buka Disk Utility, pilih volume Anda, dan klik Verifikasi Disk , lalu, jika perlu, Perbaiki Disk .
Daniel Beck
Pastikan file tidak terkunci di Finder (tidak ada lencana kunci pada ikon). Untuk mengubahnya, buka dialog Dapatkan Info dan hapus centang Terkunci .
Daniel Beck
Jika ini adalah volume "eksternal" (yaitu bukan volume sistem), Anda mungkin harus menghapus opsi "Abaikan kepemilikan pada volume ini". (Lihat di bagian bawah jendela Dapatkan Info untuk volumenya sendiri).
mivk

Jawaban:

85

Ya, Mac memiliki banyak perangkat tambahan untuk Unix di bidang file. Mengabaikan hal garpu sumber daya keseluruhan yang tidak digunakan lagi, ada:

  • yang izin Unix standar ugo rwx dan sebagainya. Alat Unix yang normal berlaku.
  • ACL , dapat dilihat dengan ls -ledan dapat diubah dengan chmod [ -a | +a | =a ].
  • flag file dapat dilihat dengan ls -lO(Modal oh, bukan nol) dan dapat diubah dengan chflags.
  • atribut diperluas , dapat dilihat dengan ls -l@(hanya kunci atribut) dan dapat dilihat dan diubah dengan xattr. (Gunakan xattr -hbantuan jika man xattrtidak memberi Anda apa-apa.)
  • Dimulai dengan OS X 10.11 "El Capitan", System Integrity Protection (SIP) lebih lanjut melindungi beberapa file dari perubahan dari proses biasa, bahkan ketika digunakan sudountuk menjalankan sebagai root. File yang dilindungi oleh SIP akan didaftar dengan ls -lOmemiliki restrictedbendera dan / atau terdaftar dengan ls -l@memiliki com.apple.rootlessatribut.

Anda dapat ditolak operasi pada file karena izin Unix, ACL, flag file, atau SIP. Untuk membuka kunci file sepenuhnya:

sudo chmod -N file        # Remove ACLs from file
sudo chmod ugo+rw file    # Give everyone read-write permission to file
sudo chflags nouchg file  # Clear the user immutable flag from file
sudo chflags norestricted file  # Remove the SIP protection from file
sudo xattr -d com.apple.rootless file # Remove SIP protection from file

Jika Perlindungan Integritas Sistem (SIP) diaktifkan, sudo chflags norestricteddan sudo xattr -d com.apple.rootlessjuga akan mengembalikan kesalahan "Operasi tidak diizinkan". Untuk menghapus tanda dan / atau atribut yang Anda butuhkan untuk boot ke pemulihan MacOS dan menjalankan perintah dari Terminal (Anda mungkin harus terlebih dahulu menggunakan Disk Utility untuk membuka dan memasang drive boot Anda, kemudian ingat file Anda akan berada di bawah /Volumes/Macintosh HDatau apa pun boot Anda drive bernama) atau nonaktifkan SIP sama sekali lalu reboot dan perintah-perintah tersebut kemudian akan berfungsi. Berhati-hatilah, bagaimanapun, bahwa pembaruan OS di masa mendatang kemungkinan akan mengembalikan restrictedtanda dan com.apple.rootlessatribut untuk semua file yang Anda hapus.

Menonaktifkan SIP tidak disarankan karena menghilangkan banyak perlindungan terhadap malware dan kerusakan yang tidak disengaja, plus itu tidak perlu ketika Anda bisa menghapus perlindungan berdasarkan per file. Jika Anda menonaktifkan SIP, aktifkan kembali ketika Anda selesai melakukan perubahan.

Perhatikan bahwa jika ls -lOmenunjukkan bahwa schgflag telah diset, Anda harus masuk ke mode single-user untuk membatalkannya. Saya tidak akan membahasnya di sini karena ada pertanyaan yang lebih besar tentang mengapa file memiliki flag yang ditetapkan dan mengapa Anda mencoba mengacaukannya dan apa konsekuensinya.

Pro tua
sumber
7
Menambah ini, bendera lain mungkin mencegah Anda untuk mengubah file Anda. Dalam skrip saya, saya meletakkansudo chflags -R nouchg,noschg,nouappnd,nosappnd,noopaque,dump .
djjeck
1
Catatan: jika sesuatu memiliki bendera "tidak dapat diubah", kotak centang Terkunci di Dapatkan Info akan dicentang dan berwarna abu-abu. "sudo chflags nouchg" memperbaikinya.
Foo Bar
1
Saya tidak bisa melakukan -Ndan ugo+rwkeduanya sekaligus (saya dapat Failed to clear ACL on file ugo+rw: No such file or directory) tetapi menjalankannya secara individual bekerja dengan baik. Jika diinginkan rekursif, itu -Rharus menjadi argumen pertama.
owenfi
3
Perhatikan bahwa Perlindungan Integritas Sistem (tanpa akar) juga dapat menyebabkan hal ini pada El Capitan dan yang lebih baru. Untuk mengatasinya, boot ke Recovery Mode ( Cmd-R), buka Terminal dan jalankan csrutil disable, kemudian restart (untuk mengaktifkan kembali, gunakan csrutil enable).
Erwin Wessels
Terima kasih ... Saya tidak tahu tentang flag file. Sekarang saya mengerti mengapa dikatakanoverride rwxrwxrwx huttarl/staff uchg for green.html?
LarsH
18

Saya memiliki masalah yang sama. Ternyata file yang menyinggung itu ditandai sebagai "Terkunci" oleh OS. Saya menemukan solusi ini dan menyelesaikan masalah dalam hitungan detik:

http://explanatorygap.net/2005/07/10/unlocking-files-recursively-from-the-command-line/

Sepertinya rmperintah telah berubah di Tiger sehingga jika Anda menggunakan rm -Rfdengan hak yang lebih tinggi, itu akan secara otomatis membuka kunci file.

Di OS X sebelum Tiger: find /Volumes/Transit -flags +uchg -print0 | xargs -0 chflags nouchg

Di OS X setelah Tiger: sudo rm -Rf foldername/

Juga, bahkan setelah OS X 10.4, mungkin ada flag metadata file seperti uchgdan uappnd, yang mencegah setiap modifikasi dari izin atau kepemilikan file. chflagsdapat menghapus bendera. Beberapa atribut file / metadata dan bagaimana mereka ditangani oleh alat fotokopi berbeda ada di sini .

bendalton
sumber
sudo rm -Rf foldername/bekerja dengan baik di OSX Mountain Lion
Aryo
5
@Aryo: rmmenghapus direktori. Apakah ada cara untuk membuka kunci semuanya tanpa menghapusnya? Ketika saya melihat uchgtidak diatur, dan saya bisa menyalakan dan mematikannya lagi seperti yang diharapkan (dengan chflags [no]uchg), tetapi itu tidak berpengaruh pada ikon kunci di Finder, atau pada kemampuan saya untuk chown.
orome
12

Saya memiliki masalah yang sama dengan Crashplan.app.

Semua solusi yang tercantum di sini tidak akan membantu saya, tetapi yang ini berhasil: http://forums.macrumors.com/showthread.php?t=1546163

Anda harus mengubah sistem dan flag yang tidak dapat diubah pengguna:

Lakukan ini untuk melihat flag mana yang aktif di file / folder Anda:

ls -lhdO MyFile

Responsnya mungkin terlihat seperti ini:

drwxrwxr-x 3 root admin schg,uchg 102B Apr 8 2013 MyFile

schg , uchg adalah bendera yang tidak bisa diubah. Satu untuk sistem dan satu untuk pengguna. Untuk menghapusnya, lakukan hal berikut:

chflags noschg CrashPlan.app # this removes system immutable flag
chflags nouchg CrashPlan.app # this removes the user immutable flags

Maka, bagi saya setidaknya, file tidak terkunci dan Anda dapat menghapusnya!

ruffy
sumber
Luar biasa, harus chflagsdigunakan sudo, tetapi masuk akal
Felipe
Punya masalah yang sama dengan CrashPlan.app (saya punya drwxrwxr-x@ 3 _BGMXPCHelper admin schg 96B 9 Jan 2018 CrashPlan.app), dan ini adalah satu-satunya solusi yang memungkinkan saya untuk menghapusnya, terima kasih!
webeno
12

Di OS X 10.11 (El Capitan), ini juga dapat disebabkan oleh fitur Rootless baru . Lihat jawaban ini untuk penjelasan.

Singkatnya, untuk direktori penting tertentu, tidak ada cara untuk memodifikasinya - apakah Anda menggunakan sudo, chownatau chmod. Ini memengaruhi /usrdirektori, (walaupun Anda diizinkan untuk memodifikasi /usr/local).

Untuk mengubah direktori yang dilindungi Rootless, Anda perlu menonaktifkan Rootless . Dan, tentu saja, aktifkan kembali setelah melakukan modifikasi, karena ini merupakan peningkatan keamanan yang penting.

Nate
sumber
1
Wow. Itu membuatku gila. Entah bagaimana saya perlu menyalin sesuatu ke / usr / lib yang sebelumnya tidak ditemukan di / usr / local / lib (jangan tanya kenapa). Dan itu berhasil.
qwerty_so
4
Sebenarnya, Anda tidak harus menonaktifkan Rootless sama sekali, Anda cukup boot ke mode Pemulihan (yang harus Anda lakukan untuk menonaktifkan Rootless) dan buat perubahan yang Anda inginkan dari Terminal di sana.
Old Pro
6

Setelah banyak berjuang, inilah yang harus saya lakukan untuk menyelesaikan masalah:

  • Pindah file ke ~/Desktop
  • sudo chown myusername:staff ./entries
  • Memindahkan file kembali ke lokasi aslinya tidak berfungsi (Operasi tidak diizinkan, lagi), jadi ...
  • sudo rm ./entries
  • sudo mv ~/Desktop/entries ./entries
josef.van.niekerk
sumber
4

Saya memiliki masalah yang sama, tentang folder rumah saya. Pada akhirnya saya hanya menggunakan finder seperti ini:

Pergi -> Komputer -> disk Anda -> Pengguna -> nama pengguna Anda -> klik kanan -> Dapatkan Info

Saya menemukan bahwa itu terkunci, mungkin saya melakukannya di masa lalu dan lupa. Hapus centang pada kotak centang yang dikunci, masalah telah diperbaiki.

Saya dapat merekomendasikan menggunakan 'Dapatkan Info' dari finder untuk mengatasi masalah seperti ini.

(OS X 10.8.3)

danza
sumber
Ini membantu saya untuk membuka .isodari Kotak Virtual glitchy.
Nakilon
1

Pastikan file dan folder induknya tidak terkunci

Saya menghadapi masalah serupa ketika mencoba menghapus file tanda tangan email Mac Mail. Saya tidak dapat menghapusnya sampai saya membuka kunci file dan juga folder induknya.

Camslice
sumber