Bash에서 시간 시나리오를 사용하기 위한 단순 또는 단순 확인 시간은 무엇입니까?

Bash에서 시간 시나리오를 사용하기 위한 단순 또는 단순 확인 시간은 무엇입니까?

일반적으로 저는 JavaScript보다 Bash에서 소프트웨어 개발 개념을 더 잘 설명할 수 있습니다.

사용시간(TOCTOU) 확인에 관해서는Wikipedia의 현재 시작 단락:

소프트웨어 개발에서 사용 확인 시간(TOCTOU, TOCTTOU 또는 TOC/TOU)은 보안과 같은 시스템 일부의 상태 확인과 관련된 경쟁 조건으로 인해 발생하는 일종의 소프트웨어 오류입니다. 자격 증명) 및 해당 확인 결과의 사용.

Bash에서 시간 시나리오를 사용하기 위한 단순 또는 단순 확인 시간은 무엇입니까?

답변1

이 사이트에서 볼 수 있는 이러한 유형의 가장 일반적인 경쟁 조건은 프로세스 ID(PID) 처리 및 이를 기반으로 하는 신호 전송과 관련이 있습니다.

누군가 ps+를 사용하여 grep명명된 프로세스의 PID를 가져온 다음 kill해당 프로세스에 신호를 보낼 수 있습니다. PID를 받고 신호를 보내는 사이에 PID가 사라졌을 수 있습니다. pkill이 오류 발생을 최소화하는 창을 사용하십시오 .

다른 경우에는 PID를 유지하고 오랜 시간 동안 항상 동일한 프로세스(예: "PID 파일")를 참조할 것으로 예상하면 신호가 잘못된 프로세스로 전송될 수 있습니다. 이는 모든 Unix 시스템이 PID를 재사용하기 때문입니다.

또 다른 일반적인 문제는 파일 시스템을 사용하여 다중 프로세스 동기화 및 중요 섹션에 대한 잠금 메커니즘을 제공하는 파일 잠금입니다. 예를 들어, 특정 "잠금 파일"이 존재하는지 테스트하고, 존재하지 않으면 이를 생성하여 "잠금을 획득"할 수 있습니다. 파일이 존재하는지 확인하고 잠금 파일을 생성하는 사이에 다른 프로세스가 잠금 파일이 존재하지 않는다는 것을 깨닫게 될 가능성이 있습니다.

while [ -e "$lockfile" ]; do
    sleep 10
done
touch "$lockfile"
echo 'got lock'  # or did I?

# do work

rm -f "$lockfile"

해결책은 다음과 같습니다.이것예를 들어 전용 파일 잠금 도구를 사용 flock하거나 잠금을 사용하는 경우입니다.목차, mkdir원자적이기 때문에:

while ! mkdir "$lockdir" 2>/dev/null; do
    sleep 10
done
echo 'got lock'

# do work

rmdir "$lockdir"

NFS와 같은 네트워크 파일 시스템에서는 디렉토리 생성을 위한 원자적 작업을 제공하지 않기 때문에 이는 여전히 안정적으로 작동하지 않습니다.

의심할 여지없이 다른 많은 예가 있습니다.

관련 정보