Какова роль эффективного и реального идентификатора пользователя или группы в языке Perl?

На языке perl, когда речь идет об особых случаях обработки файлов, File Test= -r,-w,-x имеют параметры READ,WRITE и EXECUTE для эффективного пользователя. File Test= -R,-W,-X имеют параметры READ,WRITE AND EXECUTE для реальный пользователь. Где в Perl подразумевается понятие реального и эффективного пользователя?

1 ответ

Это не концепция Perl, это концепция Unix. Это связано с процессами setuid и, в частности, с разрешениями при работе от имени пользователя root.

Если процесс запускается как вы, то его настоящий UID остается вашим. Но если это setuidДля другого пользователя (не должен быть пользователем root) у него будет другой набор разрешений.

Вышеприведенные тесты позволяют различать два случая: могу ли я, как обычный пользователь, редактировать этот файл, и могу ли я, как привилегированный пользователь, сделать это?

Что касается моего опыта работы с Perl и Ubuntu:

  • Обычно невозможно использовать бит файла setuid со сценариями Perl (подробности см. В разделе Можно ли установить setuid для сценария perl?).
  • Когда Perl-скрипт запускается, то $<(реальный идентификатор пользователя), а также $> (эффективный идентификатор пользователя) будут установлены для того же пользователя, который запустил скрипт.
  • Если этот начальный пользователь является пользователем root (т. Е. $<И $> оба равны 0), то вы можете изменить эффективный идентификатор пользователя, установив $>, и позже вы также можете изменить эффективный идентификатор пользователя обратно. Если пользователь изначально не был пользователем root, вы получите исключение относительно прав при попытке сменить действующего пользователя.
  • Я не нашел способа каким-либо образом предоставить разрешение "сменить действующего пользователя" другому пользователю, кроме root.

То, что я написал выше, относится к стандартной установке Perl в Ubuntu. Если вы настроите его как-нибудь, например, измените бит setuid в интерпретаторе Perl (не в скрипте), чтобы после запуска скрипта вы могли получить другой $<, $>, но обычно вы этого не хотите.

С Perl на Windows:

  • При попытке изменить $> я всегда получаю исключение "не реализовано".
Другие вопросы по тегам