Процесс в непривилегированном режиме переключается на привилегированный режим. Затем процесс будет иметь полномочия пользователя root?

Можно сделать это с одной только оболочкой (работы в bash, dash, ksh, zsh):

df . | (read a; read a b; echo "$a")

Или если произведенный будет не нужно (то результат будет сохранен в $a) и Ваша замена процесса поддержек оболочки (как bash, zsh):

{ read; read a b;}< <(df .)

И вот некоторые сравнения со скоростью других решений:

# pure shell solution 1

bash-4.2$ time for i in $(seq 500); do df . | (read a; read a b; echo "$a"); done > /dev/null
1.899

(dash) $ time -f '%e' dash -c 'for i in $(seq 500); do df . | (read a; read a b; echo "$a"); done > /dev/null'
1.05

(ksh) $ time for i in $(seq 500); do df . | (read a; read a b; echo "$a"); done > /dev/null
    0m1.16s real     0m0.02s user     0m0.12s system

(zsh) manatwork% time (for i in $(seq 500); do df . | (read a; read a b; echo "$a"); done > /dev/null)
1.51s

# pure shell solution 2

bash-4.2$ time for i in $(seq 500); do { read; read a b;}< <(df .); done
1.192

(zsh) manatwork% time (for i in $(seq 500); do { read; read a b;}< <(df .); done)
3.51s

# other solutions

bash-4.2$ time for i in $(seq 500); do df . | tail -1 | cut -f 1 -d " "; done > /dev/null
1.405

bash-4.2$ time for i in $(seq 500); do df . | sed '2!d' | awk '{print $1}'; done > /dev/null
5.407

bash-4.2$ time for i in $(seq 500); do df . | sed -n '2{s/ .*$//;p}'; done > /dev/null
1.767

bash-4.2$ time for i in $(seq 500); do df . | sed '2!d' | awk '{print $1}'; done > /dev/null
3.334

bash-4.2$ time for i in $(seq 500); do df . | gawk 'NR==2{print $1}'; done > /dev/null
3.013

bash-4.2$ time for i in $(seq 500); do df . | mawk 'NR==2{print $1}'; done > /dev/null
1.747

bash-4.2$ time for i in $(seq 500); do df . | perl -nae 'print$F[0]if$.==2'; done > /dev/null
2.752

(Не по сравнению с stat решение, поскольку это не работает здесь.)

7
29.03.2014, 00:48
2 ответа
[115266](Я постараюсь быть кратким.)[12233]В теории существует два измерения привилегий:[12234]Архитектура набора команд компьютера [116056] [116057] (ISA), которая защищает определенную информацию и/или функции машины.[12235]Операционная система [116058]операционная система [116059] (OS), создающая эко-систему для приложений и связи. Ее ядром является ядро, программа, которая может работать на ISA без каких-либо зависимостей.[12236]Современные операционные системы выполняют множество очень разных задач, так что мы можем использовать компьютеры так же, как и сегодня. В очень(, очень, очень) упрощенном виде вы можете представить себе ядро как единственную программу, которая выполняется компьютером. Приложения, процессы и пользователи - все это артефакты эко-системы, созданной операционной системой и особенно ядром.[12237]Когда мы говорим о привилегиях пользователя(пространства) по отношению к операционной системе, мы говорим о привилегиях, управляемых, предоставляемых и применяемых операционной системой. Например, файловые разрешения, ограничивающие получение данных из определенного каталога, применяются ядром. Оно смотрит на некоторые ID, присвоенные файлу, интерпретирует некоторые биты, представляющие привилегии, а затем либо получает данные, либо отказывается это делать.[12238] Иерархия привилегий в ISA предоставляет инструменты, используемые ядром для своих целей. Конкретные детали сильно различаются, но в целом существует режим ядра, в котором программы, выполняемые процессором, очень свободны в выполнении ввода/вывода и использовании инструкций, предлагаемых ISA, а также пользовательский режим, в котором ввод/вывод и инструкции ограничены.[12239]Например, при чтении инструкций по записи данных в конкретные ядра памяти, процессор в режиме ядра может просто записывать данные по определённому адресу памяти, в то время как в пользовательском режиме он сначала выполняет несколько проверок, чтобы убедиться, что адрес памяти находится в диапазоне разрешённых адресов, по которым могут быть записаны данные. Если установлено, что адрес может не быть записан, то обычно ISA переходит в режим кернела и начинает выполнять другой поток команд, который является частью кернела, и он делает правильные вещи(TM).[12240]Это один из примеров стратегии принудительной записи, чтобы убедиться, что одна программа не вмешивается в другую. ... чтобы javascript на веб-странице, которую вы в настоящее время посещаете, не мог заставить ваше приложение для онлайн-банкинга выполнять сомнительные операции ...[12241]Заметьте, в режиме ядра больше ничего не срабатывает, чтобы обеспечить соблюдение правильных вещей, предполагается, что программа, запущенная в режиме ядра, делает правильные вещи. Поэтому в режиме ядра ничто не может заставить программу придерживаться абстрактных правил и концепций эко-системы операционной системы. Вот почему программы, выполняющиеся в режиме ядра, сравнительно мощны как пользователь root.[12242]Технически режим ядра намного мощнее, чем просто быть пользователем root в вашей операционной системе.[115285].
4
27.01.2020, 20:17
[115212] Корневые и не корневые привилегии - это все вещи, связанные с пространством пользователя. Например, пользователь root может установить приложение, а обычный пользователь - нет.[12209]Однако, даже у пользователя root есть некоторые ограничения. Эти ограничения накладываются конструкцией операционной системы и действительно различают пространство пользователя и пространство ядра. Например, даже если вы являетесь пользователем root, вы не можете изменить скорость вращения жёсткого диска, если эта опция не предоставляется вам через драйвер (вы можете записать драйвер, который разрешит эту функцию, но даже в этом случае вы получаете доступ к оборудованию не напрямую, а через драйвер).[12210]Причина этого в том, что реальный контроль над оборудованием осуществляется в пространстве ядра, а доступ к нему осуществляется через системные вызовы. Пространство ядра - это не место для пользователя :)[12211]Чтобы ответить на ваш вопрос, это не процесс, получающий привилегии root, это переход в режим ядра, который позволяет неограниченный доступ к каждому системному ресурсу. Однако, этот неограниченный доступ доступ доступен только к коду, запущенному в режиме ядра, так что ваш процесс его не имеет. Он использует только вызовы кода ядра.[12212]Код, запущенный в режиме ядра, имеет полностью неограниченный доступ к системе. [115221]
6
27.01.2020, 20:17

Теги

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