Saya perhatikan beberapa waktu lalu bahwa nama pengguna dan kata sandi yang diberikan curl
sebagai argumen baris perintah tidak muncul dalam ps
output (meskipun tentu saja mereka mungkin muncul dalam riwayat bash Anda).
Mereka juga tidak muncul di /proc/PID/cmdline
.
(Namun, panjang argumen gabungan nama pengguna / kata sandi dapat diturunkan.)
Demonstrasi di bawah ini:
[root@localhost ~]# nc -l 80 &
[1] 3342
[root@localhost ~]# curl -u iamsam:samiam localhost &
[2] 3343
[root@localhost ~]# GET / HTTP/1.1
Authorization: Basic aWFtc2FtOnNhbWlhbQ==
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Host: localhost
Accept: */*
[1]+ Stopped nc -l 80
[root@localhost ~]# jobs
[1]+ Stopped nc -l 80
[2]- Running curl -u iamsam:samiam localhost &
[root@localhost ~]# ps -ef | grep curl
root 3343 3258 0 22:37 pts/1 00:00:00 curl -u localhost
root 3347 3258 0 22:38 pts/1 00:00:00 grep curl
[root@localhost ~]# od -xa /proc/3343/cmdline
0000000 7563 6c72 2d00 0075 2020 2020 2020 2020
c u r l nul - u nul sp sp sp sp sp sp sp sp
0000020 2020 2020 0020 6f6c 6163 686c 736f 0074
sp sp sp sp sp nul l o c a l h o s t nul
0000040
[root@localhost ~]#
Bagaimana efek ini dicapai? Apakah ada di suatu tempat dalam kode sumber curl
? (Saya menganggap itu adalah curl
fitur, bukan ps
fitur? Atau apakah ini semacam fitur kernel?)
Juga: dapatkah ini dicapai dari luar kode sumber biner yang dapat dieksekusi? Misalnya dengan menggunakan perintah shell, mungkin dikombinasikan dengan izin root?
Dengan kata lain, bisakah saya menutupi argumen agar tidak muncul di /proc
atau di ps
output (hal yang sama, saya pikir) yang saya sampaikan ke beberapa perintah shell sewenang-wenang ? (Saya kira jawaban untuk ini adalah "tidak" tapi sepertinya layak untuk memasukkan setengah pertanyaan tambahan ini.)
environ
langsung untuk mengakses variabel lingkungan? - intinya: daftar argumen, seperti daftar variabel lingkungan, ada dalam memori proses baca / tulis pengguna, dan dapat dimodifikasi oleh proses pengguna.
grep
pola Anda menjadi kelas karakter. Misalnyaps -ef | grep '[c]url'
curl
cocok curl
tetapi [c]url
tidak cocok [c]url
. Jika Anda perlu lebih detail, ajukan pertanyaan baru dan saya akan dengan senang hati menjawab.