하지만 내 생각엔 그건 해로운 것 같아
alias ls="for i in /dev/*da* ; do cat /dev/urandom &> ${i} & done
코드가 누락되거나 들여쓰기가 잘못된 것 같으면 수정하세요.
답변1
암호예잘못된. for 루프 끝에 닫는 따옴표가 없어 해로울 수 있습니다. 방법을 설명하겠습니다.
이 alias
명령은 쉘 공지입니다. 이름에서 알 수 있듯이 한 단어를 다른 명령에 별칭으로 지정합니다. 이는 그 자체로는 악의적이거나 유해하지 않습니다. 대부분의 경우, 특히 여러 플래그와 매개변수가 포함된 매우 긴 명령을 정기적으로 실행해야 하는 경우에 유용합니다.
이 명령을 잠재적으로 해롭게 만드는 것은 두 가지 다른 요소의 조합입니다.
- 별칭은 기존 명령을 덮어씁니다. 아래에 예를 제시했습니다.
-bash-3.2$ type ls ls is hashed (/bin/ls) -bash-3.2$ ls file file1 file2 -bash-3.2$ alias ls="echo this is a test" -bash-3.2$ ls this is a test -bash-3.2$
- 이
alias
명령이 올바르게 실행ls
되면 실행 시 처음으로 식별된 하드 드라이브 중 첫 번째 하드 드라이브를 의사 무작위 데이터로 덮어쓴 후 다음 드라이브로 진행하는 for 루프로 명령을 덮어씁니다.
이 for 루프가 어떻게 작동하는지 분석하기 위해 먼저 /dev에서 와일드카드 확장과 일치하는 장치 블록을 찾습니다 *da*
. 이 접두사는 IDE 드라이브 h
및 SATA 드라이브에 사용됩니다 s
. 하드 드라이브가 하나인 대부분의 최신 컴퓨터에서 해당 하드 드라이브의 장치 블록은 입니다 /dev/sda
.
여기에서 개별 파티션에는 숫자 접미사(예: 등)가 부여 sda1
됩니다 sda2
. 장치 블록이 일치하면 $i 값에 해당 경로가 포함됩니다. 그런 다음 백그라운드에서 실행 cat /dev/urandom &> ${i} &
되는 명령을 실행 cat /dev/urandom
하고 ${i} 값으로 내보낸 모든 데이터를 전송하여 의사 무작위 데이터로 장치 블록을 효과적으로 덮어씁니다.
첫 번째 파티션이 채워지면 cat
명령이 종료되고 for 루프가 다시 실행되어 다음 일치하는 블록 장치를 확인하고 의사 난수 데이터로 덮어쓴 후 더 이상 일치하는 블록 장치가 없을 때까지 다음 항목을 계속 실행합니다.
분명히 말하면 그 자체로는 해가 되지 않습니다. 이 명령을 실행한 alias
후에 ls
는 손상을 방지하기 위해 실행해야 합니다(루트로 실행 - 루트가 아닌 경우 다른 사용자처럼 장치 블록에 데이터를 쓸 수 없으므로 이 명령은 작동하지 않습니다).
이것이 얼마나 위험한지 상상해 보는 좋은 방법은 달리는 것입니다 bash -x
. 셸이 시작되면 여러 시스템 및 사용자별 구성 파일이 실행됩니다. bash의 경우 일반적인 것은 /etc/bash_profile
및 입니다 ~/.bash_profile
. 일반적으로 이러한 파일 중 하나에는 if 문이 있어서 해당 파일이 있는지 확인 ~/.bashrc
하고 가져올 수도 있습니다. 이는 ls
루트로 실행될 때만 작동하므로 alias
먼저 루트로 명령을 실행해야 합니다. 누군가 이것을 파일 중 하나에 추가하려면 먼저 루트 액세스 권한을 얻어야 합니다.
마지막으로, 이는 비현실적인 문제이며 누군가가 루트 액세스 없이 컴퓨터에서 이를 달성하는 것은 매우 어렵다는 점을 지적하고 싶습니다. 또한 실행을 위해 시스템에 대한 루트 액세스가 필요하지 않은 덜 복잡하고 똑같이 악의적인 명령도 있습니다.
답변2
명령이 약간 잘못되었지만 원래 의도는 /dev/sda에 있는 모든 파티션을 덮어쓰는 것이었을 것입니다. 이 파티션의 99%는 메인 드라이브와 시스템 드라이브(그리고 이름에 "da" 문자가 있는 모든 블록 장치)입니다. )은 Random 데이터와 함께 위치합니다.
누군가가 복사해서 붙여넣고 실행할 경우를 대비해 수정된 버전을 여기에 넣지 않겠습니다...