0
我對C完全陌生,我很少使用它。這次我需要一個大學項目。我必須編寫一個小的c應用程序來測試我們在Linux內核(在調度程序上)所做的一些修改。seteuid()不起作用。原因?
在腳本內部,我想切換到另一個用戶,以查看不同用戶中CPU時間的分佈情況。所以我用root權限啓動我的小C程序(即使用sudo ./myapp)。編程內部 - 在我執行了一些需要root權限的操作之後 - 我想通過調用seteuid(1000)或setuid(1000)來切換回另一個uid,其中1000是現有用戶的標識(我用來登錄上)。然而這個調用似乎沒有任何效果,它也不會拋出任何異常。 這裏是我寫的一個樣本,只是爲了測試UID開關:
#define _POSIX_SOURCE
#include <pwd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sched.h>
#include <unistd.h>
#include <string>
#include <time.h>
using namespace std;
int main(int argc, char *argv[])
{
int uid;
struct passwd *p;
if ((p = getpwuid(uid = getuid())) == NULL){
perror("getpwuid() error");
exit(1);
}
printf("***************************************\n");
printf("Executing user: %s (%d)\n", p->pw_name, p->pw_uid);
printf("***************************************\n");
seteuid(1000);
if ((p = getpwuid(uid = getuid())) == NULL){
perror("getpwuid() error");
exit(1);
}
printf("***************************************\n");
printf("Executing user: %s (%d)\n", p->pw_name, p->pw_uid);
printf("***************************************\n");
return 0;
}
有誰知道爲什麼它不會工作?任何幫助,高度讚賞! THX
//編輯: 由CHSH
+1 - 是的,你需要重新執行`p = getpwuid()`調用。 – 2009-07-31 12:53:35