Saya tahu bahwa mengaktifkan setuid pada skrip memiliki masalah keamanan dan karenanya tidak aktif secara default, tetapi berharap itu berfungsi untuk executable. Saya membuat dan dapat dieksekusi yang menampilkan uid sebagai output mengikuti instruksi yang dijelaskan dalam posting ini: Izinkan setuid pada skrip shell
Tetapi mengembalikan uid yang sama (1000) baik sebelum dan sesudah berjalan sudo chmod +s ./setuid-test
. Saya pikir ini berarti setuid tidak memiliki efek pada executable saya, mengapa dan bagaimana menyelesaikannya?
Kode sumber:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv) {
printf("%d", geteuid());
return 0;
}
Dibangun dan dijalankan bersama
$ gcc -o setuid-test setuid-test.c
$ ./setuid-test
1000
$ sudo chown nobody ./setuid-test; sudo chmod +s ./setuid-test
$ ./setuid-test
1000
Saat berlari ls -la
, inilah yang saya dapatkan:
me@me:~$ ls -la setuid-test
-rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
permissions
executable
setuid
Pelajar PHP
sumber
sumber
me@me:~$ ls -la setuid-test
---- mengembalikan -----rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
df .
direktori untuk menemukan titik mount, lalumount | grep nameofmountpoint
. Apakah adanosuid
bendera yang terdaftar di sana?Jawaban:
Sebagian besar filesystem yang dirancang untuk Unix / Linux dapat dipasang dengan
nosuid
atribut, yang akan mencegah binari setuid atau setgid yang terletak di filesystem tersebut mengubah uid atau gid proses yang efektif. Ini sering digunakan saat memasang sistem file "tidak dipercaya", yang berada di bawah kendali non-administrator.Dalam kasus Anda, sistem file yang Anda gunakan adalah ketik ecryptfs, yang menurut askubuntu: Kesalahan saat menjalankan biner dengan setuid root di bawah direktori home terenkripsi menegakkan nosuid (dan nodev) secara otomatis, dimulai dengan versi dari beberapa tahun yang lalu.
Berikut ini penjelasan alasan perubahan, dari https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2012-3409 :
sumber
chown root
,chmod +s
3) mount 4) jalankan executableBit SetUID pada executable memungkinkan untuk menjalankan executable pada pemilik file (bukan superuser). Untuk dapat menjalankan executable sebagai root, jalankan:
sumber
setuid-test
harus menampilkannobody
UID.nobody
, bukanroot
nobody
, jadi saya harapkan65534
sebagai balasannya, tetapi saya melihat1000
siapa pun yang menjadi pemiliknya!nosuid
, maka program Anda tidak mungkin bekerja.mount | grep /home/me
kembali/home/me/.Private on /home/me type ecryptfs (ecryptfs_check_dev_ruid,ecryptfs_cipher=xxx,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs,ecryptfs_sig=0123456789abcdef,ecryptfs_fnek_sig=fedcba9876543210)