ฉันรู้ว่าการเปิดใช้งาน 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 chown nobody ./setuid-test; sudo chmod +s ./setuid-test
$ ./setuid-test
1000
เมื่อทำงานls -la
นี่คือสิ่งที่ฉันได้รับ:
me@me:~$ ls -la setuid-test
-rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
me@me:~$ ls -la setuid-test
---- ส่งคืน -----rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
df .
mount | grep nameofmountpoint
มีnosuid
ธงที่ระบุไว้ที่นั่นหรือไม่?