setuid и sqlite не могут открыть базу данных

У меня есть довольно простая программа на С ++, которая должна безопасно управлять локальным «кэшем». Моя идея состояла в том, чтобы сделать исполняемый файл setuid-root и сохранить кеш в домашней директории root.

Я вхожу в режим setuid по телефону seteuid(0), После, я chroot в корневой каталог root, затем попробуйте открыть кеш. Открытие завершается с ошибкой sqlite: unable to open database file,

    try {
/*
* open the SQLite DB.
*/

#ifdef DEBUG
syslog(LOG_AUTHPRIV | LOG_INFO,
"%s: am I root: uid=%d: euid=%d", __func__, getuid(), geteuid());
#endif

std::string rootDir = My::My::getRootDir();

if (chroot(rootDir.c_str()) != 0) {
snprintf(error, 1024, "%s: Could not chroot for cache: %s",
__func__, strerror(errno));
syslog(LOG_AUTHPRIV | LOG_INFO, "%s", error);
throw My::MyException(error);
}

/*
* Create a new cache DB without "other" privs
*/
umask(0007);

if ((sqlite3_open(My_Lib::LocalCache::DBCacheFileName.c_str(),
&sqlite)) != SQLITE_OK) {
if (sqlite == NULL) {
snprintf(error, 1024,
"%s: Could not open cache, dbh is null", __func__);
} else {
snprintf(error, 1024,
"%s: Could not open cache, dbh error: %s", __func__,
sqlite3_errmsg(sqlite));
}
syslog(LOG_AUTHPRIV | LOG_INFO, "%s", error);
throw My::MyException(error);
}

...

Оператор DEBUG syslog, который печатает реальные и эффективные uid, показывает реальный uid, подходящий для пользователя без полномочий root. Евид равен нулю. Пропуск в дом Root 750.

Что мне не хватает?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]