ps รู้ได้อย่างไรว่าซ่อนรหัสผ่าน?


22

พยาน:

$ ps f
  PID TTY      STAT   TIME COMMAND
31509 pts/3    Ss     0:01 -bash
27266 pts/3    S+     0:00  \_ mysql -uroot -p
25210 pts/10   Ss+    0:00 /bin/bash
24444 pts/4    Ss     0:00 -bash
29111 pts/4    S+     0:00  \_ tmux attach
 4833 pts/5    Ss+    0:00 -bash
 9046 pts/6    Ss     0:00 -bash
17749 pts/6    R+     0:00  \_ ps f
 4748 pts/0    Ss     0:00 -bash
14635 pts/0    T      0:02  \_ mysql -uroot -px xxxxxxxxxxxxxxxx
16210 pts/0    S+     0:01  \_ mysql -uroot -px xxxxxxxxxxxxxxxx

ps รู้ได้อย่างไรว่าซ่อนmysqlรหัสผ่าน? ฉันสามารถรวมสิ่งนี้เข้ากับสคริปต์ของตัวเองเพื่อซ่อนแอตทริบิวต์ CLI บางอย่างได้หรือไม่


6
มันอาจเป็นวิธีอื่นและmysqlใช้เวทมนตร์ไม่ใช่ps:“ โดยทั่วไปแล้วไคลเอนต์ MySQL จะเขียนทับอาร์กิวเมนต์รหัสผ่านบรรทัดคำสั่งด้วยเลขศูนย์ในระหว่างลำดับการเริ่มต้น” - แนวทางสำหรับผู้ใช้ปลายทางสำหรับความปลอดภัยของรหัสผ่าน
จัดการ

ขอบคุณที่เป็นเอกสารข้อมูล ฉันจะดูว่าฉันจะเขียนทับข้อโต้แย้ง cli ในสคริปต์ของฉันได้อย่างไร
dotancohen

1
@ การทำงานฉันจะใส่คำตอบเพราะนั่นคือสิ่งที่เกิดขึ้น - และเป็นลิงค์ที่มีประโยชน์สำหรับปัญหาด้านความปลอดภัยเกี่ยวกับ mysql :)
Drav Sloan

ทราบว่าในขณะอาร์กิวเมนต์บรรทัดคำสั่งสามารถสอดแนม, ตัวแปรสภาพแวดล้อมที่มีความปลอดภัย
Gilles 'หยุดชั่วร้าย'

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้โปรดดูunix.stackexchange.com/q/385339/135943
Wildcard

คำตอบ:


23

psไม่ซ่อนรหัสผ่าน แอปพลิเคชันเช่น mysql เขียนทับรายการอาร์กิวเมนต์ที่พวกเขาได้รับ โปรดทราบว่ามีกรอบเวลาขนาดเล็ก (เป็นไปได้ที่ขยายได้โดยการโหลดระบบสูง) ซึ่งข้อโต้แย้งจะปรากฏให้เห็นในแอปพลิเคชันอื่น ๆ จนกว่าพวกเขาจะถูกเขียนทับ การซ่อนกระบวนการให้ผู้ใช้รายอื่นสามารถช่วยได้ โดยทั่วไปจะดีกว่ามากในการส่งรหัสผ่านผ่านไฟล์มากกว่าต่อบรรทัดคำสั่ง

ในบทความนี้มีการอธิบายสำหรับ C วิธีการทำเช่นนี้ ตัวอย่างต่อไปนี้ซ่อน / ลบอาร์กิวเมนต์บรรทัดคำสั่งทั้งหมด:

#include <string.h>

int main(int argc, char **argv)
{
    // process command line arguments....

    // hide command line arguments
    if (argc > 1) {
        char *arg_end;    
        arg_end = argv[argc-1] + strlen (argv[argc-1]);
        *arg_end = ' ';
    }

    // ...
}

ดูได้ที่/programming/724582/hide-arguments-from-psและ/programming/3830823/hiding-secret-from-command-line-parameter-on-unix .


ดีมากขอบคุณ ฉันไม่ได้ตระหนักว่าข้อโต้แย้งนั้นไม่แน่นอนเช่นนี้
dotancohen

โปรดทราบด้วยว่าบางโปรแกรมไม่สามารถทำได้ด้วยรหัสผ่าน
เถ้า

ลิงก์ไปยังบทความนี้ใช้งานไม่ได้ ทุกคนที่จะอธิบายรหัสสำหรับฉันหรือไม่ (ทำไมการทำงานของรหัสที่เพิ่งตั้ง\0ไปยังพื้นที่?) เชื่อมโยงไปยังใดsetproctitle()?
schemacs

หรือคำตอบอยู่ที่นี่ ?
schemacs

7

MySQLโปรแกรมแทนที่รหัสผ่านจากบรรทัดคำสั่งที่มีxอยู่ในบรรทัดของรหัสนี้ :

while (*argument) *argument++= 'x';     // Destroy argument

3
น่าเสียดายที่มันไม่ปลอดภัยเท่าที่ควร คุณสามารถบอกได้ว่ารหัสผ่านนานแค่ไหน มันจะดีกว่าที่จะแทนที่ด้วย\0เพื่อให้คุณต้องการข้อมูลเพิ่มเติมเพื่อค้นหาความยาวรหัสผ่าน (โดยไม่ต้อง UB / SEGFAULT)
wizzwizz4
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.