Permission denied trên Linux: 10 trường hợp, gồm cả /dev/null

Môi trường thử nghiệmHọ RHELAlmaLinux 9.8Tài khoản rootDebian 12 tài khoản thườngKiểm tra ngày 2026-11-05
Tìm nguyên nhân Permission denied

Permission denied là lỗi trên Linux xuất hiện khi tài khoản bạn đang dùng không có quyền dùng tệp, thư mục hoặc lệnh đó. Hãy chọn trường hợp của bạn theo tên lệnh và đường dẫn ở đầu dòng lỗi, kiểm tra quyền và chủ sở hữu bằng ls -l, rồi chạy lại với quyền hoặc tài khoản phù hợp với trường hợp đó là xử lý được.

Kết quả bên dưới được chạy bằng tài khoản root trên máy chủ AlmaLinux 9.8 và tài khoản thường trên máy chủ Debian 12; tên tài khoản, tên máy chủ và thời gian trong kết quả của /dev/null là giá trị ví dụ.

1️⃣ Tìm nguyên nhân Permission denied

Dòng lỗi kết thúc theo dạng [lệnh: đối tượng: Permission denied], và nhờ tên lệnh cùng đường dẫn đứng trước, bạn biết bị chặn ở đâu. Trong sơ đồ bên dưới, hãy chọn thông báo lỗi giống trên màn hình của bạn để thấy lệnh cần kiểm tra trước và phần cần đọc trong bài này.

🧭 Chọn trường hợp của bạn theo thông báo lỗi
Sơ đồ giải thích
🧭 Thông báo lỗi
Thông báo lỗicat: secret.txt: Permission deniedls: cannot access 'web/index.html': Permission denied./deploy.sh: Permission deniedls: cannot open directory '/proc/1/fd': Permission deniedbash: /root/test.txt: Permission denieduser@server1: Permission denied (publickey)(13)Permission denied-bash: /dev/null: Permission denied
➜
Kiểm tra trướcls -l secret.txtls -ld webls -l deploy.shidsudo sh -cQuyền của thư mục home và tệpgetenforce · findmntls -l /dev/null
➜
Phần trong bài này🔲 Quyền đọc và ghi tệp🔲 Quyền đi qua thư mục🔲 Quyền thực thi🔲 Đọc thông tin dành riêng cho root🔲 Khi > bị chặn dù đã thêm sudo🔲 Đăng nhập SSH bị từ chối3️⃣ Các lỗi Permission denied hiếm gặp🔲 Khi /dev/null đã thành tệp thường
Nếu lệnh đọc hoặc sửa tệp bị từ chối, hãy kiểm tra trước quyền r, w và chủ sở hữu của tệp đó.
Nếu tên một thư mục ở giữa đường dẫn xuất hiện trong lỗi, hãy kiểm tra thư mục đó có quyền x hay không.
Nếu chạy trực tiếp một script bị từ chối, hãy kiểm tra tệp đó có quyền x hay không.
Nếu đọc thông tin hệ thống bằng tài khoản thường bị chặn, hãy kiểm tra tài khoản đang dùng rồi chạy lại bằng root.
Nếu đã thêm sudo mà chuyển hướng > vẫn bị chặn, hãy chạy cả phần chuyển hướng bằng root.
Nếu trước lỗi có tài khoản và địa chỉ máy chủ, đó là trường hợp bị từ chối ở bước xác thực đăng nhập.
Nếu cột quyền đã đúng hoặc đã chạy bằng root mà vẫn bị từ chối, hãy kiểm tra SELinux, noexec và các bit thực thi.
Nếu dòng này lặp lại ngay sau khi đăng nhập, hãy kiểm tra /dev/null có bị đổi thành tệp thường hay không.

2️⃣ Các lỗi Permission denied thường gặp

🔲 Quyền đọc và ghi tệp

Để đọc tệp, tài khoản đó cần quyền đọc (r), còn để sửa hoặc tạo mới thì cần quyền ghi (w). secret.txt có quyền 600 chỉ chủ sở hữu root mới đọc và ghi được.

ls -l secret.txt
-rw------- 1 root root 16 Oct 29 00:29 secret.txt
runuser -u daemon -- cat secret.txt
cat: secret.txt: Permission denied

Khi đọc cùng tệp đó bằng tài khoản khác là daemon, yêu cầu bị từ chối ngay. Tạo tệp trong thư mục không có quyền ghi cũng gặp lỗi tương tự; trên máy chủ Debian 12, touch bằng tài khoản thường bị chặn trong thư mục lock có quyền 000.

touch ~/touchtest/lock/x.txt
touch: cannot touch '/home/user/touchtest/lock/x.txt': Permission denied

Ở cột đầu tiên của ls -l, hãy xem lần lượt chủ sở hữu, nhóm và các tài khoản khác có r và w hay không, rồi chỉ thêm quyền cho tài khoản cần dùng bằng chmod hoặc đổi chủ sở hữu bằng chown.

🔲 Quyền đi qua thư mục

Dù quyền của tệp đã đúng, nếu thư mục ở giữa đường dẫn không có quyền x thì bạn không tới được tệp bên trong. Với thư mục, x là quyền đi qua thư mục đó để vào trong, còn r là quyền đọc danh sách tên bên trong.

web/ ── drw-r--r-- · có r · không có x → bị chặn ở đây
css/ ── thấy tên, quyền · kích thước là ?
style.css ── không tới được
index.html ── thấy tên, quyền · kích thước là ?
ls -ld web web/css
drw-r--r-- 3 root root 35 Oct 29 00:29 web
drw-r--r-- 2 root root 23 Oct 29 00:29 web/css
runuser -u daemon -- ls -l web
ls: cannot access 'web/css': Permission denied
ls: cannot access 'web/index.html': Permission denied
total 0
d????????? ? ? ? ?            ? css
-????????? ? ? ? ?            ? index.html

Thư mục web chỉ có r nên daemon đọc được tên bên trong là css và index.html, nhưng vì không có x nên quyền và kích thước vẫn là dấu hỏi. Ngược lại, thư mục site chỉ có x mà không có r thì bị chặn liệt kê, còn tệp đã biết tên thì vẫn đọc được.

ls -ld site
drwx--x--x 2 root root 24 Oct 29 00:29 site
runuser -u daemon -- ls site
ls: cannot open directory 'site': Permission denied
runuser -u daemon -- cat site/index.html
<h1>index</h1>

Nếu đường dẫn dài, hãy dùng ls -ld kiểm tra từng thư mục từ trên xuống xem có x hay không, rồi chỉ thêm cho thư mục bị chặn quyền x mà tài khoản đó cần để đi qua.

🔲 Quyền thực thi

Để chạy script dạng ./tên tệp, tệp đó phải có quyền x. deploy.sh có quyền 644 đã bị từ chối khi chạy.

ls -l deploy.sh
-rw-r--r-- 1 root root 8 Oct 29 00:29 deploy.sh
./deploy.sh
bash: line 1: ./deploy.sh: Permission denied

Sau khi thêm x cho chủ sở hữu bằng chmod u+x, cột đầu tiên đổi thành [-rwxr--r--].

chmod u+x deploy.sh
ls -l deploy.sh
-rwxr--r-- 1 root root 8 Oct 29 00:29 deploy.sh

Nếu đã có quyền x mà vẫn bị từ chối khi chạy, hãy kiểm tra hệ thống tệp chứa tệp đó có được gắn với noexec hay không.

🔲 Đọc thông tin dành riêng cho root

Tài khoản thường không đọc được thông tin mà hệ thống dành riêng cho root, như tiến trình do root khởi chạy hay thông tin mật khẩu của tài khoản khác. Trên máy chủ Debian 12, mở thư mục fd của tiến trình số 1 bằng tài khoản thường đã gặp lỗi quyền.

ls /proc/1/fd
ls: cannot open directory '/proc/1/fd': Permission denied
chage -l daemon
chage: Permission denied.

Thông tin hết hạn mật khẩu của tài khoản khác cũng bị chặn vì cùng lý do; /etc/shadow chứa thông tin này là tệp được đặt để người dùng thường không đọc được. Với những lỗi như vậy, đừng mở rộng quyền mà hãy chạy lại lệnh bằng sudo hoặc tài khoản root.

🔲 Khi > bị chặn dù đã thêm sudo

sudo chỉ chạy bằng root lệnh viết phía sau nó, còn việc mở tệp cho chuyển hướng (>) do shell của tài khoản đang dùng xử lý trước khi lệnh chạy. Vì vậy, nếu chuyển hướng kết quả của sudo echo vào tệp chỉ root mới ghi được, dòng lỗi sẽ bắt đầu bằng tên shell theo dạng [bash: đường dẫn tệp: Permission denied].

sudo echo x > /root/test.txt

Muốn chuyển hướng cũng chạy bằng root, hãy bọc cả dòng trong sh -c để chạy luôn shell bằng sudo; tài liệu chính thức của sudo cũng đưa ví dụ chạy bên trong sh -c để chuyển hướng hoạt động.

sudo sh -c 'echo x > /root/test.txt'

tee nhận đầu vào chuẩn rồi ghi thẳng vào các tệp được chỉ định, nên khi chạy tee bằng sudo, tệp sẽ do tee có quyền root mở. tee còn in nội dung nhận được ra màn hình thêm một lần.

echo x | sudo tee /root/test.txt

🔲 Đăng nhập SSH bị từ chối

Nếu trước Permission denied có [tài khoản@địa chỉ máy chủ:] và trong ngoặc có phương thức xác thực như publickey, đó là trường hợp bị từ chối ở bước xác thực đăng nhập, và chỗ cần kiểm tra khác với quyền tệp. sshd trên máy chủ để StrictModes ở giá trị mặc định yes, nên trước khi nhận đăng nhập sẽ kiểm tra quyền và chủ sở hữu của thư mục home và các tệp của tài khoản đó. Nếu thư mục home, thư mục ~/.ssh hoặc ~/.ssh/authorized_keys có bất kỳ chỗ nào tài khoản khác ghi được, sshd sẽ không dùng tệp khóa đó, vì vậy hãy dùng ls -ld kiểm tra cả ba chỗ không có quyền w của tài khoản khác.

⌨️ Trình mô phỏng Permission denied

Trình mô phỏng bên dưới bắt đầu bằng tài khoản root, và với runuser, bạn có thể chuyển thành tài khoản khác là daemon để tự xem kết quả khi đọc tệp, đi qua thư mục và quyền thực thi bị chặn.

Trình mô phỏng Permission deniedcoreutils 8.32
[root@server1 work]#
Chỉ chạy trong trình duyệt của bạn. Bắt đầu bằng tài khoản root; thêm cat hoặc ls sau runuser -u daemon -- để xem kết quả chạy bằng tài khoản khác là daemon.

3️⃣ Các lỗi Permission denied hiếm gặp

Nếu cột quyền đã đúng mà vẫn bị từ chối, đó là trường hợp bị chặn từ bên ngoài các bit quyền, như chính sách SELinux hay gắn kết noexec. Nếu chạy bằng root mà vẫn bị từ chối thực thi, hãy kiểm tra tệp đó có hoàn toàn không có bit x hay không.

Trên máy chủ bật SELinux, dù bit quyền đã đúng, nếu chính sách SELinux chặn thì vẫn xuất hiện Permission denied, nên khi đó hãy kiểm tra trước bản ghi từ chối của SELinux. Trên máy chủ có daemon audit đang chạy, bản ghi từ chối nằm trong /var/log/audit/audit.log dưới dạng [avc: denied], kèm hành động bị chặn, tên lệnh (comm) và tên đối tượng (name).

Xem SELinux có đang bật hay không bằng getenforce, rồi chạy ausearch bằng root để kiểm tra các bản ghi bị chặn hôm nay.

getenforce
ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today

Với rsync daemon, lỗi [Permission denied (13)] khi nhận tệp cũng là trường hợp SELinux chặn truy cập vào đường dẫn của module.

Trên hệ thống tệp gắn với noexec, không thể chạy tệp trực tiếp, nên dù ls -l hiện x, tệp vẫn bị từ chối với [bash: đường dẫn script: Permission denied]. Đưa thư mục đó cho findmnt -T sẽ thấy nơi thư mục được gắn và các tùy chọn; nếu tùy chọn có noexec thì là trường hợp này.

findmnt -T /tmp -o TARGET,OPTIONS

root vượt qua hầu hết các kiểm tra quyền, nhưng riêng thực thi chỉ được phép khi ít nhất một trong chủ sở hữu, nhóm hoặc các tài khoản khác có x. Vì vậy, script không có x nào sẽ bị từ chối dù root chạy bằng ./.

Khi chạy deploy.sh có cột đầu tiên là [-rw-r--r-- 1 root root] bằng ./ từ tài khoản root, kết quả là [bash: line 1: ./deploy.sh: Permission denied].

🔲 Khi /dev/null đã thành tệp thường

Nếu ngay sau khi vào SSH bằng tài khoản thường mà các dòng bên dưới hiện liên tiếp trước dấu nhắc shell, hãy kiểm tra trước xem /dev/null, thiết bị ký tự mà mọi tài khoản dùng để bỏ kết quả, có bị đổi thành tệp thường thuộc root hay không. Số dòng khác nhau tùy máy chủ theo số script profile được đọc khi đăng nhập, và trên cùng máy chủ, lỗi này không xuất hiện sau khi chuyển sang root.

-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
...
ls -l /dev/null
-rw-r--r-- 1 root root 55 Jan 10 09:00 /dev/null
stat -c %F /dev/null
regular file

Cột đầu tiên là [-rw-r--r--] và ở vị trí kích thước hiện 55, tức là chữ lỗi mà các lệnh khác bỏ đi đã dồn lại trong tệp. Nếu dòng lệnh dọn dẹp có lẫn dạng bên dưới và được chạy bằng root, rm sẽ xóa tệp thiết bị, rồi chuyển hướng 2>/dev/null của lệnh kế tiếp tạo mới một tệp thường thuộc root với cùng tên.

rm -f /dev/null 2>/dev/null

Hãy chạy dòng bên dưới bằng root. Tạo thiết bị mới bằng một tên bên cạnh rồi ghi đè bằng mv thì không có lúc nào tên bị trống, nên không còn kẽ hở để chuyển hướng khác lại tạo tệp thường giữa lúc xóa và lúc tạo.

mknod -m 666 /dev/null.new c 1 3 && mv -f /dev/null.new /dev/null && ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Jan 10 09:05 /dev/null
stat -c %F /dev/null
character special file

[c 1 3] của mknod là số của /dev/null trong danh sách số thiết bị của kernel. Sau khi khôi phục, echo x > /dev/null bằng tài khoản thường cũng kết thúc không lỗi. Khởi động lại cũng có thể đưa nó trở lại, nhưng một dòng ở trên, vốn không cần dừng máy chủ, nhanh hơn.

Xác nhậnTrước khi sửaSau khi sửa
Cột đầu tiên của ls -l-rw-r--r--crw-rw-rw-
Vị trí kích thước của ls -l551, 3
stat -c %Fregular filecharacter special file
Ghi bằng tài khoản thườngPermission deniedKhông lỗi

Kết quả cần bỏ thì chỉ chuyển tới >/dev/null hoặc 2>/dev/null, và trừ khi đang khôi phục, đừng bao giờ ghi /dev/null làm đối tượng của rm hay mv.

🔢 FAQ & nội dung đề xuất

Ghi vào hệ thống tệp được gắn ở chế độ chỉ đọc sẽ gặp [Read-only file system], đây là lỗi khác (EROFS) với Permission denied. Khi đó, trước khi xem quyền, hãy kiểm tra hệ thống tệp đó được gắn với tùy chọn nào.

Mở quyền đọc, ghi và thực thi cho mọi tài khoản thì Permission denied ở chỗ đó sẽ mất, nhưng tài khoản khác cũng sửa được tệp đó. Chỉ thêm quyền cho tài khoản cần dùng hoặc đổi chủ sở hữu sẽ giữ phạm vi hẹp hơn.

Chỉ mở rộng quyền thì Permission denied mất, nhưng /dev/null vẫn là tệp thường nên kết quả bị bỏ tiếp tục dồn vào tệp đó. Chỉ khi kết quả stat trở lại là character special file thì mới là đã khôi phục thành thiết bị.

ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Prove your humanity: 10   +   9   =