Jawaban:
Jika proses berjalan dengan hak akses root , Anda bisa melampirkan gdb ke proses dan memanggil seteuid dari dalam proses itu.
Contoh:
[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
Jika Anda berbicara tentang proses mengubah EUID-nya sendiri, ada banyak cara untuk melakukan itu.
Bergantung pada UID efektif program, dan apakah ada UID yang disimpan, Anda mungkin dapat beralih di antara dua nilai EUID dalam program non-root. Dengan program istimewa root, Anda harus berhati-hati - Anda harus memutuskan apakah perubahan itu tidak dapat dibalikkan, dan menggunakan fungsi yang benar untuk pekerjaan itu. (Menggunakan setuid () sebagai root tidak dapat dikembalikan.)
Jika Anda mencoba mengubah proses yang sudah berjalan dari proses yang terpisah, maka tidak ada cara standar untuk melakukannya - dan saya tidak yakin ada banyak cara yang tidak standar. Anda mungkin dapat menghilangkan informasi di / dev / kmem, tetapi ungkapan 'es tipis' muncul di benak Anda.
Tidak ada cara untuk melakukan ini "dari commandline" ke sembarang proses yang berjalan.
Saya bisa mengatakan itu dengan sedikit yakin; satu-satunya "mungkin" adalah / proc dan saya menyodok di sana (secara harfiah dan melalui google) dan menemui jalan buntu mengenai apa pun di / proc yang memungkinkan untuk mengubah EUID. Anda dapat PELAJARI apa pengaturan UID dan GID berada di / proc / {pid} / status - tetapi Anda tidak dapat mengubahnya menggunakan apa pun di / proc, setidaknya sejauh yang saya tahu.
Tetapi cukup mudah untuk membuat sesuatu seperti itu berfungsi - cara untuk mengubah EUID suatu proses, dari baris perintah - jika Anda mengontrol kode sumber dari proses yang ingin Anda ubah. Anda dapat menerapkan penangan sinyal untuk mengatakan SIGUSR1 dan meminta prosesnya untuk mengubah EUIDnya sendiri namun Anda butuhkan saat menerima sinyal itu. Maka Anda cukup mengirimkan proses yang SIGUSR1 memberi sinyal, melalui "kill" ... dari commandline, seperti yang Anda minta ... dan itu akan mengubah EUID untuk Anda.
Ini mungkin bukan yang Anda pikirkan, tapi ... itu adalah jawaban untuk pertanyaan Anda tentang bagaimana melakukannya ... dan itu satu-satunya jawaban yang dapat saya pikirkan.