Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top


touch: cannot touch `/var/run/': Permission denied

I am starting start-stop-daemon and like to write the PID file in /var/run start-stop-daemon is run as my-program-user

/var/run setting is drwxr-xr-x 9 root root

I like to avoid putting my-program-user in the root group.

share|improve this question
up vote 44 down vote accepted

By default, you can only write to /var/run as a user with an effective user ID of 0 (ie as root). This is for good reasons, so whatever you do, don't go and change the permissions of /var/run... Instead, as root, create a directory under /var/run:

# mkdir /var/run/mydaemon

Then change its ownership to the user/group under which you wish to run your process:

# chown myuser:myuser /var/run/mydaemon

Now specify to use /var/run/mydaemon rather than /var/run.

You can always test this by running a test as the user in question.

share|improve this answer
This worked fine for me but when I restarted my server then the /var/run/mydaemon directory was gone. – myborobudur May 15 '14 at 14:22
This is not a complete answer, /var/run is tmpfs by default on Ubuntu. Each time the server is started up the mkdir and chown command need to be re-run. – Tim Feb 23 '15 at 7:31
@Tim how about editing the answer and complete it? – kaiser Mar 2 at 20:29
mkdir /var/run/mydaemon
chown myuser:myuser /var/run/mydaemon

this will not work, since it will be lost at the next reboot (/var/run is a tmpfs on Ubuntu).

The only feasible solution is to run mkdir and chmod as part of the startup scripts.

share|improve this answer

You can try this. Create a directory /var/run/test/ and then change the permission of this directory to the same user as your program runs. " chown /var/run/test/" . Now in your application change the location of the PID file to /var/run/test/ This should get things working for you.

share|improve this answer

What about using the "sticky" bit on /var/run ?

chmod +t /var/run ?

Probably mess up some other apps, but it seems like it would be another solution.

I'll stick with creating a separate /var/run folder for now, however.

share|improve this answer

To avoid putting your program-user in the root group, allow others write access:

# chmod 757
share|improve this answer
Never do a chmod 757 on /var/run! This would cause a serious security problem – michel Dec 2 '10 at 10:57
This is a terrible idea. It would cause a potentially massive security problem – Tom O'Connor Dec 2 '10 at 11:17
Even if we ignore the security problem, chmod 757 will also only work until the next reboot. Sorry about creating a new answer, but there seems to be no way to reply to the other comment. – Vladimir Nicolici Jan 7 '13 at 19:25
@michel, the author never said to do a chmod on /var/run. The author may have meant it for the application subdirectory. Not sure what all the fuss is about. – A-B-B Feb 25 '13 at 17:39

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.