SORU
28 Temmuz 2010, ÇARŞAMBA


Bırakarak root

Kök (çok düşük noktalarına bağlayabilirsiniz) olarak başlatılır bir daemon var. Başlatma sonra çok güvenlik nedeniyle root damla almak istiyorum.

Bana bir işaret olabilirdoğru bilinenbunu yapacak olan C kod parçası mı?

Man sayfaları okudum, farklı uygulamalar çeşitli uygulamalar inceledim, hepsi birbirinden farklı, ve bazıları gerçekten çok karmaşıktır. Bu güvenlikle ilgili bir kod, ve ben de diğer insanlar yapıyoruz aynı hataları yeniden icat etmek istemiyorum. Aradığım şey olması gerektiği gibi olacak bir bilgi olarak kullanabileceğim, güzel, taşınabilir en iyi uygulama bilinen bir kütüphane işlevi. Böyle bir şey var mı?

Referans: ben başlangıç olarak kök; gerek değiştirmek için çalışma altında farklı bir uid ve gid; ihtiyacım var ek grupları kurmak doğru; gerek yok geri değiştirmek için root sonra.

CEVAP
28 Temmuz 2010, ÇARŞAMBA


Tüm ayrıcalıkları (kullanıcı ve grup) bırakmak için, Kullanıcı önce Grup damla. Verilen o userid groupid içerir Kimlikleri kullanıcı ve grup ister bırak, ve varsayarak bu etkili Kimlikleri de kök, bu başarılı çağırarak setuid() setgid():

if (getuid() == 0) {
    /* process is running as root, drop privileges */
    if (setgid(groupid) != 0)
        fatal("setgid: Unable to drop group privileges: %s", strerror(errno));
    if (setuid(userid) != 0)
        fatal("setuid: Unable to drop user privileges: %S", strerror(errno));
}

Eğer paranoyak iseniz, başarısız olan kök ayrıcalıklarını geri almak için deneyebilirsiniz. Eğer başarısız değil mi kurtarma:

 if (setuid(0) != -1)
     fatal("ERROR: Managed to regain root privileges?");

Ayrıca, eğer hala paranoyak isteyebilirsiniz seteuid() setegid() çok, ama olmamalı gerekli beri setuid ve setgid() önceden ayarlanmış tüm Kimlikleri ise işlemidir ait kök.

Ek grup listesi POSIX fonksiyonu ek grupları ayarlamak için hiçbir sorun olmasıdır (getgroups() ama setgroups yok()). Kullanabileceğiniz BSD ve Linux uzantısı setgroups() var, bu sizi ilgilendiriyor.

Bu işlem root ait bir dizin içinde kalır değil de başka bir dizine 14 ** ya da almanız gerekir.

Sorunuza genel olarak Unıx ilgili olduğundan, bu çok genel bir yaklaşımdır. Linux bu artık tercih edilen bir yaklaşım olduğunu unutmayın. Güncel Linux sürümlerinde çalıştırılabilir CAP_NET_BIND_SERVICE capability set ve normal bir kullanıcı olarak çalıştırmanız gerekir. Hayır kök erişimi gereklidir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Floortile83

    Floortile83

    16 Ocak 2010
  • Jonathan Flavell

    Jonathan Fla

    1 HAZİRAN 2006
  • Madeon

    Madeon

    31 Ocak 2010