Обновление
Понял! Смотрите мое решение (пятый комментарий)
Вот моя проблема:
Я создал небольшой двоичный файл под названием «jail» и в / etc / password я сделал его оболочкой по умолчанию для тестового пользователя.
Вот - упрощенный - исходный код:
#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
в домашний каталог пользователя, он также будет проигнорирован.
С чего бы паршивым снобам эти парни?
-
Некоторые точности, не обязательно относящиеся к делу, но для прояснения некоторых моментов, высказанных в комментариях:
- Двоичный файл 'jail' на самом деле suid, что позволяет ему успешно выполнять chroot ().
- Я использовал 'ln', чтобы сделать соответствующие двоичные файлы доступными - моя тюремная камера хорошо заполнена:)
- Кажется, проблема не в том, чтобы синхронизировать пользователя ... что-то еще - упущение.