parted /dev/sda mklabel gpt
parted /dev/sda mkpart primary 0GB 100%
Затем запустите программу установки.
Документ, на который вы ссылаетесь (http://www.faqs.org/faqs/unix-faq/faq/part4/section-7.html), описывает поведение ln
в (предположительно )системе UNIX, и вы смотрели руководство в системе Linux, или, точнее, GNU/Linux. GNU является важным моментом здесь. У GNU ln
действительно есть вариант, который вы упомянули :
-i, --interactive
prompt whether to remove destinations
Однако это расширение GNU и не является частью стандарта POSIX , в котором определены только следующие флаги опций:
-f
Force existing destination pathnames to be removed to allow the link.
-L
For each source_file operand that names a file of type symbolic link, create a (hard) link to the file referenced by the symbolic link.
-P
For each source_file operand that names a file of type symbolic link, create a (hard) link to the symbolic link itself.
-s
Create symbolic links instead of hard links. If the -s option is specified, the -L and -P options shall be silently ignored.
Таким образом, поскольку -i
не является допустимой опцией для ln
, команда ln /etc/setuid_script -i
фактически создаст жесткую ссылку с именем -i
, которая указывает на /etc/setuid_script
. Затем команда PATH=.
переопределяет переменную PATH
для поиска исполняемых файлов только в текущем каталоге, что теперь означает, что -i
будет выполнять файл с именем -i
в текущем каталоге, который, поскольку он является жесткой ссылкой на /etc/setuid_script
, вместо этого выполнит сценарий. Однако, поскольку это сценарий оболочки, фактический запуск команды будет /bin/sh -i
.
Код ln /etc/setuid_script -i
предназначен для создания жесткой ссылки на файл с именем -i
в текущем каталоге. Вам может понадобиться сказать ln -- /etc/setuid_script -i
, чтобы это заработало, если вы используете инструменты GNU.
Оболочка может запускать команды тремя различными способами.
sh -c "mkdir /tmp/me"
с флагом -c
. sh filename
sh -i
или sh
. Исторически сложилось так, что когда у вас есть сценарий оболочки с именем foo
, начинающийся с #!/bin/sh
, ядро вызывает его с именем файла, то есть /bin/sh foo
, чтобы указать ему использовать второй способ чтения команд. Если вы дадите ему имя файла -i
, тогда ядро вызовет /bin/sh -i
, и вы получите третий способ.
Существуют также условия гонки. Это было использовано таким образом.
exec
вызывается для запуска скрипта. #!/bin/sh
и видит, что это сценарий для /bin/sh. Это классический TOCTTOU (время проверки на время использования)атака. Проверка на шаге 2 выполняется в отношении файла, отличного от того, который использовался (в открытом вызове )на шаге 6.
Обе эти ошибки обычно исправляются в наши дни.