如何启动一个数值为-20的进程,而不给它root特权?


18

我想以-20的不错的价值开始一个过程。这要求我使用类似-的命令sudo nice -n -20 matlab。但是,这也会以root身份启动matlab。有没有办法让matlab成为非root用户?

我当前的方法是-- sudo nice -n -20 sudo -u myusername matlab在我看来,这很像黑客。有直接的方法可以做到这一点吗?


您应该能够删除sudoroot不需要使您自己的过程变得更好。
jordanm

8
如果要设置比默认值更高的优先级,则需要超级用户。(-20是最高优先级。)我想到的唯一的其他方法是在启动后对sudo renice进行操作。但是,由于您是交互式运行Matlab,因此说起来容易做起来难。
艾伦·舒特科

1
不是黑客,这是要走的路。
Hauke Laging

@jordanm-没有sudo,这是正确的命令- nice -n -20 matlab这是输出nice:无法设置niceness:权限被拒绝。Matlab的启动和漂亮的值是0
主蕙。

@AlanShutko-我可以system('sudo renice ...')在MATLAB中运行,但是matlab启动2个进程-MATLAB 和matlab_helper。我可能都必须同时做。此外,当我开始matlabpool local 进行并行处理时,我还希望所有MATLAB过程都具有较高的优先级。@HaukeLaging-我开始认为你是对的。
卢勋爵。

Answers:


20

我会正常启动它,然后再使用“ renice”。

但是,我能够与“ su”一起快速破解,它可以工作:

须藤nice -n -20 su -c command_to_run user_to_run_as

(如果您不必给sudo密码-也许是因为您刚刚提供了密码-您可以添加“&”以将整个内容放在后台。)

由于您已经使用sudo命令成为root用户,因此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 su -c do`,请参见stackoverflow.com/a/372​​7572/2522849
DrumM

8

@Jordan再走一步,这是针对sudo nice -n -xx su <username> -c matlabhack 的优雅解决方案

注意:使用username = sid,matlab元数据dir = / var / lib / matlab,nice = -10随便更改

  1. 创建Matlab元数据目录(PERPARE)

    sudo mkdir /var/lib/matlab

  2. 添加指定的用户以启动Matlab和正确的Persimisson

    须藤useradd -d / var / lib / matlab sid
    须藤弦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#使用sid的passwd
  1. 创建Matlab Shell包装器(修复无声失败ERR
    须藤-i
    猫> / usr / local / bin / wmatlab
    #!/ bin / bash-
    #启动Matlab的包装器
    / usr / local / MATLAB / <版本> / bin / matlab -desktop
    紧急行动
    chmod + x / usr / local / bin / wmatlab
  1. Ajust sid的登录外壳

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

  2. 使用ssh和Xforward启动matlab

    ssh -X sid@localhost


2
这应该是公认的答案。
user47093 '17

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
OP不想增加优先级(负好),即。旧的表示法是“ nice --20 mathlab”(双-),新的表示法是“ nice -n -20 mathlab”。只有root可以使用负nice值。
2013年

1
CAP_SYS_NICE也将允许OP在没有root特权的情况下执行此操作,但是会涉及到Linux功能的深入研究(很多人不了解这一点,并且可能做的事比其所需要的还多)。我只是为了完整性而提到它。
Bratchley 2013年


1

pam允许您为每个组的配置文件设置限制:

@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
仍然以root用户身份运行命令,这是发布者试图避免的。
凯尔·巴特

1

另一个可能的选择(简单,但安全性较低)是为nice可执行文件启用setuid / setgid权限。

sudo chmod +s /usr/bin/nice

setuid会为执行文件的任何用户分配执行文件时文件所有者的有效UID(在本例中为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>

请注意,您需要重新登录帐户才能使新组生效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.