Süreçler de yumuşat yoluyla ayrıcalıkları setuid()
ve setgid()
uid / gid onlar set grup üyeliklerini devralmak için görünmüyor.
Ayrıcalıklı bir bağlantı noktasını açmak için kök olarak yürütülmesi gereken bir sunucu işlemim var; bundan sonra özel bir ayrıcalıksız uid / gid, 1 - örneğin kullanıcınınki foo
(UID 73) 'e yükselir . Kullanıcı foo
grubun bir üyesidir bar
:
> cat /etc/group | grep bar
bar:x:54:foo
Bu nedenle foo
, olarak giriş yaparsam, /test.txt
bu özelliklere sahip bir dosyayı okuyabilirim :
> ls -l /test.txt
-rw-r----- 1 root bar 10 Mar 8 16:22 /test.txt
Ancak, aşağıdaki C programı (derleme std=gnu99
), root çalıştırıldığında:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main (void) {
setgid(73);
setuid(73);
int fd = open("/test.txt", O_RDONLY);
fprintf(stderr,"%d\n", fd);
return 0;
}
Daima izin verilmediğini bildirir . Bunun, giriş yapmayan bir süreç olmasıyla ilgili olduğunu düşünüyorum, ancak izinlerin çalışması gerektiği şekilde bir tür hamstrings.
1. Bu genellikle sunucular için SOP, ve apache ile yapan birinin raporunu bulduğumdan bunun etrafında bir yol olması gerektiğini düşünüyorum - apache ses grubuna eklendi ve daha sonra ses sistemini kullanabilir. Tabii ki, bu muhtemelen orijinal süreçte değil, bir çatalda gerçekleşir, ancak aslında durum benim bağlamımda aynıdır (setuid çağrısının ardından çatallanmış bir alt süreç).
setgid(54)
yerine kullanırsanız , çalışır mı? setgid(73)
/etc/groups
bar
setuid()
hmmm ... Ben sizinle can düşünüyorum, bunu sonra tekrar ... ama seteuid()
...
setuid()
/setgid()
Aramalar arasında geçiş yapın .