Альтернатива su / sudo для barebone-системы

Я хотел бы запустить некоторые модульные тесты в тюрьме chroot в Solaris. Нет su или sudo , и копия sulibpam.so.1 ) просто возвращает код выхода 1 без вывода, с параметрами или без них. Есть ли простой способ запускать сценарии Bash в качестве пользователя без полномочий root в такой системе? Может быть, setuid или сценарий оболочки?

  • Почему `su`` не перечитывает / etc / environment?
  • «Sudo su» делает меня пользователем root?
  • su и перенаправление
  • Комбинированный su и экран при запуске
  • su не может выполнить bin / bash / ****
  • В чем разница между `su`` и` su -login`?
  • su -l root -c "echo $ HOME" печатает мой пользовательский дом
  • выполнение команды как su
  • 2 Solutions collect form web for “Альтернатива su / sudo для barebone-системы”

    Если я правильно понимаю, вам просто нужно su от root к другому пользователю. Попробуйте скопировать su бинарный файл (ему не нужно будет устанавливать setuid root), но я не знаю, будет ли это работать на Solaris. Или скомпилируйте небольшую программу на C, которая снижает привилегии и выполняет команду.

    Вот маленькое «только-только» su. Минимально проверены. Должен компилироваться, как в Solaris и * BSD; вам нужно -D_BDS_SOURCE и #include <grp.h> под Linux, а на других платформах может потребоваться комментирование вызова обычных, но нестандартных setgroups . Запустите, например, sugexec UID GID bash /path/to/script (вы должны передавать числовые идентификаторы пользователей и групп, чтобы избежать зависимости от любой формы пользовательской базы данных, которая может быть недоступна в chroot).

     #include <errno.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <sys/types.h> #include <unistd.h> void die(char *argv0, char *obj, char *msg) { if (msg == NULL) msg = strerror(errno); fprintf(stderr, "%s: %s: %s\n", argv0, obj, msg); exit(127); } int main(int argc, char *argv[]) { uid_t uid; gid_t gid; char *endp; /* Command line parsing */ if (argc <= 3) { fprintf(stderr, "Usage: %s UID GID COMMAND [ARG...]\n", argv[0]==NULL ? "sugexec" : argv[0]); exit(127); } uid = strtoul(argv[1], &endp, 0); if (*endp) die(argv[0], argv[1], "Bad uid"); gid = strtoul(argv[2], &endp, 0); if (*endp) die(argv[0], argv[2], "Bad gid"); /* Drop to specified user and group */ if (setgid(gid)) die(argv[0], "setgid", NULL); if (setgroups(0, NULL)) die(argv[0], "setgroups", NULL); if (setuid(uid)) die(argv[0], "setuid", NULL); /* Execute the command */ execvp(argv[3], argv + 3); die(argv[0], argv[3], NULL); } 

    Отсканируйте schroot, который может прокручиваться в папку как пользователь. Вот страница man для него: http://manpages.ubuntu.com/manpages/hardy/man1/schroot.1.html

    Linux и Unix - лучшая ОС в мире.