#include <unistd.h>
int main()
{
int ret;
ret = execl ("/usr/bin/sudo","sudo","gedit","myfile.txt", (char *)0);
return 0 ;
}
با عرض سلام . ;)
یک سوالی در مورد اجرای دستورات ترمینال با استفاده از زبان ++C داشتم ! ???
می دونم که برای دستورات عادی ای مثل cp که نیازی به مجوز root نداره باید از کتابخانه cstdlib استفاده کنم و از تابع system استفاده کنم !
اما این تابع برای دستوراتی مانند passwd یا ssh که نیاز به مجوز root داره کار نمی کنه !
می خواستم ببینم تابعی برای این کار موجود هست که حالا رمز سیستم رو هم بعدش یا باهاش وارد کنم ! و در کل برای دستوراتی که باید با root انجام بشه هم کار کنه ...
( یا حتی اگه همین تابع system این قابلیت رو داره چطوری باید ازش استفاده کرد ؟ )
مرسی 8)
{
int x=system("gksu -- sudo dpkg -i /home/m/Desktop/cdd/packages/amir05_beta_i386.deb"); //**
return 0;
}
البته این به نظر ناقص باشه{
FILE *fp;
gint exit_status;
gchar *command = "gksu -- sudo dpkg -i /home/m/Desktop/cdd/packages/amir05_beta_i386.deb";
/* execute command */
fp = popen(command, "r");
if (fp == NULL)
{
g_print("Error running %s", command);
}
exit_status = pclose (fp);
g_print("Script exited with status %d", exit_status);
}
سلام
میشه درباره setuid() یک مثال بزنید
{
int x=system("gksu -- sudo dpkg -i /home/m/Desktop/cdd/packages/amir05_beta_i386.deb"); //**
return 0;
}
سلام وتشکر از جواب
منظورم اینکه توی یک کد عبارت setuid() در چه جای باید قرار بگیره ??? مثلا system در کد زیرکد: [انتخاب]{
int x=system("gksu -- sudo dpkg -i /home/m/Desktop/cdd/packages/amir05_beta_i386.deb"); //**
return 0;
}
.
.
.
system("whoami");
setuid(0);
system("whoami");
.
.
.
در این مثال تا قبل از اجرای stuid دستور whoami اسم کاربر فعلی رو بر می گردونه. در حالی که بعد از setuid روت رو نمایش می ده. این به این معنیه که تا قبل از setuid(0) دستورات با اختیارات کاربر فعلی اجرا می شند و بعد از اون با اختیارات روت