Как мне запустить процесс с хорошим значением -20 и не дать ему привилегии root?


18

Я хотел бы начать процесс с хорошим значением -20. Это требует, чтобы я использовал команду как - sudo nice -n -20 matlab. Тем не менее, это также запускает matlab как root. Есть ли способ получить Matlab без полномочий root?

Мой нынешний подход - sudo nice -n -20 sudo -u myusername matlab- который для меня выглядит как взломать. Есть ли прямой подход к этому?


Вы должны быть в состоянии просто уронить sudo. rootне нужно для приятного собственного процесса.
Иордания

8
Если вы хотите установить более высокий приоритет, чем по умолчанию, вам нужен суперпользователь. (-20 является высшим приоритетом.) Единственный другой способ, которым я могу придумать, это сделать sudo renice после его запуска. Однако, поскольку вы запускаете Matlab в интерактивном режиме, это легче сказать, чем сделать.
Алан Шутко

1
Не взломать, это путь.
Хауке Лагинг

@jordanm - без sudo это правильная команда - nice -n -20 matlabи это хороший вывод: нельзя установить добротность: в доступе отказано. Matlab запускается, и хорошее значение равно 0.
Лорд Ло.

@AlanShutko - я мог бы запустить system('sudo renice ...')в MATLAB, но Matlab запускает 2 процесса - MATLAB и matlab_helper. Я мог бы сделать это на обоих. Более того, я также хочу, чтобы все мои процессы MATLAB имели высокий приоритет - когда я начинаю matlabpool local параллельную обработку. @HaukeLaging - я начинаю думать, что ты прав.
Лорд Ло.

Ответы:


20

Я бы запустил его как обычно и потом использовал бы "renice" ...

Однако я смог быстро взломать «su», который работает:

sudo nice -n -20 su -c command_to_run user_to_run_as

(Если вам не нужно давать sudo пароль - возможно, потому что вы его только что дали - вы можете добавить «&», чтобы поместить все это в фоновый режим.)

Поскольку вы уже стали пользователем root с помощью команды sudo, su не будет запрашивать у вас пароль. Я смог запустить X-программу из эмулятора терминала под X. Если вы хотите запустить X-программу от имени другого пользователя, а не пользователя, владеющего X-сессией, вам, вероятно, потребуется явно указать X, чтобы разрешить ее (открыт для X-клиентов от этого пользователя).


1
Спасибо. Таким образом, я думаю, что способ, которым я полагал, был единственным способом сделать.
Лорд Ло.

Это работает! Единственное, с чем я сталкиваюсь сейчас, это то, что у меня нет стандартного вывода. Как это решить? Например, не sudo nice -n 19 su -c $(echo "test")дает вывода.
DrumM

Мое плохое, что вам нужно сделать sudo nice -n 19 su -c "echo 'test'"' When you want to run a function in су -c do` см stackoverflow.com/a/3727572/2522849
Drumm

8

Еще один шаг @Jordan, вот элегантное решение против sudo nice -n -xx su <username> -c matlabвзлома

Примечание: используя username = sid , метаданные matlab dir = / var / lib / matlab , nice = -10 измените по вашему желанию

  1. Создать каталог метаданных matlab (PERPARE)

    sudo mkdir /var/lib/matlab

  2. Добавить указанного пользователя для запуска matlab & right persimisson

    sudo useradd -d / var / lib / matlab sid
    Судо Чон Сид: sid / var / lib / matlab
  1. Установить пароль пользователя (sid)

    sudo passwd sid

  2. Добавить следующее в /etc/security/limits.conf

    sid - priority -10

  3. Настройка и копирование ssh-ключа для автоматизации входа в систему (необязательно)

    ssh-keygen -t rsa # следующий ключ passwd misc   
    ssh-copy-id sid @ localhost #using sid's passwd
  1. Создать оболочку оболочки Matlab (исправить ошибку молчания ERR )
    судо
    cat> / usr / local / bin / wmatlab
    #! / bin / bash -
    # Обертка для запуска Matlab
    / usr / local / MATLAB / <версия> / bin / matlab -desktop
    EOF
    chmod + x / usr / local / bin / wmatlab
  1. Вход в оболочку Ajust sid

    sudo usermod -s /usr/local/bin/wmatlab sid

  2. начать Matlab с помощью SSH с Xforward

    ssh -X sid@localhost


2
это должен быть принятый ответ.
user47093

4

Я обнаружил, что это можно сделать, изменив файл /etc/security/limits.conf(по крайней мере, на некоторых дистрибутивах Linux). В моем случае я просто добавил

#<domain> <type> <item> <value> my_user - nice -20

тогда вы можете выполнить

nice -n -20 matlab


После внесения этого изменения следует снова выйти из системы
shaneb

2

Как сказал @jordanm, брось Судо. Вы можете настроить свои собственные процессы, чтобы дать им более низкий приоритет:

nice -20 matlab

Нет sudo.


Это не сработало. system('ps a -o pid -o comm -o nice')получил меня 13580 MATLAB 19- MATLAB работает с самым низким приоритетом вместо самого высокого. Мой вопрос был о том, как повысить приоритет, а не уменьшить его.
Лорд Ло.

Без sudo, это правильная команда - nice -n -20 matlabи это вывод nice: cannot set niceness: Permission denied. Matlab запускается, и хорошее значение равно 0.
Лорд Ло.

3
ОП хочет не увеличивать приоритет (отрицательно приятно), т.е. «хороший - 20 mathlab» (двойной -) в старом формате, «хороший -n -20 mathlab» в новом. Только root может использовать отрицательные значения nice.
Баард Копперуд

1
CAP_SYS_NICE также позволит OP делать это без привилегий root, но включает в себя изучение возможностей Linux (что-то, что мало кто понимает и может потребовать больше работы, чем оно того стоит). Я просто упоминаю это для полноты картины.
Братчли


1

pam позволяет вам установить ограничения для nice для каждой группы в ее конфигурационном файле:

@grnice жесткий приоритет -20

@grnice hard nice -20

И убедитесь, что в группе процесс запускается в границе.


1

Добавьте пользователя в sudoers (фактически, новый файл в /etc/sudoers.d, но в той же предпосылке):

niceuser ALL=NOPASSWD:/usr/bin/nice

Затем, как "niceuser":

niceuser@localhost $ sudo nice -n -10 command...

и он делает то, что мне нужно (то есть мой пользователь теперь может увеличить приоритет {command ...}). Он поддерживает несколько пользователей и т. Д. - используйте man 5 sudoersдля деталей.


4
Это по-прежнему запускает команду от имени пользователя root, чего и пытается избежать постер.
Кайл Батт

1

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

sudo chmod +s /usr/bin/nice

setuid назначает любому пользователю, который может выполнить файл, эффективный UID владельца файла (в данном случае root) при выполнении файла, таким образом, эквивалентно тому, что он работает как этот пользователь. setguid делает то же самое для эффективного GID.


Или вы можете сделать это более безопасно:

# create a system group named `nice'
groupadd -r nice

# set the owner group for `nice' executable
chgrp nice /usr/bin/nice

# disallow other users to run `nice`
chmod o-x /usr/bin/nice

# allow anyone who are able to execute the file gain a setuid as root
chmod u+s /usr/bin/nice

# add your user to the group
usermod -a -G nice <your-user-name>

Остерегайтесь, вам нужно повторно войти в свою учетную запись, чтобы новая группа вступила в силу.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.