Вот двухпроходное решение
awk -f runawk first_pass=1 file first_pass=0 file
, где содержимое runawk
равно
FNR == 1 && /^Id/{
if (!first_pass) print
next
}
first_pass{
if (!($1 in max)){
min[$1] = max[$1] = $3
next
}
max[$1] = $3 > max[$1]? $3: max[$1]
min[$1] = $3 < min[$1]? $3: min[$1]
}
!(first_pass){
print $1, $2, $3, max[$1] - min[$1]
}
Возможности - это уровень повышения привилегий, аналогичный setuid, но более детализированный; например, программа может получить привилегии CAP_NET_RAW без полного доступа корневого уровня. Это большой шаг вперед для «минимально необходимых привилегий» и контроля над сервером, поэтому он хорошо , но не является обязательным контролем доступа; это повышение привилегий.
SELinux работает с концепциями меток и разрешений между метками. Таким образом, вы можете присвоить процессу httpd
метку «веб-сервер», всем файлам внутри веб-дерева - метку «веб-файлы», а затем предоставить «процессы с меткой веб-сервера могут читать веб-файлы и ничего больше».
Эта конструкция маркировки находится над существующими разрешениями файловой системы и разрешениями ACL. Даже если файл доступен для чтения всем, SELinux может запретить доступ к нему. Чтобы процессу был предоставлен доступ, он должен пройти как разрешения DAC (разрешения файловой системы), так и разрешения MAC (SELinux).
С коммерческой точки зрения, eTrust Access Control (или Control Minder, или как там он сейчас называется; первоначально SEOS ) является еще одним уровнем MAC. Это не использует метки для управления вещами, но разрешает правила, определенные путем, и программы контрольных сумм, если они используются в правиле. Это более гибко, чем метки SELinux (и является кроссплатформенным; например, Solaris, AIX, HPUX). Опять же, это находится выше уровня DAC файловой системы; оба должны одобрить запрос.