I want to allow a particular user to execute a compiled program in my directory. I got his username from cat /etc/passwd. The executable does not write any file but reads a few and gives output on the command line. How can I achieve this?
If your files are not a secret, you may simply make that folder readable to everyone, or to some group where you will put yourself and the other user.
If you have a scenario with users that should not be allowed access to reading those data, you will have to use a
sudo-based strategy, so that the privileged user can run your program by means of for example:
First you have to configure your sudo (by means of
visudo) with something like:
particular-user ALL=(ALL) NOPASSWD: /home/user19448/myprogram/runme
NOPASSWD avoids you the need to enter your own password, which you probably want.
I would add new group include that user in it and change files & executable to that group.
Make a group
Change group of the file( executable and the ones that will be read)
chgrp Group_name file
Make executable available to group members
chmod g+x executable_file
Make all files he/she will need to read readable by the group
chmod g+r file
Add User & yourself to group
useradd -G Group_name username
The best option is that you both need to be in a same group. Lets say you create a group called
team and you both guys are member of that group. Then you can allow him to execute it by giving the group execute permission for that program.
Let say you have two users named test and test1
# groupadd team # usermod -G team test # usermod -G team test1
Lets say the directory where your program is in as
Now change the group ownership of the directory and program.
# chown test:test1 /home/test/programs/program1 # chown test:test1 /home/test/programs/ # chmod g+x /home/test/programs/program1 # chmod g+x /home/test/programs/
Now the user
test1 will be able to execute the program.
This way is more secure and it prevents others from abusing it.