I am working on automating the creation of subversion repositories and associated websites as described in this blog post I wrote. I am running into issues right around the part where I su to the www-data user to run the following command:
svnadmin create /svn/repository
There is a check at the beginning of the script that makes sure it is running as root or sudo, and everything after that one command needs to be run as root. Is there a good way to run that one command as www-data and then switch back to root to finish up?
With 'su' is probably that request a password, and www-data doesn't have password. I recommend the command
sudo
:The condition is that your user must be root, or configurated in the sudoers file
Just use
su - www-data -c 'svnadmin create /svn/repository'
in your script run by root. So that only this command is run by www-data user.Update for future viewers:
In case you receive a
"This account is currently not available"
error, consider using:su - www-data -s /bin/bash -c 'svnadmin create /svn/repository'
( @Petr 's valuable mention about
-s
flag to accommodatewww-data
user's no login policy )2 Possible approaches:
1)
sudo
command:In most cases you will have access to the
sudo
command and so the solution is simply:sudo -u target_user target_command
2)
su
command (if sudo not installed.Ex. alpine-linux images
):su - target_user -c 'target_command'
In case you receive a 'This account is currently not available' error, the user has a no login (shell access) policy in effect. If so, consider using:
su - target_user -s /bin/bash -c 'target_command'
(Based on @Petr 's valuable comment about
-s
flag to accommodatewww-data
user's no login policy)Use
su
: