Хорошая команда без прав 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.

Затем запустите свой скрипт.

Другие вопросы по тегам