Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!
0 Пользователей и 1 Гость просматривают эту тему.
// test_uid_gid.c// victor00000 (c) 2018#include <stdio.h>#include <stdlib.h>#include <pwd.h>#include <grp.h>#include <sys/types.h>#include <unistd.h>// ~$ gcc test_uid_gid.c -o test_uid_gid// ~$ sudo addgroup gtest// ~$ sudo ./test_uid_gid $USER gtest// ~$ touch /tmp/test.txt// ~$ ls -l /tmp/test.txt// -$ id// ~$ exit// ~$ sudo delgroup gtest// ======= Example ==================/*a@a:~$ a@a:~$ echo $USERaa@a:~$ sudo addgroup gtest[sudo] password for a: Adding group `gtest' (GID 1000) ...Done.a@a:~$ a@a:~$ sudo ./test_uid_gid $USER gtestUID: aGID: root gtestPlease command 'exit'a@a:~$ a@a:~$ touch /tmp/test.txta@a:~$ ls -l /tmp/test.txt-rw-r--r-- 1 a gtest 0 Сен 19 15:57 /tmp/test.txta@a:~$ a@a:~$ iduid=1001(a) gid=1000(gtest) groups=1001(a),0(root),1000(gtest)a@a:~$ a@a:~$ exitexitOka@a:~$ a@a:~$ touch t.txta@a:~$ ls -l t.txt-rw-rw-r-- 1 a a 0 Сен 19 15:59 t.txta@a:~$ *///========================int main (int ia, char *ca[]){if (ia != 3) return 1;struct passwd *pw;pw = getpwnam (ca[1]);if (pw == 0){fprintf (stderr,"ERR: no user ""name '%s'.\n",ca[1]);return 1;}struct group *gr;gr = getgrnam (ca[2]);if (gr == 0){fprintf (stderr,"ERR: no group ""name '%s'.\n",ca[2]);return 1;}if (setuid (0)!=0){perror ("root");return 1;}gid_t *a = malloc (sizeof (gid_t)*16);int n = getgroups (16,a);a[n] = gr->gr_gid;n++;if (setgroups (n,a)<0){perror ("setgroups");return 1;}if (setgid (gr->gr_gid)!=0){perror (gr->gr_name);return 1;}if (setuid (pw->pw_uid)!=0){perror (pw->pw_name);return 1;}puts ("UID:");pw = getpwuid (getuid());printf ("\t%s\n",pw->pw_name);int i;puts ("GID:");for (i=0;i<n;i++){gr = getgrgid (a[i]);printf ("\t");puts (gr->gr_name);}puts ("\nPlease command 'exit'");system ("bash");puts ("Ok");free (a);return 0;}
Страница сгенерирована за 0.03 секунд. Запросов: 25.