This sounds simple & it is as long as you are doing it on the command line & not inside a script.
Let's talk about the scenario first. Suppose I'm a user & my user name is sahil. I have sudo privileges to work as user testuser.
[sahil@centops ~]$ sudo -l
Matching Defaults entries for sahil on this host:
!visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR
USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME
LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User sahil may run the following commands on this host:
(root) NOPASSWD: /usr/bin/sudo su - testuser
I need to run a script involving a command that needs to be executed as test user. Sounds simple enough. Here's a mundane example:
[sahil@centops ~]$ cat test.sh
#!/bin/bash
echo "Script to test sudo privileges"
/usr/bin/sudo su - testuser
cp /home/testuser/file1 /home/testuser/file2
if [ $? -eq 0 ]
then
echo "command was successful"
else
echo "There seems to be a problem"
fi
So, that's a simple script to switch to testuser, copy a file & then confirm if the file was copied successfully. But when I run it it doesn't work as I intend it to. Here's the output of running the script in debug mode with -x option.
[sahil@centops ~]$ bash -x test.sh
+ echo 'Script to test sudo privileges'
Script to test sudo privileges
+ /usr/bin/sudo su - testuser
[testuser@centops ~]$ exit
logout
+ cp /home/testuser/file1 /home/testuser/file2
cp: accessing `/home/testuser/file2': Permission denied
+ '[' 1 -eq 0 ']'
+ echo 'There seems to be a problem'
There seems to be a problem
To start things off, we need to edit the sudoers entry for the user sahil. It should like this is:
sahil ALL=(testuser:testuser) ALL
What the above line says is that we'd like to allow the user sahil to be able run any command as testuser user & testuser group privileges & on all terminals.
The sudo -l output post this addition will look this:
[sahil@centops ~]$ sudo -l
Matching Defaults entries for sahil on this host:
!visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR
USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME
LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User sahil may run the following commands on this host:
(testuser : testuser) ALL
[sahil@centops ~]$
I've modified our script as follows:
[sahil@centops ~]$ cat test.sh
#!/bin/bash
echo "Script to test sudo privileges"
sudo -u testuser cp /home/testuser/file1 /home/testuser/file2
if [ $? -eq 0 ]
then
echo "command was successful"
else
echo "There seems to be a problem"
fi
[sahil@centops ~]$
Now let's execute it.
[sahil@centops ~]$ ./test.sh
Script to test sudo privileges
command was successful
[sahil@centops ~]$
No comments:
Post a Comment