Ho notato qualche tempo fa che nomi utente e password dati curl
come argomenti della riga di comando non compaiono ps
nell'output (anche se ovviamente possono apparire nella tua cronologia di bash).
Allo stesso modo non compaiono /proc/PID/cmdline
.
(Tuttavia, la lunghezza dell'argomento combinato nome utente / password può essere derivata).
Dimostrazione di seguito:
[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 ~]#
Come si ottiene questo effetto? È da qualche parte nel codice sorgente di curl
? (Suppongo sia una curl
funzionalità, non una ps
funzionalità? O è una funzionalità del kernel di qualche tipo?)
Inoltre: questo può essere ottenuto dall'esterno del codice sorgente di un eseguibile binario? Ad esempio usando i comandi della shell, probabilmente combinati con i permessi di root?
In altre parole, potrei in qualche modo mascherare un argomento dall'apparire /proc
o ps
dall'output (stessa cosa, penso) che ho passato a qualche comando di shell arbitrario ? (Immagino che la risposta sia "no", ma sembra che valga la pena includere questa mezza domanda extra.)
environ
direttamente per accedere alle variabili d'ambiente? - la linea di fondo: l'elenco degli argomenti, come l'elenco delle variabili di ambiente, si trova nella memoria del processo utente di lettura / scrittura e può essere modificato dal processo utente.
grep
modello in una classe di caratteri. Ad esempiops -ef | grep '[c]url'
curl
corrisponde curl
ma [c]url
non corrisponde [c]url
. Se hai bisogno di maggiori dettagli, fai una nuova domanda e sarei felice di risponderti.