2011-10-03 22 views
6

Programım, oluşturduğu iş parçacıklarının önceliklerini değiştirmek için Linux sistem çağrısı setpriority() kullanıyor. Olumsuz öncelikleri (-10) ayarlamalıdır, ancak dokümantasyonda belirtildiği gibi, normal bir kullanıcı olarak çalıştırıldığında bu başarısız olur.Linux kullanıcısına CAP_SYS_NICE özelliği nasıl ayarlanır?

Kullanıcı, öncelikleri istediği şekilde ayarlayabilmek için CAP_SYS_NICE yeteneğine gereksinim duyuyor, ancak kullanıcıya böyle bir yetenek vermeyi bilmiyorum.

Sorularım: Linux kullanıcısına CAP_SYS_NICE yeteneği nasıl ayarlanır?

+0

Nice -10 daha yüksek önceliğe sahiptir, ancak kesinlikle uzaktan gerçek zamanlı bir şey değildir. –

+0

Sadece bir işaretçi, bu yüzden bir yorum ekledim: Bu cevabı kontrol et: http://stackoverflow.com/a/17685265/6899 – tzot

cevap

2

Jan Hudec, bir sürecin kendisini sadece bir yetenek veremeyeceği bir haktır ve haklı bir yolun kabiliyetli bir yol olduğu açıktır. Ayrıca, root'u düşürdüğünüzde prctl(PR_SET_KEEPCAPS, ...)'a ihtiyacınız olduğunu unutmayın. (Ayrıntılar için prctl man sayfasına bakın.) Aksi takdirde, root olmayan gerçek kullanıcı kimliğinize geçtiğinizde yeteneği düşüreceksiniz. Eğer gerçekten sadece farklı izin güzel düzeyi ile kullanıcı oturumlarını başlatmak istiyorsanız pam_limits modülü sert güzel sınırını değiştirmek için izin verdiği

, sen pam_limits ve limits.conf adam sayfaları görebilir. Bu bir çizgi gibi olabilir:

yourspecialusername hard nice -10 
+2

Bu cevabın kirden daha eski olduğunu biliyorum ama pam_cap.so modülünde okunacak '/ etc/security/capability.conf' ve yeteneklerini buna göre ayarlama – Bratchley

0

AFAIK Yetenek almak mümkün değil. Kök süreçleri tüm yeteneklere sahiptir ve onları verebilir, ancak bir kez vazgeçtiğinde, yeniden kazanamazlar. Bu yüzden, diğer tüm yeteneklerden vazgeçecek ve işlemi yürütebilecek bir kök sarıcıya ihtiyacınız olacak.

4

güzel kullanışlı yarar vardır Bir ikili üzerinde yetenekleri ayarlamak için: setcap. Bunun, uygulamanızın kökü üzerinde root olarak çalıştırılması gerekir, ancak ayarlandıktan sonra, normal bir kullanıcı olarak çalıştırılabilir. Örnek:

$ sudo setcap 'cap_sys_nice=eip' <application> 

Sen getcap kullanarak bir uygulamaya ne yetenekleri onaylayabilirsiniz:

ben genellikle nasıl olsa kök olarak çalıştırılan yüklemek hattı içinde makefile içine yetenekleri entegre öneririm
$ getcap <application> 
<application> = cap_sys_nice+eip 

. Yeteneklerin bir TAR dosyasında veya herhangi bir türev paket formatında saklanamayacağını unutmayın. Uygulamanızı daha sonra paketlerseniz, dağıtımdaki yeteneği uygulamak için bir betik (Debian paketleri için postinst) gerekir.

+0

Komutunuz çalışıyor, ancak' capspys_nice = eip', özellikle '= eip' bölümünü bulduğunuz yeri sorabilir miyim? Ben onu "erkek yeteneklerinde" adam ayarında göremiyorum. – elmicha

+1

@elmicha Sistemimde en azından, adam setcap sayfası şu satırı içerir: _Bu özellikler, cap_from_text (3) _'de açıklanan biçimde belirtilmiştir. Cap_from_text manpage'in varsayılan olarak mevcut olmayabilir (setcap'ınız olsa bile).Örneğin CentOS'ta, libcap-devel paketinde bulunur. Ekstra harfleri 'operatör bayrakları' olarak tanımlar, burada e = etkili, i = devralınabilir ve p = izin verilir. –

İlgili konular