Başladıktan sonra Linux programımın root ayrıcalıklarını düşürmesini ve ayrıcalıklı olmayan bir hesaba geçmesini istiyorum. Özellikle, benim gereksinimleri için kanonik çeşitli örnekler çevrimiçi ama hiçbir şey bulduk:, modern Linux'ta kök ayrıcalıklarını kalıcı olarak bırakır
- bu kalıcı damla
- olmayan kökü
- sadece içmeliyiz hem (e) uid ve (e) gid olduğu Linux desteği (kernel> 2.6.32) tamamlayıcı gruplar
buldum iyi yaklaşım için
uid_t new_uid = ...;
gid_t new_gid = ...;
gid_t rgid, egid, sgid;
if (setresgid(new_gid, new_gid, new_gid) < 0)
{
perror("setresgid");
exit(EXIT_FAILURE);
}
if (getresgid(&rgid, &egid, &sgid) < 0)
{
perror("getresgid");
exit(EXIT_FAILURE);
}
if (rgid != new_gid || egid != new_gid || sgid != new_gid)
{
printf("unexpected gid");
exit(EXIT_FAILURE);
}
if (setgroups(0, 0) != 0)
{
perror("setgroups");
exit(EXIT_FAILURE);
}
uid_t ruid, euid, suid;
if (setresuid(new_uid, new_uid, new_uid) < 0)
{
perror("setresuid");
exit(EXIT_FAILURE);
}
if (getresuid(&ruid, &euid, &suid) < 0)
{
perror("getresuid");
exit(EXIT_FAILURE);
}
if (ruid != new_uid || euid != new_uid || suid != new_uid)
{
printf("unexpected uid");
exit(EXIT_FAILURE);
}
bir exe bu sarın ve uid en ve gid en doğru kullanarak görünmesini gösterebilir: hepsi bu yüzden,
ps -eO user,uid,ruid,suid,group,gid,rgid,sgid
programı ayrıcalıklı bağlantı noktasına bağlamak veya çoğu kök sahip olduğu dosyaları işlemek olamaz iyi.
Ben de süreç herhangi bir beklenmedik capabilities(7) olmadığını doğrular (libcap-ng-utils dahil) captest program buldum.Ancak, güvenlik bir endişe olduğundan, tüm gerekli olmayan ayrıcalıkları doğru bir şekilde düşürdüğümden daha emin olmak isterim. Nasıl emin olabilirim?
Teşekkürler.
https://github.com/wertarbyte/coreutils/blob/master/src/setuidgid.c (dışarı [setuidgid] kontrol ettiniz burada görülebilir http://cr.yp.to/daemontools/setuidgid .html)? Bu bir parçası. Bernstein's] (http://cr.yp.to/djb.html) [Daemon Tools paketi] (http://cr.yp.to/daemontools.html). Bu program için kaynağın gözden geçirilmesi yardımcı olabilir. –
Bunun nasıl gerçekleştirilebileceğini görmek için sudo 'ya da' su 'kaynağına bir göz atabilirsiniz. – Kevin