-20のnice値でプロセスを開始し、root権限を与えないようにするにはどうすればよいですか?


18

-20の素晴らしい値でプロセスを開始したいと思います。これには、-のようなコマンドを使用する必要がありますsudo nice -n -20 matlab。ただし、これはmatlabをルートとしても起動します。matlabを非ルートとして使用する方法はありますか?

私の現在のアプローチは-- sudo nice -n -20 sudo -u myusername matlabそれは、私にはハックのように見えます。これを行うための直接的なアプローチはありますか?


単にドロップすることができるはずsudoです。rootあなた自身のプロセスをうまくする必要はありません。
ヨルダン

8
デフォルトよりも高い優先度を設定する場合は、スーパーユーザーが必要です。(-20が最高の優先順位です。)これを行うために考えられる唯一の他の方法は、開始後にsudo reniceすることです。ただし、matlabをインタラクティブに実行しているので、言うよりも簡単です。
アランシュトコ

1
ハックではなく、それが道です。
ハウケレイジング

@jordanm-sudoがなければ、これは正しいコマンドです- nice -n -20 matlabそして、これはnice出力です:nicenessを設定できません:許可が拒否されました。MATLABは起動し、nice値は0です
主楼。

@AlanShutko- system('sudo renice ...')MATLABで実行できますが、matlabは2つのプロセス-MATLABとmatlab_helperを開始します。私は両方でそれをしなければならないかもしれません。さらにmatlabpool local 、並列処理を開始するときに、すべてのMATLABプロセスの優先度を高くする必要もあります。@HaukeLaging-私はあなたが正しいと考え始めています。
ローLord。

回答:


19

私は普通に起動し、その後「renice」を使用します...

しかし、私は動作する「su」と一緒に簡単にハックすることができました:

sudo nice -n -20 su -c command_to_run user_to_run_as

(sudoにパスワードを与える必要がない場合-おそらく既にパスワードを与えたばかりの場合-「&」を追加して、すべてをバックグラウンドに入れることができます。)

sudoコマンドで既にrootになっているため、suはパスワードを要求しません。Xの下のターミナルエミュレータからXプログラムを開始することができました。Xセッションを所有しているユーザーとは別のユーザーとしてXプログラムを実行したい場合は、おそらくXを許可するように明示的にXに指示する必要があります(そのユーザーのXクライアント用に開きます)。


1
ありがとうございました。だから、私が考えた方法が唯一の方法だと思う。
ローLord。

これは動作します!今出会っている唯一のことは、標準出力がないことです。これを解決するには?たとえば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 のsu -c do`を参照してくださいstackoverflow.com/a/372​​7572/2522849
DrumM

8

さらに一歩進む@Jordan、sudo nice -n -xx su <username> -c matlabハックに対するエレガントなソリューションを紹介します

注:username = sid、matlab meta-data dir = / var / lib / matlab、nice = -10を自由に変更して使用

  1. matlabメタデータディレクトリの作成(PERPARE)

    sudo mkdir /var/lib/matlab

  2. 指定されたユーザーを追加してmatlabと正しいパーシミソンを起動します

    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-keyのセットアップとコピー(オプション)

    ssh-keygen -t rsa #following key passwd misc   
    ssh-copy-id sid @ localhost #sidのパスワードを使用
  1. matlabシェルラッパーの作成サイレントエラーERRの修正)
    sudo -i
    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. Xforwardでsshを使用してmatlabを開始

    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が最高ではなく最低の優先度で実行されています。私の質問は、優先順位を下げずに優先順位を上げる方法についてでした。
ローLord。

aがなければsudo、これは正しいコマンドです- nice -n -20 matlabそしてこれは出力nice: cannot set niceness: Permission deniedです。MATLABは起動し、nice値は0です
主楼。

3
OPは優先度を上げたくない(負のナイス)、つまり 古い表記では「nice --20 mathlab」(ダブル-)、新しい表記では「nice -n -20 mathlab」。rootのみが負のnice値を使用できます。
バールドコッペルード

1
また、CAP_SYS_NICEを使用すると、OPはroot権限なしでこれを行うことができますが、Linux機能(多くの人が理解しておらず、価値がある以上の作業になる可能性があります)を掘り下げます。完全を期すために言及しただけです。
ブラッチリー


1

pamを使用すると、構成ファイルごとにniceに制限を設定できます。

@grnice hard priority -20

@grniceハードナイス-20

そして、プロセスがgrniceで実行されるグループを確認します。


1

ユーザーをsudoersに追加します(実際には、/ etc / sudoers.dの新しいファイルですが、その前提は同じです)。

niceuser ALL=NOPASSWD:/usr/bin/nice

次に、「素敵なユーザー」として:

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

そして、必要なことを行います(つまり、ユーザーは{command ...}の優先度を上げることができます)。複数のユーザーなどをサポートします- man 5 sudoers詳細に使用します。


4
それはまだコマンドをルートとして実行しますが、これはポスターが回避しようとしていることです。
カイルバット

1

別の可能なオプション(単純ですが、安全性が低い)は、nice実行可能ファイルのsetuid / setgid許可を有効にすることです。

sudo chmod +s /usr/bin/nice

setuidは、ファイルを実行できるすべてのユーザーに、ファイルの実行時にファイル所有者(この場合root)の有効なUIDを割り当てます。したがって、そのユーザーとして実行するのと同等です。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>

新しいグループを有効にするには、アカウントに再ログインする必要があることに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.