конструктор разделяемой библиотеки и права доступа - PullRequest
0 голосов
/ 13 июля 2020

Меня немного смущают права доступа конструктора разделяемой библиотеки. Я так понимаю, что конструктор запускается только один раз при загрузке библиотеки. Мой вопрос касается разрешений. Если я создаю дизайн так, что исполняемый файл, который сначала загружает библиотеку, имеет повышенные разрешения, я предполагаю, что он может затем поделиться этими результатами с другим исполняемым файлом без повышенных разрешений, которые просто связываются с библиотекой. Это правильно?

Например, предположим, что в конструкторе мы читаем файл и настраиваем таблицу ha sh, используя значения из этого файла. Права доступа к файлу таковы, что только root может читать файл. После чтения файла другие программы, не работающие как root, которым требуются значения, могут получить их из таблицы ha sh.

  1. Первый исполняемый файл, загружающий общую библиотеку, запускается как root и загружает значения.

  2. Все другие программы, которые связываются с общей библиотекой после ее первоначальной загрузки, получают доступ к значениям, даже если они не работают как root. Они получают доступ к данным просто потому, что используют общую библиотеку, в которую уже загружены начальные значения.

Это правильно?

// pseudo code
// This is called on library load.  
static void foo_constructor( ) __attribute__( ( constructor ) );
void foo_constructor( )
{
    // Read in file with root only permissions and create map table
}

// This can be called by anyone using the shared library
std::map<std::string, std::string>& Foo:getMap()
{
   // Return map
}
...