Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

Ubuntu

touch: cannot touch `/var/run/test.pid': 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
add comment

5 Answers 5

up vote 22 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 at 14:22
add comment
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
add comment

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
add comment

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/test.pid. This should get things working for you.

share|improve this answer
add comment

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

# chmod 757
share|improve this answer
3  
Never do a chmod 757 on /var/run! This would cause a serious security problem –  michel Dec 2 '10 at 10:57
1  
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
add comment

Your Answer

 
discard

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.