Как я поднимаю полномочия посреди конвейера?

С монолитным ядром в теории единственный непрерывный блок памяти может быть выделен для ядра. Если модули загружены (и разгружены), по требованию, то является невероятным, что вся память ядра будет непрерывна, и следовательно по определению это будет фрагментировано. Компромисс - то, что модульное ядро будет обычно использовать намного меньше памяти что монолитное ядро. Это, конечно, верно с монолитным ядром дистрибутива по умолчанию, которое, вероятно, имеет много неиспользованных драйверов, хотя менее верный, если Вы создаете свое собственное монолитное ядро.

Некоторые подсистемы просто не предоставляют себя тому, чтобы быть модульным, управлением памятью, ясно один, SMP другой. Диспетчеризация процессов не является модульной, но стратегия планирования ввода-вывода. Другие подсистемы не являются модульными, вероятно, из-за сложных взаимозависимостей, как TCP/IP.

Другая проблема с модулями состоит в том, что они не так хороши, если они управляют устройством, необходимо загрузиться от, решения как initrd работа вокруг этого.

Заключительное соображение является безопасностью, разрешение загружаемых модулей является потенциальным риском, например, ядром загружаемый руткит как knark. См. http://www.la-samhna.de/library/rootkits/index.html и http://www.sans.org/security-resources/malwarefaq/Ptrace.php. Можно снизить этот риск путем осуществления подписанных модулей (начиная с ядра 3.7), загрузки модуля блокировки в последний раз или другого укрепления.

8
07.04.2014, 06:53
2 ответа

sudo поддерживает это.

$ echo hello world | sudo cat  
SUDO password: 
hello world

Разница в том, что sudo запрашивает пароль вашего пользователя, а не root (целевого пользователя). Однако, если вы захотите, вы можете изменить это поведение с помощью директивы targetpw (или runaspw или rootpw) в sudoers.conf.


Однако, читая то, что вы пытаетесь сделать, хотя это и решит проблему эскалации прав, это не сделает того, что вы ожидаете. То есть /output/file не будет создан от имени пользователя root, он будет создан/изменен от имени вашего пользователя.

Причина этого в том, что перенаправление вывода shell выполняется до вызова каких-либо команд. Поэтому оболочка открывает /output/file и затем передает этот открытый файл командам su / sudo (и, соответственно, cat).

Однако вы можете использовать tee для этого, так как утилита tee сама откроет файл.

echo "hello world" | sudo tee /output/file >/dev/null

В основном tee копирует вывод в /output/file и STDOUT, однако STDOUT перенаправляется в /dev/null.

Вы также можете сделать:

echo "hello world" | sudo sh -c 'cat > /output/file'

... что менее загадочно.

8
27.01.2020, 20:11
[1122152]Просто, чтобы вы знали - вы не ограничиваетесь одной командой для [1122642]|pipe[1122643]:

Все эти процессы вызываются одновременно - но все они ждут [1122644]|pipe[1122645] перед тем, как что-то делать - до тех пор, пока они вообще читают [1122646]|pipe[1122647]. Так что, если вам нужно оценить переменную midstream, или настроить перенаправление, вы можете. Просто не торопитесь.

Вот еще один способ:

Если вы не выполните [1122648]( subhell )[1122649], команда [1122650]$(cat)[1122651] также получит [1122652]

Но если вы используете here-doc, вам не нужны два [1122654]cat[1122655]s:

OUTPUT:

Большая часть из вышеперечисленного просто для демонстрации. Все, что вам действительно нужно:

2
27.01.2020, 20:11

Теги

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