我正在创建一个Linux软件,它将有两种类型的数据库:
- Public:存储
my_program_group
上的任何人都可以访问的信息(没有root权限); - Private:只有拥有sudo访问权限的用户才能打开(
my_program_group
上的普通用户不能)。这也意味着数据库文件归root所有。
第一种数据库工作正常。
问题是:我的程序不需要用sudo运行;因此,如果某个普通用户需要打开一个私有数据库,他将需要访问root权限(提升权限)。我不想用sudo重新启动执行,而只是请求密码。
#include <sqlite3.h>
#include <stdio.h>
// Private database path
#define PATH = "/tmp/test/database.db"
void private_db(sqlite3 **db);
int main() {
sqlite3 *db;
// When the user needs to open the private database, this function will be called:
private_db(&db);
// Continue...
return 0;
}
void private_db(sqlite3 **db){
int rc;
// NEED TO RUN THIS AS ROOT:
rc = sqlite3_open(PATH, db);
if(rc != SQLITE_OK) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg( &(**db) ));
exit (1);
} else {
printf("Database successfully openend\n");
}
}
(As预期)如果我运行上面的代码,sqlite将无法打开数据库,因为系统权限。
1条答案
按热度按时间anauzrmj1#
我为你修改了一个新密码。希望能有所帮助。
创建一个名为db_helper. c的新文件,并添加以下代码:
编译db_helper. c文件,将所有者更改为root,并设置setuid位:
更新您的主程序以使用帮助程序打开私有
并编译它: