Как Linux проверяет права доступа к файловому дескриптору?

Esto también sucede en Fed 28 cuando se ejecuta su desde la terminal de un usuario. Ejecutar "su -" no producirá este problema.

Hay un fragmento de código idéntico en /etc/bashrc y /etc/profile.d/vte.sh para probar el env. y configurando COMANDO INDICADOR _. Jugar con el código revela que es el primero el que se está ejecutando.

2
21.06.2019, 08:52
2 ответа

execveat обрабатывается do_open_execat, который указывает, что он хочет иметь возможность открыть целевой файл для выполнения. Процедура открытия файла обрабатывается черезdo_filp_openиpath_openatс процессом обхода пути -, который задокументирован отдельно . Результатом всего этого, независимо от того, как запускается процесс, являетсяstruct fileи связанный с ним struct inode, в котором хранится режим файла и, при необходимости, ссылка на ACL. Структура данных индексного дескриптора является общей для всех описаний файлов, которые ссылаются на один и тот же индексный дескриптор.

Ядро гарантирует, что информация об индексных дескрипторах в памяти соответствует дате от -до -при извлечении. Это может поддерживаться в кэшах dentry и inode в некоторых случаях (в локальных файловых системах, в частности в ext4, ext3, XFS и btrfs ), в других это будет включать некоторые операции ввода-вывода (, в частности, через сеть ).

Сама проверка разрешений выполняется чуть позже с помощьюbprm_fill_uid; при этом учитываются текущие разрешения на inode и текущие привилегии вызывающего пользователя.

Как обсуждалось ранее , разрешения проверяются только при открытии, сопоставлении или изменении его метаданных, а не при чтении или записи; поэтому файловые дескрипторы могут передаваться между процессами без новых проверок разрешений.

4
27.01.2020, 21:55

What kind of permissions are recorded in open file description, does it contain a full ACL

Нет. В «описании открытого файла»(struct file)не хранятся никакие «разрешения», кроме режимов доступа к файлу и флагов состояния файла, которые можно получить с помощью fcntl(F_GETFL)или через /proc/PID/fdinfo/FD. Все права доступа к файлам хранятся в struct inode, на которые ссылается оттуда (и которые совместно используются всеми процессами/пользователями, у которых открыт этот конкретный файл ). struct fileтакже содержит ссылку на учетные данные открывателя.

will that receiver process be able to read/write/execute the file through the fd?

Если вы спрашиваете о execveat(fd, "", av, env, AT_EMPTY_PATH), который использует только дескриптор файла в качестве указателя на индексный дескриптор, и все будет проверено так же, как если бы указанный файл был выполнен по его пути. Флаги fdне имеют значения; дескриптор файла может быть непрозрачным дескриптором, открытым сO_PATH(чем-то, что преуспеет с любым файлом, доступным по некоторому пути ).

1
27.01.2020, 21:55

Теги

Похожие вопросы