रूट सेटलिड बिट के साथ रूट स्वामित्व कार्यक्रम


13

पिंग उपयोगकर्ता आईडी बिट सेट के साथ रूट के स्वामित्व में एक कार्यक्रम है।

$ ls -l `which ping`
-rwsr-xr-x 1 root root 35752 Nov  4  2011 /bin/ping

जैसा कि मैं इसे समझता हूं, अगर कोई उपयोगकर्ता पिंग प्रक्रिया चलाता है, तो प्रभावी उपयोगकर्ता आईडी वास्तविक उपयोगकर्ता आईडी (यानी प्रक्रिया शुरू करने वाले व्यक्ति की उपयोगकर्ता आईडी) से उपयोगकर्ता आईडी रूट में बदल जाएगी। हालाँकि जब मैं यह कोशिश करता हूं और पीएस के आउटपुट को देखता हूं कि यह देखने के लिए कि क्या पिंग प्रक्रिया रूट उपयोगकर्ता के रूप में चल रही है, मुझे अभी भी वास्तविक उपयोगकर्ता आईडी दिख रही है।

ps -e -o user,ruser,euser,cmd,args | grep ping
sashan   sashan   sashan   ping -i 10 -c 1000 www.goog ping -i 10 -c 1000 www.google.com

एक संबंधित प्रश्न unix.stackexchange.com/questions/152595 है
JdeBP

जवाबों:


20

pingरूट की जरूरत है इसलिए यह कच्चे मोड में सॉकेट खोल सकता है। वस्तुतः यह पहली बात है जब यह शुरू होता है:

icmp_sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
socket_errno = errno;

केवल यही एक चीज है जिसके लिए इसे रूट की आवश्यकता है, इसलिए कई कार्यक्रमों की तरह, यह तुरंत अपने विशेषाधिकार स्तर को आपके सामान्य उपयोगकर्ता खाते में वापस छोड़ देता है:

uid = getuid();
if (setuid(uid)) {
    perror("ping: setuid");
    exit(-1);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.