Здравствуйте.
Вам коллеги уже сказали, что не нужно ничего такого делать, потому что нарушается безопасность. Но если очень нужно, подумав десять раз, то можно сделать то что вы хотите.
В 199затертом году тоже возникала похожая задача. Нужно было "что то" делать, но обычные пользователи не должны были знать некоторую информацию, доступную только для root.
Вы можете использовать возможности операционной системы Unix/Linux, setuid - "установка ID пользователя во время выполнения".
Создайте тестовую программу, назовем её startuid.c:
// startuid.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int main(void)
{
pid_t child_pid;
printf("Real UID\t= %d\n", getuid());
printf("Effective UID\t= %d\n", geteuid());
printf("Real GID\t= %d\n", getgid());
printf("Effective GID\t= %d\n", getegid());
if((child_pid = fork()) < 0 )
{
perror("fork failure");
exit(1);
}
if(child_pid == 0)
{
execl("/bin/ls", "ls", "-l", "/root", (char*)0);
perror("execl() failure!\n\n");
_exit(1);
}
return EXIT_SUCCESS;
}
Скомпилируйте startuid.c, и скопируйте результат в домашнюю директорию обычного пользователя, например
alex, который должен будет выполнить нужную вам команду с идентификатором uid=0(root).
[Unix]# ls -l
-rwxr-xr-x 1 root root 7348 Jul 2 18:19 startuid
используйте chmod для установки атрибута setuid
[Unix]# chmod u+s startuid
[Unix]# ls -l
-rwsr-xr-x 1 root root 7348 Jul 2 18:19 startuid
До установки атрибута setuid, и запуска startuid от пользователя
alex, выполняющий "ls -l /root" (листинг домашнего каталога пользователя root ) выдавал ошибку "Permission denied". После установки атрибута setuid, и запуска startuid вы получали список файлов в каталоге пользователя root.
Само собой запуск "ls -l /root" это просто пример, вместо этого вы можете написать ту команду, которую вам надо выполнить обычным пользователем от рута.
Кроме того, возможно вам пригодится почитать про
Sticky bit
Удачи, и будьте осторожны.