Yanıtlar:
Eğer süreç olduğu kök ayrıcalıklarla çalışan , o süreçte içinden süreci ve çağrı seteuid için gdb ekleme olabilir.
Misal:
[root@user-desktop ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=user_u:system_r:unconfined_t
[root@user-desktop ~]# gdb /bin/bash $$
GNU gdb Fedora (6.8-27.el5)
# cut copyright & license statements
This GDB was configured as "x86_64-redhat-linux-gnu"...
# cut some initialization output
0x00000036b0a99335 in waitpid () from /lib64/libc.so.6
(gdb) call seteuid(500)
$1 = 0
(gdb) quit
The program is running. Quit anyway (and detach it)? (y or n) y
Detaching from program: /bin/bash, process 29017
[root@user-desktop ~]# id
uid=0(root) gid=0(root) euid=500(user) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=user_u:system_r:unconfined_t
Kendi EUID'sini değiştiren bir süreçten bahsediyorsanız, bunu yapmanın bir çok yolu vardır.
Programın etkin UID'sine ve kaydedilmiş bir UID olup olmadığına bağlı olarak, kök olmayan bir programda iki EUID değeri arasında geçiş yapabilirsiniz. Kök ayrıcalıklı bir programda, dikkatli olmalısınız - değişikliğin geri döndürülemez olup olmadığına karar vermeli ve iş için doğru işlevi kullanmalısınız. (Setuid () yöntemini root olarak kullanmak geri döndürülemez.)
Zaten ayrı bir işlemden çalıştırılan bir işlemi değiştirmeye çalışıyorsanız, bunu yapmanın standart bir yolu yoktur - ve standart olmayan birçok yolun da olduğundan emin değilim. / Dev / kmem içindeki bazı bilgileri aktarabilirsiniz, ancak 'ince buz' ifadesi akla gelir.
Bunu "komut satırından" herhangi bir çalışan işleme kadar yapmanın bir yolu yoktur.
Bunu biraz şüphe ile söyleyebilirim; sadece "belki" / proc ve orada (tam anlamıyla ve google üzerinden) dürttü ve / proc içinde EUID değiştirmek için izin bir şeyle ilgili çıkmaz içine koştu. / Proc / {pid} / status içindeki UID ve GID ayarlarının ne olduğunu öğrenebilirsiniz - ancak en azından anlatabildiğim kadarıyla / proc içindeki herhangi bir şeyi kullanarak bunları değiştiremezsiniz.
Ancak, değiştirmek istediğiniz sürecin kaynak kodunu kontrol ederseniz, böyle bir şeyi - bir sürecin EUID'sini, komut satırından değiştirmenin bir yolu - yapmak yeterince kolaydır. SIGUSR1 için bir sinyal işleyici uygulayabilir ve sürecin kendi EUID'sini değiştirmesini sağlayabilirsiniz, ancak bu sinyali aldığında ihtiyacınız olur. O zaman SIGUSR1'in sinyalini "kill" yoluyla ... komut satırından, istediğin gibi göndereceksin ... ve bu senin için EUID'sini değiştirecekti.
Düşündüğünüz şey bu olmayabilir, ama ... bu nasıl yapılacağına dair sorunuzun cevabı ... ve aklıma gelen tek cevap bu.