How to Troubleshoot 'Permission Denied' Errors in Linux
To fix "Permission denied" errors in Linux, first check file permissions with ls -l and adjust using chmod if needed; 1. Verify ownership and group with ls -l, then use sudo chown or sudo chgrp to change them; 2. Ensure your user is in the required group with groups and sudo usermod -aG; 3. Check for extended ACLs with getfacl and modify with setfacl if necessary; 4. Use lsattr to detect immutable flags and remove with sudo chattr -i; 5. Confirm the filesystem isn’t mounted read-only via mount or findmnt, and remount as read-write if safe; 6. Investigate SELinux with sestatus and ausearch, or AppArmor logs, and adjust policies instead of disabling; 7. Only use sudo when truly necessary, preferring proper ownership or permission fixes to avoid security risks, and always address the root cause rather than relying on elevated privileges.
"Permission denied" errors in Linux are common but can be frustrating if you're not sure where to start. These errors occur when a user or process tries to access a file, directory, or execute a command without the necessary permissions. Here’s how to troubleshoot and fix them effectively.

1. Check File or Directory Permissions
The first step is to inspect the current permissions using ls -l
:
ls -l /path/to/file
Example output:

-rw-r--r-- 1 alice users 1024 Jan 1 10:00 myfile.txt
- The first part (
-rw-r--r--
) shows permissions:- Owner (alice):
rw-
→ read and write - Group (users):
r--
→ read only - Others:
r--
→ read only
- Owner (alice):
- If you're trying to write or execute but don’t have permission, this is likely the issue.
? Fix: Use chmod
to adjust permissions (carefully):
# Give owner execute permission chmod u x script.sh # Allow group to write chmod g w /path/to/file # Be cautious with wide permissions like 777 chmod 777 /path/to/file # Not recommended for security
2. Verify Ownership and Group
Even with correct permissions, ownership matters. If you're not the owner or not in the right group, access will be denied.

Use ls -l
again to check owner and group:
-rw-r--r-- 1 bob admin 2048 Jan 1 11:00 config.conf
If you're logged in as alice
, you can't modify this file unless you have write permission for "others" — which you don’t.
? Fix: Change ownership with chown
:
# Change owner sudo chown alice config.conf # Change group sudo chgrp developers config.conf # Or both at once sudo chown alice:developers config.conf
Only use sudo
if you have admin rights and understand the implications.
3. Check If You’re in the Right Group
Some directories (like /var/www
, /dev
, or Docker sockets) require membership in specific groups.
? Check your current groups:
groups # or id
If you need access to Docker but aren’t in the docker
group:
sudo usermod -aG docker $USER
⚠️ You’ll need to log out and back in (or restart your shell) for group changes to take effect.
4. Look for Special Permissions: Sticky Bit, ACLs, or Immutable Flags
Sometimes standard permissions aren’t the whole story.
a. Check for Access Control Lists (ACLs)
Some systems use extended ACLs:
getfacl /path/to/file
If ACLs are set, they can override regular permissions.
? To modify:
setfacl -m u:alice:rwx /path/to/file
b. Check for Immutable Files (chattr)
A file might be locked even for root:
lsattr /path/to/file
If you see i
(immutable), the file can't be modified.
? Remove the immutable flag:
sudo chattr -i /path/to/file
5. Filesystem Mounted as Read-Only
If you're getting "permission denied" on all write attempts in a directory, the filesystem might be mounted read-only.
? Check with:
mount | grep "your_partition" # or findmnt /path/to/dir
Look for ro
(read-only) instead of rw
(read-write).
? Remount as read-write (if safe):
sudo mount -o remount,rw /dev/sdX1 /mount/point
Common causes: disk errors, improper shutdown, or intentional setup.
6. SELinux or AppArmor Restrictions
Security modules like SELinux (common on RHEL/CentOS) or AppArmor (Ubuntu) can block access even if file permissions look correct.
? Check SELinux status:
sestatus
If enabled, check logs:
ausearch -m avc -ts recent # or dmesg | grep -i denied
? Temporarily test by disabling SELinux (not recommended long-term):
sudo setenforce 0
If the error goes away, adjust SELinux policies instead of leaving it off.
7. Running Commands with Proper Privileges
Sometimes you just need sudo
, but be careful:
sudo ./backup-script.sh
But avoid blindly using sudo
. Ask:
- Do I really need root?
- Can I fix ownership instead?
Using sudo
masks the real issue and can be a security risk.
Summary Checklist
When you see "Permission denied", go through these:
- ✅ Use
ls -l
to check permissions, owner, and group - ✅ Confirm you’re the owner or in the correct group
- ✅ Use
chmod
orchown
to fix access (with care) - ✅ Check for ACLs with
getfacl
- ✅ Look for immutable flags with
lsattr
- ✅ Verify the filesystem isn’t mounted read-only
- ✅ Consider SELinux/AppArmor if the system uses them
- ✅ Avoid overusing
sudo
— fix the root cause
Most permission issues come down to basic ownership or mode settings, but the deeper layers (like ACLs or security modules) can trip up even experienced users. Start simple, verify each layer, and you’ll resolve it quickly.
Basically, it’s not always about who you are — it’s about what the system lets you do.
The above is the detailed content of How to Troubleshoot 'Permission Denied' Errors in Linux. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

I have a lot of experience in participating in VSCode offline technology exchange activities, and my main gains include sharing of plug-in development, practical demonstrations and communication with other developers. 1. Sharing of plug-in development: I learned how to use VSCode's plug-in API to improve development efficiency, such as automatic formatting and static analysis plug-ins. 2. Practical demonstration: I learned how to use VSCode for remote development and realized its flexibility and scalability. 3. Communicate with developers: I have obtained skills to optimize VSCode startup speed, such as reducing the number of plug-ins loaded at startup and managing the plug-in loading order. In short, this event has benefited me a lot and I highly recommend those who are interested in VSCode to participate.

Linux system restricts user resources through the ulimit command to prevent excessive use of resources. 1.ulimit is a built-in shell command that can limit the number of file descriptors (-n), memory size (-v), thread count (-u), etc., which are divided into soft limit (current effective value) and hard limit (maximum upper limit). 2. Use the ulimit command directly for temporary modification, such as ulimit-n2048, but it is only valid for the current session. 3. For permanent effect, you need to modify /etc/security/limits.conf and PAM configuration files, and add sessionrequiredpam_limits.so. 4. The systemd service needs to set Lim in the unit file

Informix and MySQL are both popular relational database management systems. They perform well in Linux environments and are widely used. The following is a comparison and analysis of the two on the Linux platform: Installing and configuring Informix: Deploying Informix on Linux requires downloading the corresponding installation files, and then completing the installation and configuration process according to the official documentation. MySQL: The installation process of MySQL is relatively simple, and can be easily installed through system package management tools (such as apt or yum), and there are a large number of tutorials and community support on the network for reference. Performance Informix: Informix has excellent performance and

The reason why the editor crashes after the VSCode plugin is updated is that there is compatibility issues with the plugin with existing versions of VSCode or other plugins. Solutions include: 1. Disable the plug-in to troubleshoot problems one by one; 2. Downgrade the problem plug-in to the previous version; 3. Find alternative plug-ins; 4. Keep VSCode and plug-in updated and conduct sufficient testing; 5. Set up automatic backup function to prevent data loss.

To tune MySQL into a Chinese interface, it can be implemented through MySQLWorkbench or command line tools. 1) In MySQLWorkbench, open "Preferences", select the "Appearance" tab, and then select "Chinese(Simplified)" in the "Language" drop-down menu, and restart. 2) When using command line tools, set the operating system locale variables, such as using "exportLANG=zh_CN.UTF-8" on Linux or macOS, and then run the mysql client.

Debian Text Editor is a basic text editing tool, mainly used for daily simple text editing work. Compared with other mainstream editors, it has certain limitations in performance and user experience. Here are the advantages and features of several other editors compared to Debian text editors: Notepad Loading large files speed: Notepad can quickly load large files, such as 1GB-sized SQL files in just 8 seconds, which is nearly 47 times faster than standard text editors. Code coloring function: Supports code coloring in about 80 programming languages, which helps improve coding efficiency. Batch operation capability: It has column editing mode, which is convenient for performing batch processing tasks such as financial verification or operation and maintenance logs. Extension plug-in branch

Starting SFTP service in Debian systems usually requires the help of an OpenSSH server. The following are the specific steps: 1. Install the OpenSSH server First, confirm that the OpenSSH server is installed on your Debian system. If not installed, you can complete the installation by following command: sudoaptupdatesudoaptininstallopenssh-server2. After starting the OpenSSH server installation is completed, the OpenSSH server will generally start automatically. You can check its running status through the following command: sudosystemctlstatusssh If the service is not running, you can start it with the following command: s

Linux and Windows have their own advantages and disadvantages in CPU and memory usage: 1) Linux uses time slice-based scheduling algorithms to ensure fairness and efficiency; Windows uses priority scheduling, which may cause low-priority processes to wait. 2) Linux manages memory through paging and switching mechanisms to reduce fragmentation; Windows tends to pre-allocate and dynamic adjustment, and efficiency may fluctuate.
