Як запустити процес з хорошим значенням -20 і не надати йому привілей на root?


18

Я хотів би розпочати процес з хорошим значенням -20. Це вимагає від мене використання команди типу - sudo nice -n -20 matlab. Однак це також починає matlab як root. Чи є спосіб мати матлаб як некореневий?

Мій сучасний підхід - sudo nice -n -20 sudo -u myusername matlab- що, як на мене, схоже на злом. Чи існує прямий підхід до цього?


Ви повинні мати можливість просто скинути sudo. rootне потрібно для приємного власного процесу.
Йорданм

8
Якщо ви хочете встановити більш високий пріоритет, ніж типовий, вам потрібен суперпользователь. (-20 є найвищим пріоритетом.) Єдиним іншим способом, який я можу зробити, це було б судо реніне після його запуску. Однак, оскільки ви керуєте матлабом інтерактивно, це простіше сказати, ніж зробити.
Алан Шутко

1
Не хак, це шлях.
Hauke ​​Laging

@jordanm - Без судо, це правильна команда - nice -n -20 matlabі це результат приємний: не можна встановити приємність: дозвіл відмовлено. Matlab запускається, і приємне значення дорівнює 0.
Лорд Лох.

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

Відповіді:


21

Я б почав це нормально і після цього використовував "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

9

Один крок @Jordan, Ось елегантне рішення проти sudo nice -n -xx su <username> -c matlabзлому

Примітка: Використовуючи ім'я користувача = sid , метадані matlab dir = / var / lib / matlab , nice = -10 зміни за вашим бажанням

  1. Створення регламенту мета-даних matlab (PERPARE)

    sudo mkdir /var/lib/matlab

  2. Додайте вказаного користувача, щоб запустити команду matlab & right

    sudo useradd -d / var / lib / matlab sid
    sudo chown sid: sid / var / lib / matlab
  1. Встановити пароль користувача (sid)

    sudo passwd sid

  2. Додайте до /etc/security/limits.conf

    sid - priority -10

  3. Налаштування та копіювання ssh-ключа для автоматизації входу (ОПЦІОНАЛЬНО)

    ssh-keygen -t rsa # наступна клавіша misw   
    ssh-copy-id sid @ localhost #using sid's passwd
  1. Створіть обгортку оболонки matlab (виправте помилку помилки ERR )
    судо -і
    cat> / usr / local / bin / wmatlab
    #! / bin / bash -
    # Обгортка для запуску матлабу
    / usr / local / MATLAB / <version> / 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


Після внесення цієї зміни слід вийти / знову: unix.stackexchange.com/q/108603/247665
shaneb

2

Як @jordanm сказав sudo. Ви можете приємно власні процеси, щоб надати їм нижчий пріоритет:

nice -20 matlab

Ні sudo.


Це не вийшло. system('ps a -o pid -o comm -o nice')отримав мене 13580 MATLAB 19- MATLAB працює з найнижчим пріоритетом замість найвищого. У мене було питання про те, як збільшити пріоритет, а не зменшити його.
Лорд Лох.

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

3
ОП хоче не збільшувати пріоритет (негативно приємно), тобто. "хороший - 20 математичних" (подвійний -) у старому позначенні, "хороший -n -20 математичний" у новому. Тільки root може використовувати негативні nice-значення.
Баард Копперуд

1
CAP_SYS_NICE також дозволить ОП це робити без привілеїв root, але передбачає поглиблення можливостей Linux (щось не багато людей розуміє і може бути більше роботи, ніж варто). Я просто згадую це заради повноти.
Братчлі


1

pam дозволяє встановити обмеження для nice на групу її конфігураційного файлу:

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

@grnice важко приємно -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
Це все ще виконує команду як корінь, чого намагається уникнути плакат.
Кайл Батт

1

Інший можливий варіант (простий, але менш безпечний) - включити встановлений / встановлений жорсткий дозвіл на 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.