Есть ли какая-либо причина, по которой /proc/ */cmdline доступен для чтения всему миру -?

Глядя на lstat (2)справочную страницу, вы можете получить некоторое представление о случаях, которые могут привести к сбою с ошибками, отличными от ENOENT (файл не существует.)

Самый очевидный из них:

EACCES Search permission is denied for one of the directories in the path prefix of path.

Итак, вам нужен каталог, в котором вы не можете выполнять поиск.

Да, вы можете найти тот, который уже есть в вашей системе (возможно /var/lib/private, если он существует? )Но вы также можете создать его самостоятельно с эквивалентом:

$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile

Операция lstat (2 )завершится с ошибкой EACCES. (Удаление всех разрешений для каталога гарантирует это. Возможно, вам даже не нужно так много, и chmod -xудаления разрешений на выполнение будет достаточно, поскольку разрешения на выполнение в каталоге необходимы для доступа к файлам в нем.)

Есть еще один творческий способ сделать lstat (2 )неработоспособным, взглянув на его справочную страницу:

ENOTDIR A component of the path prefix of path is not a directory.

Таким образом, попытка доступа к такому файлу, как /etc/passwd/nonexistent, должна вызвать эту ошибку, которая опять же отличается от ENOENT («Нет такого файла или каталога» )и может соответствовать вашим потребностям.

Другой:

ENAMETOOLONG path is too long.

Но вам может понадобиться очень длинное имя для этого. (Я полагаю, что 4096 байт — это обычное ограничение, но ваша система/файловая система может иметь более длинное имя.)

Наконец, трудно сказать, будет ли какое-либо из них действительно полезным для вас. Вы говорите, что хотите что-то, что не запускает сценарий «файл не существует». Хотя обычно это означает ошибку ENOENT, на практике многие проверки более высокого уровня -просто интерпретируют любые ошибки из lstat (2 )как «не существует».Например, test -eили эквивалент [ -e...]из оболочки могут просто интерпретировать все вышеперечисленное как «не существует», тем более что у него нет хорошего способа вернуть другое сообщение об ошибке и не возвращать ошибку. будет означать, что файл существует, что, безусловно, не так.

30
18.10.2021, 04:06
0 ответов

Теги

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