जवाबों:
यदि प्रक्रिया रूट-विशेषाधिकारों के साथ चल रही है , तो आप प्रक्रिया में gdb संलग्न कर सकते हैं और उस प्रक्रिया के भीतर से सेटआउट कह सकते हैं।
उदाहरण:
[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
यदि आप अपने स्वयं के EUID को बदलने वाली प्रक्रिया के बारे में बात कर रहे हैं, तो ऐसा करने का एक तरीका है।
कार्यक्रम के प्रभावी यूआईडी पर निर्भर करता है, और क्या कोई बचा हुआ यूआईडी है, आप गैर-रूट प्रोग्राम में दो ईयूआईडी मानों के बीच स्विच करने में सक्षम हो सकते हैं। रूट विशेषाधिकार प्राप्त कार्यक्रम के साथ, आपको सावधान रहना होगा - आपको यह तय करना होगा कि क्या परिवर्तन अपरिवर्तनीय होना चाहिए, और नौकरी के लिए सही फ़ंक्शन का उपयोग करना चाहिए। (सेतु के रूप में) (जड़ के रूप में अपरिवर्तनीय है।)
यदि आप एक ऐसी प्रक्रिया को बदलने की कोशिश कर रहे हैं जो पहले से ही एक अलग प्रक्रिया से चल रही है, तो इसे करने का कोई मानक तरीका नहीं है - और मुझे यकीन नहीं है कि कई गैर-मानक तरीके हैं, या तो। आप / देव / किमीम में कुछ जानकारी डुबोने में सक्षम हो सकते हैं, लेकिन अभिव्यक्ति 'पतली बर्फ' स्प्रिंग्स को ध्यान में रखती है।
ऐसा करने का कोई तरीका नहीं है "कमांडलाइन से" बस किसी भी चलने की प्रक्रिया के लिए।
मैं कह सकता हूं कि कुछ सुर के साथ; एकमात्र "हो सकता है" / proc था और मैंने वहां (शाब्दिक रूप से और Google के माध्यम से) चारों ओर पोक किया और ईयूआईडी को बदलने की अनुमति देने वाली किसी भी चीज़ के बारे में / खरीद में एक मृत-अंत में भाग गया। आप यह जान सकते हैं कि यूआईडी और जीआईडी सेटिंग्स / प्रोक / {पीआईडी} / स्टेटस में क्या हैं - लेकिन आप उन्हें इन / प्रू में कुछ भी उपयोग करके नहीं बदल सकते हैं, कम से कम जहां तक मैं बता सकता हूं।
लेकिन उस काम की तरह कुछ बनाना आसान है - एक प्रक्रिया का EUID बदलने का एक तरीका, कमांडलाइन से - यदि आप उस प्रक्रिया के स्रोत कोड को नियंत्रित करते हैं जिसे आप बदलना चाहते हैं। आप SIGUSR1 कहने के लिए एक सिग्नल हैंडलर लागू कर सकते हैं और उस सिग्नल को प्राप्त करते समय प्रक्रिया को अपना EUID बदलना होगा। फिर आप बस उस प्रक्रिया को भेजेंगे जो SIGUSR1 सिग्नल, "मार" के माध्यम से ... कमांडलाइन से, जैसा कि आपने पूछा है ... और यह आपके लिए अपना EUID बदल देगा।
यह वह नहीं हो सकता है जो आप सोच रहे थे, लेकिन ... यह आपके प्रश्न का उत्तर है कि यह कैसे करना है ... और यह एकमात्र ऐसा उत्तर है जिसके बारे में मैं सोच सकता हूं।