Какова роль эффективного и реального идентификатора пользователя или группы в языке 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:
- При попытке изменить $> я всегда получаю исключение "не реализовано".