Bash не будет выполнять системную команду в сценарии Perl

С помощью zsh, если запустить как root и вы установите

EUID=1000

Он установит евид равным 1000. Реальный uid все равно будет установлен в 0, так что вы можете вернуться к EUID 0. Любая программа, которую вы запустите, также сможет получить привилегии, выполнив setuid(), но если целью является предотвращение непреднамеренного повреждения, а не защита от вредоносных программ, то этого должно быть достаточно.

#! /bin/zsh -
GID=1000 # optional
EUID=1000 # drop *effective* privileges

some-potentially-harmful-command-that-doesnt-need-superuser

and-another

EUID=0 some-command-that-needs-superuser

more-non-privileged-commands

EUID=0 UID=1000 # now drop privileges with no coming back 
# alternatively:
# USERNAME=stephane # sets uid, gid, supplementary groups... based on the user db

Обратите внимание, что вы можете установить EUID/UID... на время выполнения команды с помощью

UID=1000 the-command

, но не с помощью UID или USERNAME, если строится команда или функция, так как zsh не будет вилкировать другой процесс, поэтому не сможет восстановить реальный пользовательский идентификатор.

Вы также можете установить EUID/UID/USERNAME в подоболочке с:

(EUID=0 USERNAME=stephane; untrusted-application)

(мы установили EUID равным 0, чтобы впоследствии иметь возможность переключать пользователя).

0
20.08.2015, 22:37
1 ответ

Я могу придумать две возможности:

Обычно вы запускаете сценарий bash из что-то вроде cron, где ваш скрипт профиля пользователя не запущен и не настроил $ PATH. В этом случае вы можете указать

system "/path/to/fastacmd ...

в скрипте perl, чтобы он не зависел от пути, или вы можете установить

$ENV{PATH}= "/my/custom/paths:$ENV{PATH}";

внутри скрипта perl, или вы можете исправить путь в скрипте bash, загрузив свой скрипты профиля:

source /etc/profile;
source ~/.profile;
source ~/.bash_profile;

Но другая возможность состоит в том, что #! / usr / bin / perl , объявленный в вашем скрипте, не тот же perl, что и в вашем PATH. Вы можете проверить это, сказав

which perl

Например, если вы скажете ./ xREPredoTop.pl , он станет

/usr/bin/perl -w ./xREPredoTop.pl

, но если вы скажете perl ./xREPredoTop.pl, он может стать

/usr/local/bin/perl ./xREPredoTop.pl

и что один может быть настроен по-другому, так что он меняет путь.

3
28.01.2020, 02:27

Теги

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