Предоставляя пользователям привилегии планировщика

Что будет отображаться в первичной подсказке, определяется содержимым переменной PS1. Вот отрывок из документации bash:

\w     the current working  directory,  with  $HOME  abbreviated
       with  a tilde (uses the value of the PROMPT_DIRTRIM vari‐
       able)
\W     the basename of the current working directory, with $HOME
       abbreviated with a tilde

Это означает, что если ваша PS1 использует \w, то будет выведен весь путь для будет напечатан весь путь к текущему каталогу, в то время как \W вызовет другое поведение. поведение, которое вы наблюдали: выводится только последний компонент (с исключением исключением, в обоих случаях, для вашего домашнего каталога).

По умолчанию PS1 на какой-то случайной системе на базе Linux, которую я пробовал, был следующим. [\u@\h \W]\$, но это варьируется от системы к системе.

1
16.07.2018, 12:48
2 ответа

У меня есть решение, хотя оно немного странное и обнажает дыру в ОС.

Во время postinst, я:

cp $(which chrt) bin/chrt
setcap cap_sys_nice+ep bin/chrt

Затем в коде я запускаю процесс с:

bin/chrt -o -p 70 getpid()

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

0
27.01.2020, 23:43

Для изменения планировщика и приоритета требуется только возможность CAP_SYS_NICE; см. план (7 )Привилегии и ограничения ресурсов . Вы, вероятно, также захотите посмотреть справочную страницу для sched_setscheduler, где упоминается sched (7 ).

Есть несколько способов предоставить вашей программе такую ​​возможность; самый простой, наверное, setcap:

# setcap cap_sys_nice=ep /usr/local/bin/your-program

Это работает аналогично установке -идентификатора пользователя -, но гораздо более ограничено (, поскольку дает только одну возможность ). Конечно, CAP _SYS _NICE эффективно дает программе разрешение на зависание системы (, потребляя все процессорное время задачами реального времени ).

Другие способы включают использование запуска -в качестве -корневой оболочки (, которая сбрасывает все другие разрешения )или повышение прав с использованием, например, RealtimeKit/PolicyKit.

(Для получения дополнительной информации о возможностях я предлагаю начать с возможностей (7)).

2
27.01.2020, 23:43

Теги

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