Updateкорневым + execvp + баш
Понял! Смотрите мое решение (пятый комментарий)
Вот моя проблема:
Я создал небольшой бинарный файл под названием «Тюрьма» и в/и т.д./пароль Я сделал это оболочка по умолчанию для тестового пользователя.
Вот - упрощена - исходный код:
#define HOME "/home/user"
#define SHELL "/bin/bash"
...
if(chdir(HOME) || chroot(HOME)) return -1;
...
char *shellargv[] = { SHELL, "-login", "-rcfile", "/bin/myscript", 0 };
execvp(SHELL, shellargv);
Ну, независимо от того, как сильно я стараюсь, она не кажется, что, когда мои журналы тест пользователя в, /bin/MyScript никогда не будет быть источником. Аналогично, если я удалю файл .bashrc
в домашнем каталоге пользователя, он также будет проигнорирован.
Почему бы вам не помочь этим людям?
-
Некоторые уточнения, не обязательно необходимо, но, чтобы очистить некоторые из точек зрения, высказанных в комментариях:
- «Тюрьма» двоичный файл на самом деле SUID, тем самым позволяя ему Chroot() успешно.
- Я использовал 'ln', чтобы сделать подходящие бинарные файлы доступными - моя ячейка для jake красиво дополнена :)
- Проблема, похоже, не в том, чтобы chrooting пользователь ... что-то еще является недостатком.
Ах, я (ложно) предположил, что либо ваш chroot имел все в тех же местах, что и обычная система, или вы сначала исправляли окружающую среду. Недостаток setuid/gid back не должен нарушать это (хотя это устранит преимущество безопасности для chrooting). – ephemient 2008-11-01 04:34:46