Sửa Lỗi "Operation not permitted" Trong Terminal macOS

intermediate🍎 macOS2026-03-18| macOS 10.15 Catalina trở lên (bao gồm Ventura, Sonoma, Sequoia), Terminal và các shell bên thứ ba

Error Message

Operation not permitted
#macos#permission#sip#terminal#full-disk-access

Tóm tắt nhanh

Gặp lỗi Operation not permitted trong Terminal? Ba cách sau đây xử lý được 90% trường hợp:

  • Vào System Settings → Privacy & Security → Full Disk Access → thêm Terminal (hoặc ứng dụng shell của bạn).
  • Muốn chỉnh sửa file hệ thống? Kiểm tra SIP trước: csrutil status.
  • Vấn đề với file thông thường? Chạy ls -la để kiểm tra quyền sở hữu, sau đó sửa bằng chmod/chown.

Nguyên Nhân Gây Ra Lỗi

Operation not permitted (errno 1) xuất hiện trong bốn tình huống khác nhau — và cách xử lý mỗi trường hợp hoàn toàn khác nhau:

  • Chưa cấp Full Disk Access — Catalina bổ sung thêm một lớp phân quyền, yêu cầu Terminal phải được cấp FDA rõ ràng mới có thể truy cập ~/Desktop, ~/Documents, ~/Downloads, dữ liệu Mail và nhiều thư mục khác. Không có FDA, không có quyền truy cập — dù là tài khoản của chính bạn.
  • System Integrity Protection (SIP) — SIP khóa /System, /usr, /bin/sbin. Ngay cả sudo cũng không thể ghi đè.
  • Quyền file/thư mục — vấn đề UNIX cổ điển: sai chủ sở hữu, sai mode bits, hoặc cờ immutable của BSD (uchg/schg) trên file.
  • Giới hạn sandbox — ứng dụng chạy trong sandbox không thể tự do truy cập các đường dẫn tùy ý trên filesystem.

Cách 1: Cấp Full Disk Access Cho Terminal

Chín trên mười lần, đây là cách xử lý khi lỗi xảy ra bên trong thư mục home của bạn.

  • Mở System Settings (macOS Ventura trở lên) hoặc System Preferences (Monterey và cũ hơn).
  • Vào Privacy & Security → Full Disk Access.
  • Nhấn + và thêm Terminal.app từ /Applications/Utilities/.
  • Đang dùng iTerm2, Warp hoặc shell khác? Thêm ứng dụng đó vào nữa — FDA được cấp riêng cho từng ứng dụng.

Khởi động lại Terminal rồi thử lại. Bạn sẽ biết đã thành công khi lệnh đó chạy được mà không báo lỗi.

Kiểm tra nhanh trước và sau khi cấp quyền:

ls ~/Library/Mail
# Trước khi cấp FDA: Operation not permitted
# Sau khi cấp FDA: hiển thị nội dung thư mục

Cách 2: Kiểm Tra và Xử Lý SIP

SIP bảo vệ các đường dẫn cốt lõi của hệ điều hành. sudo không có tác dụng ở đây — đó là thiết kế có chủ ý.

csrutil status
# System Integrity Protection status: enabled.

Đang cố sửa đổi /System/Library, /usr/bin, hoặc /sbin? SIP đang làm đúng nhiệm vụ của nó. Đừng cố chống lại.

Giải pháp tốt hơn hầu như luôn là tìm cách thay thế. Thay vì chỉnh sửa /usr/bin/python3, hãy dùng pyenv để quản lý phiên bản Python, hoặc cài công cụ qua Homebrew vào /opt/homebrew (Apple Silicon) hoặc /usr/local (Intel). Kết quả tương đương, không cần vật lộn với SIP.

Nếu bạn thực sự cần tắt SIP — chẳng hạn để phát triển kernel extension — thực hiện như sau:

  • Khởi động vào Recovery Mode: giữ Cmd+R trên Intel, hoặc giữ nút nguồn trên Apple Silicon cho đến khi màn hình tùy chọn xuất hiện.
  • Mở Terminal từ menu Utilities.
  • Chạy csrutil disable, sau đó khởi động lại bình thường.

Bật lại SIP khi xong: boot vào Recovery lần nữa và chạy csrutil enable. Không nên để SIP tắt trên máy dùng hàng ngày.

Cách 3: Sửa Quyền File

Bạn sở hữu file nhưng vẫn bị chặn? Kiểm tra xem quyền thực tế đang là gì:

ls -la /path/to/file
# -r--r--r--  1 root  wheel  1024 Mar 18 10:00 myfile.txt

Kết quả đó cho bạn biết tất cả: root sở hữu file, và không ai có quyền ghi. Sửa lại:

# Lấy lại quyền sở hữu file
sudo chown $(whoami) /path/to/file

# Cấp quyền thực thi cho script
chmod +x myscript.sh

# Quyền đọc/ghi chuẩn cho file văn bản
chmod 644 myfile.txt

# Sửa đệ quy toàn bộ thư mục
chmod -R 755 /path/to/dir

Không chắc dùng giá trị octal nào? Unix Permissions Calculator trên ToolCraft cho phép bạn tick vào ô checkbox và nhận ngay số chmod chính xác — rất tiện khi bạn không nhớ nổi 644 hay 755 mới đúng.

Cách 4: Gỡ Bỏ Immutable Flag

Đôi khi vấn đề không phải là quyền — mà là cờ BSD khóa file bất kể ai sở hữu nó.

# Flag -O hiển thị các cờ BSD
ls -lO /path/to/file
# -rw-r--r--  1 user  staff  uchg 512 Mar 18 file.txt
#                                  ^^^^ đây là thủ phạm

# Gỡ cờ user immutable
chflags nouchg /path/to/file

# File bị khóa ở cấp hệ thống cần sudo
sudo chflags noschg /path/to/file

Cờ uchg được đặt bởi hộp kiểm "Locked" của Finder trong Get Info. Nếu bạn từng tick vào đó rồi quên mất, đây chính là lý do bạn bị kẹt.

Cách 5: Lỗi Kiến Trúc Rosetta

Mac Apple Silicon đang chạy file nhị phân x86 qua Rosetta? Đôi khi file nhị phân đã dịch thiếu entitlement cần thiết và báo lỗi này. Hãy chạy trực tiếp theo kiến trúc native:

# Kiểm tra kiến trúc mà file nhị phân được build cho
file /usr/local/bin/mytool
# mytool: Mach-O 64-bit executable x86_64

# Ép chạy theo kiến trúc ARM native
arch -arm64 /usr/local/bin/mytool

Xác Nhận Đã Sửa Xong

Chạy lại lệnh bị lỗi trước đó. Đó là bài kiểm tra duy nhất có ý nghĩa.

Xác nhận FDA:

# Nên liệt kê được nội dung sau khi cấp Full Disk Access
ls ~/Library/Safari

# Kiểm tra ghi trên Desktop
touch ~/Desktop/test_file.txt && echo "Ghi thành công" && rm ~/Desktop/test_file.txt

Xác nhận sau khi sửa quyền:

# Kiểm tra quyền mới đã đúng chưa
ls -la /path/to/file

# Sau đó chạy lại lệnh gốc
./myscript.sh

Bảng Tham Khảo Nhanh

  • Thư mục người dùng được bảo vệ (Desktop, Documents, Downloads, v.v.) → Cấp Full Disk Access
  • /System, /usr/bin, /sbin → SIP đang hoạt động đúng; hãy tìm đường dẫn thay thế
  • File bạn sở hữuchmod / chown
  • File bị khóa immutablechflags nouchg
  • sudo không có tác dụng → SIP hoặc FDA mới là rào cản thực sự, không phải quyền Unix

Related Error Notes