Хорошая команда без прав root
Мне нужно бежать dosemu
с nice --20
из сценария. Проблема в том, что отрицательное значение может быть применено только с помощью sudo.
Ты знаешь какой-нибудь способ бега nice
команда без sudo
или просто беги nice --20 dosemu
из скрипта?
3 ответа
К сожалению, я не думаю, что это легко выполнимо.
Если ваш процесс доза выполняется как отдельный пользователь, то вы можете установить приоритет всех процессов этого пользователя на отрицательное значение, используя /etc/security/limits.conf
,
РЕДАКТИРОВАТЬ: глупый я, вы не можете создать сценарий оболочки suid, который просто не работает.
РЕДАКТИРОВАТЬ 2: ОК, вы можете настроить sudo таким образом, чтобы вам не требовалось вводить пароль, когда кто-то из группы sudo запускает nice или renice. В окне терминала введите
sudo visudo
Это откроет простой текстовый редактор, который будет редактировать конфигурацию sudo. Добавьте следующую строку в конец файла:
%sudo ALL = (ALL) NOPASSWD: /usr/bin/nice,/usr/bin/renice
Выйдите из редактора. Редактор позаботится о том, чтобы синтаксис был правильным (иначе можно было бы сломать систему). Теперь вы можете запустить
sudo nice -n -20 sudo -u $USER /some/program
и вам не будет предложено ввести пароль. Фактически, nice запустит еще один процесс с именем sudo с приоритетом -20. Этот новый процесс sudo переключится обратно на вашего первоначального пользователя (-u $USER
в противном случае вы запустите /some/program от имени root) и запустите /some/program.
Попробуй это:
sudo -k nice -n -20 su -c "dosemu" $USER
пока он работает, запустите это:
ps -A --forest -o pid,user,command |grep dosemu
вы увидите, что nice
был запущен с правами root, но dosemu
был запущен как обычный $USER.
Поймите, насколько это безопасно: чтобы убедиться в отсутствии недостатков, попробуйте это там, где вы увидите, что пароль запрашивается 2 раза, потому что sudo ls
запускается как обычный $USER, поэтому скрипт с sudo не будет работать незаметно:
sudo -k nice -n -5 su -c "sudo ls" $USER
и это будет запрашивать пароль только один раз, так как он уже является пользователем root sudo ls
:
sudo -k nice -n -5 su -c "sudo ls" root
PS.: вместо дозему, для тестов я использовал sleep 120
, а также sudo -k
для повышенной безопасности.
Пытаться: sudo -s -H
Он регистрирует вас как root, после чего вам не понадобится sudo.
Затем запустите свой скрипт.