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ằngchmod/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,/binvà/sbin. Ngay cảsudocũ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.apptừ/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ữu →
chmod/chown - File bị khóa immutable →
chflags 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

