Làm cách nào để bắt đầu một quy trình có giá trị -20 và không cho đặc quyền gốc?


18

Tôi muốn bắt đầu một quá trình với giá trị -20. Điều này đòi hỏi tôi phải sử dụng một lệnh như - sudo nice -n -20 matlab. Tuy nhiên, điều này cũng bắt đầu matlab như root. Có cách nào để có MATLAB là không root?

Cách tiếp cận hiện tại của tôi là - sudo nice -n -20 sudo -u myusername matlab- mà, đối với tôi trông giống như một vụ hack. Có một cách tiếp cận trực tiếp để làm điều này?


Bạn sẽ có thể chỉ cần thả sudo. rootkhông cần thiết để làm đẹp quá trình của riêng bạn.
jordanm

8
Nếu bạn muốn đặt mức độ ưu tiên cao hơn mức mặc định, bạn cần có siêu người dùng. (-20 là ưu tiên cao nhất.) Cách khác duy nhất tôi có thể nghĩ để làm điều này là sudo renice sau khi nó được bắt đầu. Tuy nhiên, vì bạn đang chạy MATLAB một cách tương tác, điều đó nói dễ hơn làm.
Alan Shutko

1
Không phải là hack, đó là cách để đi.
Hauke ​​Laging

@jordanm - Không có sudo, đây là lệnh đúng - nice -n -20 matlabvà đây là đầu ra tốt đẹp: không thể thiết lập độ đẹp: Quyền bị từ chối. Matlab khởi động và giá trị tốt đẹp là 0.
Lord Loh.

@AlanShutko - Tôi có thể chạy system('sudo renice ...')trong MATLAB, nhưng matlab bắt đầu 2 quy trình - MATLAB và matlab_helper. Tôi có thể phải làm điều đó trên cả hai. hơn nữa, tôi cũng muốn tất cả các quy trình MATLAB của mình được ưu tiên cao - khi tôi bắt đầu matlabpool local xử lý song song. @HaukeLaging - Tôi bắt đầu nghĩ bạn đúng.
Chúa ơi.

Câu trả lời:


19

Tôi sẽ khởi động nó bình thường và sử dụng "renice" sau đó ...

Tuy nhiên tôi đã có thể thực hiện một bản hack nhanh cùng với "su" hoạt động:

sudo đẹp -n -20 su -c lệnh_to_run user_to_run_as

(Nếu bạn không phải cung cấp cho sudo mật khẩu - có lẽ vì bạn vừa mới cung cấp mật khẩu - bạn có thể thêm "&" để đặt toàn bộ vào nền.)

Vì bạn đã trở thành root bằng lệnh sudo, su sẽ không hỏi bạn mật khẩu. Tôi đã có thể khởi động chương trình X từ trình giả lập thiết bị đầu cuối trong X. Nếu bạn muốn chạy chương trình X với tư cách người dùng khác ngoài người dùng sở hữu phiên X, có lẽ bạn cần phải nói rõ ràng với X để cho phép (mở cho khách hàng X từ người dùng đó).


1
Cảm ơn bạn. Vì vậy, tôi nghĩ rằng cách tôi nghĩ là cách duy nhất để làm.
Chúa ơi.

Những công việc này! Điều duy nhất tôi gặp phải bây giờ là tôi không có đầu ra tiêu chuẩn. Làm thế nào để giải quyết điều này? Ví dụ, sudo nice -n 19 su -c $(echo "test")không có đầu ra.
DrumM

sudo nice -n 19 su -c "echo 'test'"' When you want to run a function in Thật tệ, bạn cần phải làm su -c do`, xem stackoverflow.com/a/3727572/2522849
DrumM

8

Một bước nữa @Jordan, Đây là giải pháp tao nhã chống sudo nice -n -xx su <username> -c matlabhack

Lưu ý: Sử dụng tên người dùng = sid , matlab meta-data dir = / var / lib / matlab , beautiful = -10 thay đổi theo ý muốn của bạn

  1. Tạo thư mục siêu dữ liệu MATLAB (PERPARE)

    sudo mkdir /var/lib/matlab

  2. Thêm người dùng được chỉ định để khởi chạy MATLAB & phải

    sudo useradd -d / var / lib / matlab sid
    sudo chown sid: sid / var / lib / matlab
  1. Đặt mật khẩu người dùng (sid)

    sudo passwd sid

  2. Nối sau vào /etc/security/limits.conf

    sid - priority -10

  3. Cài đặt và sao chép ssh-key để tự động đăng nhập (TÙY CHỌN)

    ssh-keygen -t rsa #following key passwd misc   
    ssh-copy-id sid @ localhost #use sidwd
  1. Tạo trình bao bọc shell MATLAB (sửa lỗi ERR im lặng )
    sudo -i
    mèo> / usr / local / bin / wmatlab
    #! / bin / bash -
    # Một trình bao bọc để khởi chạy MATLAB
    / usr / local / MATLAB / <phiên bản> / bin / matlab -desktop
    EOF
    chmod + x / usr / local / bin / wmatlab
  1. Vỏ đăng nhập của Ajust sid

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

  2. bắt đầu MATLAB bằng ssh với Xforward

    ssh -X sid@localhost


2
đây sẽ là câu trả lời được chấp nhận
user47093

4

Tôi đã tìm thấy điều này có thể được thực hiện bằng cách sửa đổi tệp /etc/security/limits.conf(ít nhất là trên một số bản phân phối linux). Trong trường hợp của tôi, tôi chỉ cần thêm

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

sau đó bạn có thể thực thi

nice -n -20 matlab


Sau khi thực hiện thay đổi này, nên đăng xuất / đăng nhập lại: unix.stackexchange.com/q/108603/247665
shaneb

2

Như @jordanm nói thả sudo. Bạn có thể làm đẹp các quy trình của riêng mình để ưu tiên cho chúng thấp hơn:

nice -20 matlab

Không sudo.


Điều này đã không làm việc. system('ps a -o pid -o comm -o nice')có tôi 13580 MATLAB 19- MATLAB đang chạy với mức ưu tiên thấp nhất thay vì cao nhất. Câu hỏi của tôi là làm thế nào để tăng mức độ ưu tiên và không giảm nó.
Chúa ơi.

Không có a sudo, đây là lệnh đúng - nice -n -20 matlabvà đây là đầu ra nice: cannot set niceness: Permission denied. Matlab khởi động và giá trị tốt đẹp là 0.
Lord Loh.

3
OP muốn không tăng mức độ ưu tiên (tiêu cực tốt đẹp), tức là. "đẹp --20 mathlab" (gấp đôi -) trong ký hiệu cũ, "đẹp -n -20 mathlab" trong mới. Chỉ root mới có thể sử dụng các giá trị tốt đẹp tiêu cực.
Baard Kopperud

1
CAP_SYS_NICE cũng sẽ cho phép OP thực hiện việc này mà không cần quyền root, nhưng liên quan đến việc đào sâu vào các khả năng của Linux (điều mà không nhiều người hiểu và có thể làm việc nhiều hơn giá trị của nó). Tôi chỉ đề cập đến nó cho sự hoàn chỉnh.
Bratchley


1

pam cho phép bạn đặt giới hạn cho mỗi tệp cấu hình của nó:

@grnice ưu tiên cứng -20

@grnice cứng đẹp -20

Và chắc chắn rằng nhóm quá trình chạy trong grnice.


1

Thêm người dùng vào sudoers (thực ra, một tệp mới trong /etc/sudoers.d, nhưng cùng một tiền đề):

niceuser ALL=NOPASSWD:/usr/bin/nice

Sau đó, với tư cách là "người dùng tốt đẹp":

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

và nó thực hiện những gì tôi cần (nghĩa là, người dùng của tôi giờ đây có thể tăng mức độ ưu tiên của {lệnh ...}). Nó hỗ trợ nhiều người dùng, v.v. - sử dụng man 5 sudoersđể biết chi tiết.


4
Điều đó vẫn chạy lệnh như root, đó là những gì người đăng đang cố gắng tránh.
Kyle Mông

1

Một tùy chọn có thể khác (đơn giản, nhưng kém an toàn hơn) là cho phép quyền setuid / setgid để nicethực thi.

sudo chmod +s /usr/bin/nice

setuid chỉ định bất kỳ người dùng nào có thể thực thi tệp UID hiệu quả của chủ sở hữu tệp (trong trường hợp này root) khi thực thi tệp, do đó tương đương với việc chạy như người dùng đó. setguid làm tương tự cho GID hiệu quả.


Hoặc bạn có thể làm điều đó an toàn hơn:

# 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>

Coi chừng bạn cần đăng nhập lại tài khoản của mình để nhóm mới có hiệu lực.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.