좋은 값 -20으로 프로세스를 시작하고 루트 권한을 부여하지 않으려면 어떻게해야합니까?


18

좋은 값 -20으로 프로세스를 시작하고 싶습니다. 이를 위해서는-와 같은 명령을 사용해야합니다 sudo nice -n -20 matlab. 그러나 이것은 matlab을 루트로 시작합니다. 비 루트로 matlab을 가질 수있는 방법이 있습니까?

내 현재 접근 방식은-- sudo nice -n -20 sudo -u myusername matlab나에게 핵처럼 보입니다. 이를위한 직접적인 접근 방법이 있습니까?


를 떨어 뜨릴 수 있어야합니다 sudo. root자신의 프로세스를 멋지게 만드는 데 필요하지 않습니다.
jordanm

8
기본값보다 높은 우선 순위를 설정하려면 수퍼 유저가 필요합니다. (-20이 최우선 순위입니다.) 내가 생각할 수있는 유일한 다른 방법은 renice가 시작된 후에 sudo를하는 것입니다. 그러나 matlab을 대화식으로 실행하기 때문에 수행하는 것보다 쉽습니다.
Alan Shutko

1
해킹이 아니라 갈 길입니다.
Hauke ​​Laging

@jordanm-sudo가 없으면 이것이 올바른 명령입니다. nice -n -20 matlab그리고 이것은 nice 출력입니다. niceness를 설정할 수 없습니다 : 권한이 거부되었습니다. Matlab이 시작되고 좋은 가치는 0입니다.
Lord Loh.

@AlanShutko- system('sudo renice ...')MATLAB에서 실행할 수 있지만 matlab은 MATLAB과 matlab_helper의 두 프로세스를 시작합니다. 나는 둘 다해야 할 수도 있습니다. 또한 matlabpool local 병렬 처리를 시작할 때 모든 MATLAB 프로세스의 우선 순위를 높이기를 원합니다 . @HaukeLaging-당신이 옳다고 생각하기 시작했습니다.
주님로.

답변:


20

정상적으로 시작하고 나중에 "renice"를 사용합니다 ...

그러나 나는 "su"와 함께 빠른 해킹을 할 수있었습니다.

sudo nice -n -20 su -c command_to_run user_to_run_as

(sudo에 비밀번호를 제공 할 필요가없는 경우 (아마도 이미 비밀번호를 입력했기 때문에) "&"를 추가하여 모든 것을 백그라운드에 넣을 수 있습니다.

sudo 명령으로 이미 루트가되었으므로 su는 암호를 묻지 않습니다. X 아래의 터미널 에뮬레이터에서 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`

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 및 올바른 persimisson을 시작하십시오.

    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 # 팔로 잉 키 암호 기타   
    ssh-copy-id sid @ localhost #sid의 암호 사용
  1. matlab 쉘 랩퍼 작성 (Fix silent fail ERR )
    sudo -i
    고양이> / usr / local / bin / wmatlab
    #! / bin / bash-
    # MATLAB을 시작하는 래퍼
    / usr / local / MATLAB / <버전> / ​​bin / matlab -desktop
    EOF
    chmod + x / usr / local / bin / wmatlab
  1. 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 대신 가장의 가장 낮은 우선 순위로 실행됩니다. 내 질문은 우선 순위를 높이고 낮추지 않는 방법에 관한 것입니다.
주님로.

a가 없으면 sudo올바른 명령 nice -n -20 matlab이며 출력 nice: cannot set niceness: Permission denied입니다. Matlab이 시작되고 좋은 가치는 0입니다.
Lord Loh.

3
OP는 우선 순위를 높이고 싶지 않습니다 (부정적). 이전 표기법에서는 "nice --20 mathlab"(이중-), 새로운 표기에서는 "nice -n -20 mathlab"입니다. 루트 만이 음수의 좋은 값을 사용할 수 있습니다.
Baard Kopperud

1
CAP_SYS_NICE는 OP가 루트 권한없이이를 수행 할 수 있도록하지만 Linux 기능에 대한 탐구를 포함합니다 (많은 사람들이 이해하지 못하고 가치가있는 것보다 더 많은 작업을 수행 할 수 있음). 나는 완전성을 위해 그것을 언급했습니다.
Bratchley


1

pam을 사용하면 그룹당 구성 파일에 대한 제한을 설정할 수 있습니다.

@grnice hard priority -20

@grnice 열심히 좋은 -20

그리고 프로세스가 grnice에서 실행되는지 확인하십시오.


1

sudoers에 사용자를 추가하십시오 (실제로 /etc/sudoers.d의 새 파일이지만 동일한 전제).

niceuser ALL=NOPASSWD:/usr/bin/nice

그런 다음 "niceuser"로 :

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

그리고 필요한 작업을 수행합니다 (즉, 이제 사용자는 {command ...}의 우선 순위를 높일 수 있습니다). 여러 사용자 등을 지원합니다 man 5 sudoers. 자세한 내용은 사용 하십시오.


4
그것은 여전히 ​​포스터를 피하려고 시도하는 루트로 명령을 실행합니다.
Kyle Butt

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.