Из Википедии:
setuid и setgid (короткий для "идентификатора пользователя аппарата после выполнения" и "идентификатора группы набора после выполнения", соответственно) [1] являются флагами прав доступа Unix, которые позволяют пользователям выполнять исполняемый файл с полномочиями владельца или группы исполняемого файла. Они часто используются, чтобы позволить пользователям на компьютерной системе запускать программы со временно поднятыми полномочиями для выполнения определенной задачи. В то время как принятый идентификатор пользователя или идентификационные обеспеченные полномочия группы не всегда поднимаются, как минимум они конкретны.
Попробуйте что-то вроде этого
stefan@linux-ulsk:/usr/bin> zypper up
Root privileges are required for updating packages.
linux-ulsk:~ # whereis zypper
zypper: /usr/bin/zypper /usr/bin/X11/zypper /usr/include/zypper /usr/share/zypper /usr/share/man/man8/zypper.8.gz
linux-ulsk:~ # chmod u+s /usr/bin/zypper
linux-ulsk:~ # exit
stefan@linux-ulsk:/usr/bin> zypper up
Retrieving repository ...
Я мог запустить застежку-молнию, не будучи корнем, что я не мог прежде.
Будьте осторожны с setuid и setgid! Некоторая книжная кавычка:
Никогда не давайте сценарии оболочки setuid разрешение. Несколько методов для того, чтобы ниспровергать их известны.
Круглые скобки обозначают подоболочку в ударе. Заключить в кавычки man bash
страница:
(list) list is executed in a subshell environment (see COMMAND
EXECUTION ENVIRONMENT below). Variable assignments and builtin
commands that affect the shell's environment do not remain in
effect after the command completes. The return status is the
exit status of list.
где a list
просто нормальная последовательность команд.
Это на самом деле довольно портативно и не характерно для просто bash
все же. Shell POSIX спецификация Командного языка имеет следующее описание для (compound-list)
синтаксис:
Выполните составной список в среде подоболочки; посмотрите Среду выполнения Shell. Переменные присвоения и встроенные команды, которые влияют на среду, не должны оставаться в силе после того, как список заканчивается.
Список команд, встроенный между круглыми скобками, работает как подоболочка.
Переменные в подоболочке не видимы вне блока кода в подоболочке. Они не доступны для родительского процесса для оболочки, которая запустила подоболочку. Это, в действительности, локальные переменные.
$()
и()
? – CMCDragonkai 07.12.2015, 09:47$()
замена команды,()
подоболочка. Они оба команды выполнения, различие - то, что происходит с выводом. Имена намного легче искать, чем символы. См. также unix.stackexchange.com/q/213530/9537 – jw013 07.12.2015, 20:19