권한이 없는 사용자가 "동기화" 명령을 실행할 수 있는 이유는 무엇입니까?

권한이 없는 사용자가 "동기화" 명령을 실행할 수 있는 이유는 무엇입니까?

현재 Ubuntu Linux를 사용하고 있지만 다른 운영 체제에서도 이 현상이 발견되었습니다. 분명히 모든 사용자가 이 sync명령을 실행할 수 있습니다. 그런데 왜 그럴까요? 단점은 불필요한 디스크 쓰기로 인한 시스템 속도 저하입니다.

모든 사용자가 이를 실행할 수 있는 이유는 무엇입니까 sync?

답변1

권한이 없는 사용자가 시스템 속도를 늦추는 방법에는 여러 가지가 있으며, 동기화를 실행하는 것은 더 효율적인 방법과는 거리가 멀습니다. 반면에 파일 시스템 데이터를 디스크에 커밋하는 것은 상당히 합법적인 요청이므로 사용자(및 해당 프로세스)가 그렇게 하는 것을 금지하는 것은 지나친 것입니다.

어쨌든, 나는 "불필요한 디스크 쓰기" 진술에 동의하지 않습니다. 이러한 쓰기는 물론 필요하며 어쨌든 짧은 시간이 지나면 자동으로 발생합니다.

동기 호출이 구현에 따라 특정 작업을 수행한다는 보장도 없습니다. 통화 동기화, 예,POSIX 표준에 정의된 대로는 운영 체제가 파일 시스템 캐시를 플러시하도록 하는 "권장 사항"일 뿐이며 플러시가 즉시 발생하도록 강제할 필요는 없습니다. 보다 정확하게는 이러한 호출은 운영 체제에 캐시 플러시를 예약하도록 요청하지만 Linux 구현에서는 캐시 플러시가 반환될 때까지 기다리더라도 예약된 시간 이전에 캐시 플러시가 발생한다는 보장은 없습니다.

또한 sync를 연속해서 여러 번 호출해도 시스템 속도가 크게 느려지지 않습니다. 캐시가 플러시되고 파일에 적극적으로 쓰는 프로세스가 없으면 캐시가 비어 있으므로 동기화가 작동하지 않기 때문입니다.

사용자가 시스템에서 동기화를 실행하지 못하도록 하려면 다음 명령을 실행하세요.

mv /bin/sync /bin/.sync
ln /bin/true /bin/sync

이것은 사용자가 거의 눈치채지 못하고 동기화를 실행한 다음 저장 장치(예: USB 썸 드라이브)를 마운트 해제하지 않고 삭제하지 않는 한 부정적인 영향을 미치지 않습니다. 그러나 이러한 사용자는 어쨌든 매우 어리석은 행동을 했습니다.

이전 /bin/sync 대 /bin/true 링크는 권장하지 않습니다. sync어떤 상황에서는 작동합니다. 예를 들어, 이는 곧 다가올 심각한 종료(전원 부족, 시스템 패닉 등)가 걱정되는 경우 파일 시스템 내용을 보존하는 데 도움이 됩니다. 이것이 제가 정당한 요청이라고 부르는 것입니다.

답변2

sync시스템이 손상될 수 없습니다. 속도가 느려질 수 있지만 디스크에 액세스하는 프로그램을 실행하는 것 이상은 아닙니다. 왜 제한합니까?

모든 사용자가 sync. 이는 시스템이 충돌하거나 전원이 꺼지더라도 특정 작업을 순서대로 수행해야 하는 경우에 필요합니다. 예를 들어 이메일을 수신하는 메일 전송 에이전트를 생각해 보세요. 이메일이 포함된 파일을 스풀에 쓴 후, sync보내는 시스템에 응답하여 이메일을 수신했음을 알리기 전에 호출됩니다. 호출되지 않고 sync수신 알림을 보낸 후 파일을 디스크에 커밋하기 전에 수신 시스템의 전원이 꺼지면 이메일이 손실됩니다.

운영 체제는 효율성을 높이기 위해 디스크 쓰기를 지연합니다. 그들은 애플리케이션이 실제로 언제 작성해야 하는지 알 수 있는 방법이 없습니다. 따라서 애플리케이션에는 운영 체제에 지금 쓰라고 지시하는 방법이 있습니다.sync(1)그리고sync(2)그리고fsync(2).

관련 정보