คำถามติดแท็ก setuid

8
อนุญาตให้ setuid บนเชลล์สคริปต์
setuidบิตได้รับอนุญาตบอกลินุกซ์ที่จะเรียกใช้โปรแกรมที่มีรหัสผู้ใช้ที่มีประสิทธิภาพของการใช้แทนการปฏิบัติการที่: > cat setuid-test.c #include <stdio.h> #include <unistd.h> int main(int argc, char** argv) { printf("%d", geteuid()); return 0; } > gcc -o setuid-test setuid-test.c > ./setuid-test 1000 > sudo chown nobody ./setuid-test; sudo chmod +s ./setuid-test > ./setuid-test 65534 อย่างไรก็ตามสิ่งนี้ใช้กับไฟล์ที่เรียกทำงานได้เท่านั้น เชลล์สคริปต์ละเว้นบิต setuid: > cat setuid-test2 #!/bin/bash id -u > ./setuid-test2 …

2
การใช้ setuid bit อย่างถูกต้อง
ฉันมีกระบวนการที่ต้องการสิทธิ์รูทเมื่อรันโดยผู้ใช้ปกติ เห็นได้ชัดว่าฉันสามารถใช้ "setuid bit" เพื่อทำสิ่งนี้ให้สำเร็จ วิธีที่เหมาะสมในการทำเช่นนี้ในระบบ POSIX คืออะไร? นอกจากนี้ฉันจะทำสิ่งนี้กับสคริปต์ที่ใช้ล่าม (bash, perl, python, php, ฯลฯ ) ได้อย่างไร
45 scripting  setuid 

6
วิธีที่ปลอดภัยที่สุดสำหรับการเขียนทางโปรแกรมไปยังไฟล์ที่มีสิทธิ์รูทคืออะไร
แอปพลิเคชันขนาดใหญ่ต้องการในเวลาหนึ่งเพื่อทำการเขียนจำนวนเล็กน้อยไปยังไฟล์ที่ต้องการการอนุญาตรูต มันไม่ได้เป็นไฟล์จริงๆ แต่เป็นส่วนต่อประสานฮาร์ดแวร์ที่สัมผัสกับลีนุกซ์เป็นไฟล์ เพื่อหลีกเลี่ยงการให้สิทธิ์รูทแก่แอปพลิเคชันทั้งหมดฉันเขียนสคริปต์ทุบตีซึ่งทำหน้าที่สำคัญ ตัวอย่างเช่นสคริปต์ต่อไปนี้จะเปิดใช้งานพอร์ต 17 ของอินเตอร์เฟสฮาร์ดแวร์เป็นเอาต์พุต: echo "17" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio17/direction อย่างไรก็ตามตามที่suidถูกปิดการใช้งานสำหรับสคริปต์ทุบตีในระบบของฉันฉันสงสัยว่าอะไรคือวิธีที่ดีที่สุดในการบรรลุเป้าหมาย ใช้วิธีแก้ปัญหาที่แสดงไว้ที่นี่ เรียกใช้สคริปต์ด้วยsudoจากแอปพลิเคชันหลักและแก้ไขรายการ sudoers ตามเพื่อหลีกเลี่ยงการต้องใช้รหัสผ่านเมื่อเรียกใช้สคริปต์ ฉันเล็กน้อยอึดอัดที่จะให้สิทธิ์ sudo echoไป เพียงแค่เขียนโปรแกรม C ด้วยfprintfและตั้งเป็น suid root ฮาร์ดโค้ดสตริงและชื่อไฟล์และตรวจสอบให้แน่ใจว่าเฉพาะ root เท่านั้นที่สามารถแก้ไขได้ หรืออ่านสตริงจากไฟล์ข้อความเช่นเดียวกันตรวจสอบให้แน่ใจว่าไม่มีใครสามารถแก้ไขไฟล์ได้ วิธีแก้ปัญหาอื่นที่ไม่ได้เกิดขึ้นกับฉันและปลอดภัยกว่าหรือง่ายกว่านั้นคือวิธีที่นำเสนอข้างต้น

1
อะไรจะเป็นวิธีที่ดีที่สุดในการแก้ไขปัญหา glibc นี้
ฉันจัดการกล่อง Gentoo Hardened ที่ใช้ความสามารถของไฟล์เพื่อกำจัดความต้องการไบนารีส่วนใหญ่ของ setuid (เช่น/bin/pingมี CAP_NET_RAW และอื่น ๆ ) Infact ไบนารีเดียวที่ฉันเหลืออยู่คืออันนี้: abraxas ~ # find / -xdev -type f -perm -u=s /usr/lib64/misc/glibc/pt_chown abraxas ~ # ถ้าฉันลบบิต setuid หรือติดตั้งระบบไฟล์รูทของฉันnosuidใหม่ sshd และ GNU Screen หยุดทำงานเพราะพวกเขาเรียกgrantpt(3)pesudoterminals หลักและ glibc เรียกใช้โปรแกรมนี้เพื่อ chown และ chmod ทาส pseudoterminal ใต้/dev/pts/และหน้าจอ GNU ใส่ใจเมื่อฟังก์ชั่นนี้ ล้มเหลว ปัญหาคือ manpage สำหรับการgrantpt(3)ระบุอย่างชัดเจนว่าภายใต้ Linux …

1
ความแตกต่างระหว่างเจ้าของ / รูทกับ RUID / EUID
ฉันค่อนข้างใหม่กับแนวคิดที่กล่าวถึงในคำถามและการอ่านเกี่ยวกับพวกเขาจากแหล่งต่าง ๆ เท่านั้นทำให้พวกเขาสับสนมากขึ้น ดังนั้นนี่คือสิ่งที่ฉันเข้าใจจนถึง: เมื่อเราได้รับอนุญาตสำหรับไฟล์มันจะมีลักษณะดังนี้: -rwsr-xr-- 1 user1 users 190 Oct 12 14:23 file.bin เราคิดว่าผู้ใช้user2ที่อยู่ในกลุ่มที่พยายามที่จะดำเนินการusers file.binถ้าบิต setuid ไม่ได้ตั้งค่านี้จะหมายถึงว่าทั้ง RUID และ EUID ของfile.binเท่ากับ UID user2ของ แต่เนื่องจากบิต setuid มีการตั้งค่าที่นี้หมายถึงว่า RUID อยู่ในขณะนี้เท่ากับ UID ของuser2ขณะ EUID user1เป็นโพสต์ของเจ้าของไฟล์ที่ คำถามของฉันคือ: อะไรคือความแตกต่างระหว่างเจ้าของไฟล์และroot? ไม่rootมีสิทธิ์เดียวกันเป็นเจ้าของ? หรือเราจะต้องมีรายการแยกต่างหากในรายการสิทธิ์สำหรับroot? ความแตกต่างระหว่าง RUID และ EUID หรือไม่ ตามที่ฉันเข้าใจแล้ว RUID และ EUID จะใช้กับกระบวนการเท่านั้น หากเป็นเช่นนั้นเหตุใดพวกเขาจึงมีค่ารหัสผู้ใช้ หาก RUID …

2
gdb สามารถดีบัก suid root โปรแกรมได้หรือไม่?
ผมเขียนโปรแกรมที่โทรและsetuid(0)execve("/bin/bash",NULL,NULL) จากนั้นฉันก็ทำ chown root:root a.out && chmod +s a.out เมื่อฉันรัน./a.outฉันจะได้รูทเชลล์ อย่างไรก็ตามเมื่อฉันทำgdb a.outมันเริ่มกระบวนการตามผู้ใช้ปกติและเปิดตัวเปลือกผู้ใช้ ดังนั้น ... ฉันจะดีบักโปรแกรมรูทของ setuid ได้ไหม?
16 debugging  setuid  gdb 

2
Setuid bit ดูเหมือนว่าจะไม่มีผลกับการทุบตี
ฉันกำลังทดลองอยู่เล็กน้อยและสังเกตเห็นบางสิ่งที่แปลก: ตั้งค่าบิต setuid บนสำเนาทุบตีที่ตั้งอยู่ที่/usr/bin/bash-testดูเหมือนจะไม่มีผล เมื่อฉันใช้งานอินสแตนซ์ของbash-testไดเรกทอรีบ้านของฉันไม่ได้ถูกตั้งค่าเป็น/rootและเมื่อฉันรันwhoamiคำสั่งจากbash-testชื่อผู้ใช้ของฉันไม่ได้รายงานว่าเป็นการrootแนะนำว่าbash-testไม่ทำงานเป็นราก อย่างไรก็ตามหากฉันตั้งค่า setuid bit whoamiฉันจะรายงานว่าเป็นรูทในเชลล์ใด ๆ ตามที่คาดไว้ ฉันลองตั้งค่า setuid bit /usr/bin/bashเช่นกันและสังเกตพฤติกรรมเดียวกัน ทำไมทุบตีไม่ทำงานเหมือนรูทเมื่อฉันตั้งค่า setuid bit บนมัน? เซลิลักซ์มีส่วนเกี่ยวข้องกับเรื่องนี้หรือไม่?
14 linux  bash  setuid 

3
GID หมายถึงอะไร?
GID หมายถึงอะไรจริง ๆ ? ฉันได้ Googled มันและนี่คือสิ่งที่linux.about.comพูดว่า: หมายเลขประจำตัวกลุ่มสำหรับกระบวนการ หมายเลขกลุ่มที่ถูกต้องจะได้รับใน/etc/groupและในฟิลด์ GID ของ/etc/passwdไฟล์ เมื่อกระบวนการเริ่มต้น GID นั้นจะถูกตั้งค่าเป็น GID ของกระบวนการหลัก แต่นั่นหมายความว่าอย่างไร สิทธิ์ที่ฉันมีสำหรับโฟลเดอร์ของฉันอยู่ที่ 0755 ฉันเข้าใจว่าฉันตั้งค่า UID ให้กับเจ้าของหรือไม่ 4755 และถ้าฉันตั้ง GID ของกลุ่มมันจะเป็น 2755 ถ้าฉันตั้งค่า Sticky Bit สำหรับผู้อื่นมันจะเป็นเช่นนั้น 1755 การตั้งค่าการอนุญาตเหล่านั้นสำคัญหรือไม่

5
ฉันจะลบสิทธิพิเศษรูทในเชลล์สคริปต์ได้อย่างไร
ตัวเลือก "--up" ใน OpenVPN โดยปกติจะใช้สำหรับการเราต์เป็นต้นดังนั้นมันจะถูกประมวลผลก่อนที่ OpenVPN จะลดระดับสิทธิ์การใช้งานของรูทเพื่อไม่ให้มีใครทำงาน อย่างไรก็ตามฉันกำลังเรียกใช้เชลล์สคริปต์ที่จำเป็นต้องเรียกใช้ในฐานะผู้ใช้ที่ไม่มีสิทธิพิเศษ ฉันจะทำอย่างไร ฉันได้ศึกษาสิทธิ์ของ Drop Processโดยเฉพาะคำตอบของพหุนามและ tylerl แต่ฉันไม่เข้าใจวิธีการใช้ ฉันทำงานใน Centos 6.5 และ suid ถูกบล็อกทั้งสองเป็น "chmod u + s" และเป็น "setuid ()" มีปลั๊กอิน OpenVPN ("openvpn-down-root.so") ซึ่งเปิดใช้งานสคริปต์ที่เรียกใช้โดยตัวเลือก "--down" เพื่อเรียกใช้เป็นรูท อาจมีสิ่งที่เทียบเท่าเช่น "openvpn-up-user.so" แต่ฉันไม่พบมัน Edit0 คำตอบต่อ Nikola Kotur ผมได้ติดตั้งเอียนเมเยอร์ runit แม้ว่าคำสั่ง chpst จะทำงานในเทอร์มินัล แต่ในสคริปต์ up มันล้มเหลวด้วย "ไม่พบคำสั่ง" สิ่งที่ใช้ได้คือ …

1
โปรแกรมที่เป็นเจ้าของรูทพร้อม setuid bit on
Ping เป็นโปรแกรมที่ root เป็นเจ้าของพร้อมชุด id ผู้ใช้ $ ls -l `which ping` -rwsr-xr-x 1 root root 35752 Nov 4 2011 /bin/ping ตามที่ฉันเข้าใจแล้วหากผู้ใช้รันกระบวนการ ping ดังนั้น id ผู้ใช้ที่มีประสิทธิภาพจะเปลี่ยนจาก id ผู้ใช้จริง (เช่น id ผู้ใช้ของบุคคลที่เปิดตัวกระบวนการ) เป็นรูท id ของผู้ใช้ อย่างไรก็ตามเมื่อฉันลองและดูผลลัพธ์ของ ps เพื่อดูว่ากระบวนการ ping ทำงานในฐานะผู้ใช้รูทฉันยังคงได้รับ ID ผู้ใช้จริงที่แสดง ps -e -o user,ruser,euser,cmd,args | grep ping sashan sashan sashan …

4
ID ผู้ใช้ที่แท้จริงและมีประสิทธิภาพทำงานอย่างไร
เมื่อผู้ใช้ปกติต้องการเปลี่ยนแปลงไฟล์ passwd ผู้ใช้จะได้รับ setuid โดยการเข้าถึงของผู้ใช้ที่มีประสิทธิภาพ ผู้ใช้กลายเป็นรูตชั่วคราวและสามารถแก้ไขรหัสผ่านได้ อย่างไรก็ตามคุณสามารถแก้ไขรหัสผ่านของคุณได้เท่านั้นไม่ใช่ทุกคนใช่ไหม อย่างไรก็ตามการเข้าถึงของผู้ใช้ที่มีประสิทธิภาพของคุณคือรูท ดังนั้นทำไมคุณไม่ได้รับอนุญาตให้เปลี่ยนรหัสผ่านอื่นที่อยู่ข้างคุณ เมื่อคุณรันโปรแกรมด้วย setuid หมายความว่าจริง ๆ แล้วเมื่อผู้ใช้ที่มีประสิทธิภาพคือรูท แต่ id ผู้ใช้จริงยังคงเป็นชื่อของคุณ
13 setuid 

3
กลไก set-user-ID ทำงานอย่างไรใน Unix
ใครช่วยอธิบายกลไก set-user-ID ใน Unix ได้ไหม? เหตุผลเบื้องหลังการตัดสินใจออกแบบนี้คืออะไร มันแตกต่างจากกลไก ID ผู้ใช้ที่มีประสิทธิภาพอย่างไร

2
การเป็นสมาชิกกลุ่มและกระบวนการ setuid / setgid
กระบวนการที่ยกเลิกการเลื่อนระดับสิทธิ์ผ่านsetuid()และsetgid()ดูเหมือนจะไม่ได้รับความเป็นสมาชิกกลุ่มของ uid / gid ที่พวกเขาตั้งค่า ฉันมีกระบวนการเซิร์ฟเวอร์ที่ต้องดำเนินการเป็นรูทเพื่อเปิดพอร์ตสิทธิพิเศษ หลังจากนั้นจะยกเลิกการเลื่อนระดับไปเป็น uid / gid ที่ไม่มีสิทธิพิเศษเฉพาะ1 - เช่นของผู้ใช้foo(UID 73) ผู้ใช้fooเป็นสมาชิกของกลุ่มbar: > cat /etc/group | grep bar bar:x:54:foo ดังนั้นถ้าฉันเข้าสู่ระบบในฐานะfooฉันสามารถอ่านไฟล์ที่/test.txtมีคุณสมบัติเหล่านี้: > ls -l /test.txt -rw-r----- 1 root bar 10 Mar 8 16:22 /test.txt อย่างไรก็ตามโปรแกรม C ต่อไปนี้ (คอมไพล์std=gnu99) เมื่อรันรูท: #include <stdio.h> #include <fcntl.h> #include <unistd.h> int main (void) …

4
รหัสผ่านของผู้ใช้คนใดที่ `sudo 'ถามหา
$ ls -l /usr/bin/sudo -rwsr-xr-x 1 root root 136808 Jul 4 2017 /usr/bin/sudo ดังนั้นsudoสามารถรันsudoได้โดยผู้ใช้ใด ๆ และผู้ใช้ที่รันใด ๆจะมีรูตเป็น ID ผู้ใช้ที่มีประสิทธิภาพของกระบวนการเนื่องจากเซ็ตบิตผู้ใช้/usr/bin/sudoตั้งค่าของ จากhttps://unix.stackexchange.com/a/11287/674 ความแตกต่างที่เห็นได้ชัดเจนที่สุดระหว่าง sudo และ su คือsudo ต้องการรหัสผ่านของผู้ใช้และ su ต้องใช้รหัสผ่านของ root รหัสผ่านของผู้ใช้ใดsudoถาม เป็นผู้ใช้ที่แสดงโดย ID ผู้ใช้จริงของกระบวนการหรือไม่ ถ้าใช่ผู้ใช้จะไม่ได้รับสิทธิ์ superuser โดยการเรียกใช้sudoแล้วระบุรหัสผ่านของตนเอง? Linux สามารถ จำกัด สิ่งนั้นกับผู้ใช้บางคนได้หรือไม่? มันถูกต้องที่sudoจะขอรหัสผ่านหลังจากที่ execve()เริ่มต้นในการดำเนินการmain()ของ/usr/bin/sudo? เนื่องจาก euid ของกระบวนการเปลี่ยนเป็นรูท (เนื่องจากบิต set-user-id ของ / usr …

2
ทำไม setuid ไม่สามารถใช้งานกับไฟล์ที่เรียกทำงานได้?
ฉันรู้ว่าการเปิดใช้งาน setuid กับสคริปต์มีปัญหาด้านความปลอดภัยและดังนั้นจึงไม่ได้ใช้งานเป็นค่าเริ่มต้น แต่คาดว่าจะใช้งานได้สำหรับไฟล์ปฏิบัติการ ฉันสร้างและปฏิบัติการซึ่งแสดง uid เป็นคำสั่งต่อไปนี้อธิบายไว้ในโพสต์นี้: อนุญาต setuid ในสคริปต์เชลล์ แต่มันกลับ uid เดียวกัน (1000) sudo chmod +s ./setuid-testทั้งก่อนและหลังการทำงาน ฉันคิดว่านี่หมายความว่า setuid ไม่มีผลกระทบใด ๆ ต่อการปฏิบัติการของฉันทำไมและวิธีการแก้ปัญหา? รหัสแหล่งที่มา: #include <stdio.h> #include <unistd.h> int main(int argc, char** argv) { printf("%d", geteuid()); return 0; } สร้างและเรียกใช้ด้วย $ gcc -o setuid-test setuid-test.c $ ./setuid-test 1000 $ sudo …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.