권한이없는 사용자가 왜`sync` 명령을 실행할 수 있습니까?


11

현재 Ubuntu Linux에서는 다른 OS 에서도이 사실을 알았습니다. 분명히 모든 사용자가 sync명령을 실행할 수 있습니다. 그러나 왜 그렇습니까? 불필요한 디스크 쓰기로 인해 시스템 속도가 느려집니다.

모든 사용자가 왜 실행할 수 sync있습니까?


1
이 주제에 대한 내 질문은 다음과 같습니다. 사용자가 sync ()를 사용하지 못하게하는 방법이 있습니까?
Bonsi Scott 2016

@BonsiScott 물론, 실행 파일에서 권한 비트를 제거 할 수 있습니다. 그러나 당신이 그렇게 할 때 무언가가 부서 질지 모르겠습니다.
jippie

모든 사용자가 동기화를 실행할 수있을뿐만 아니라 계정도 필요하지 않습니다. 계정 'sync'는 /bin/sync쉘로 실행 되므로 로그인하지 않고 동기화 할 수 있습니다.
camh

그게 뭐가 유용한가요? BTW 현재 작업중 인 상자에 동기화 계정에 비밀번호가 없으므로 작동하지 않습니다.
jippie

프로덕션 시스템의 경우 sync호출 간 대기 시간을 줄이는 것이 좋습니다 (예 : HP-Unix에서). 그 이유는 대량의 미해결 쓰기가 한 번에 디스크에 기록되기 때문에 불필요한 대기를 피하기 위해서입니다.
Nils

답변:


16

권한이없는 사용자가 시스템 속도를 늦출 수있는 방법에는 여러 가지가 있으며 동기화 실행이 더 효율적이지는 않습니다. 반면, 파일 시스템 데이터를 디스크에 커미트하는 것은 합법적 인 요청이므로 사용자 (및 프로세스)가이를 수행하는 것은 과도한 일입니다.

어쨌든 귀하의 "불필요한 디스크 쓰기"설명에 동의하지 않습니다. 이러한 쓰기는 반드시 필요하며 어쨌든 작은 시간이 지나면 자동으로 발생합니다.

동기화 호출이 구현에 따라 특정 작업을 수행한다는 보장조차 없습니다. POSIX 표준에서 정의한대로 동기화 호출 은 OS가 파일 시스템 캐시를 플러시하기위한 "제안"만으로 플러시를 즉시 강제로 수행하지는 않습니다. 더 정확하게 말하면 호출은 OS에 캐시 플러시를 예약하도록 요청하지만 Linux 구현이 반환하기 전에 대기하기는하지만 이미 예약 된 시간 전에 발생한다는 보장은 없습니다.

또한, 한 번에 여러 번 sync를 호출하면 캐시가 플러시되면 프로세스가 파일에 능동적으로 쓰는 프로세스가 없으면 캐시가 비어 있으므로 동기화가 작동하지 않습니다.

사용자가 시스템에서 동기화를 실행하지 못하게하려면 다음 명령을 실행하면됩니다.

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

그것은 사용자들에게 크게 눈에 띄지 않으며 동기화를 실행 한 다음 저장 장치를 마운트 해제하지 않고 제거하는 사람들을 제외하고 부정적인 영향을 미치지 않습니다.

이전의 / bin / sync 링크와 / bin / true를 사용하지 않는 것이 좋습니다. sync어떤 경우에는 확실히 유용합니다. 예를 들어, 잔인한 종료 (전원 부족, 시스템 패닉 등)가 곧 발생할 경우 파일 시스템 내용을 보존하는 데 도움이됩니다. 이것이 제가 합법적 인 요청이라고 부르는 것입니다.


2
@jippie 모든 sync바이너리가하는 통화입니다 sync()(Bonsi 스콧이 말한 것처럼) 커널은 권한이없는 사용자가 전화를 할 수 있습니다 왜 당신이 정말로 요구하고하는 것은 그래서, 기능sync()
마이클 Mrozek

2
@jippie 당신이 요점을 놓치고 있다고 생각합니다. 모든 동기화는 어쨌든 커밋해야 할 것들을 (즉시) 커밋하는 것입니다. 플래시 드라이브를 제거하려고 할 때, 내가 쓴 모든 것이 실제로 쓰여 졌는지 확인하고 싶습니다. 그리고 umount가 이것을 보장해야하지만 보증되지는 않으므로 사용자가 확인하기 전에 확인해야합니다. 시스템이 버퍼를 디스크로 플러시하도록 강제하는 데 해로운 것은 없습니다. 최악의 경우, 시스템이 버퍼를 활발히 플러시하는 동안 일부 항목이 1 초 동안 지연됩니다. 사용자에게이 기능을 거부 할 위험이 있습니다.
킬러 미스트

2
@killermist : 동기화는 강요하지 않고 제안합니다. 디스크 자체를 플러시하지 않고 동기화가 성공 종료 상태로 돌아올 수 있으며, 디스크 자체도 후드 아래에서 쓰기를 지연시킬 수 있습니다. 일반적으로 Windows에 필요한 기능이 누락되었다는 의견을 공유하지만 sync 명령은 가장 염려되지 않습니다.
jlliagre

3
@killermist @jippie가 정확합니다. umountOS에 관계없이 항상 버퍼를 플러시하는 (디스크가 사라지지 않는 한 ...) syncOS에 따라 보장 하지 않는 신뢰를 더 잘해야합니다 . Linux sync는 플러시가 유효 할 때까지 기다리므로 신뢰할 수 있습니다.
jlliagre

1
linux.die.net/man/2/sync- > 표준 사양 (예 : POSIX.1-2001)에 따라 sync ()는 쓰기를 예약하지만 실제 쓰기가 완료되기 전에 반환 될 수 있습니다. 그러나 버전 1.3.20부터 Linux는 실제로 기다립니다. (이 여전히 데이터 무결성을 보장하지 않습니다 : 현대 디스크 용량이 큰 캐시를 가지고있다.)
Bonsi 스콧에게

5

sync시스템에 해를 끼치 지 않습니다. 디스크에 액세스하는 프로그램을 실행하는 것보다 속도가 느려질 수 있습니다. 왜 제한해야합니까?

모든 사용자가 실행할 수있는 충분한 이유가 있습니다 sync. 시스템이 고장 나거나 전원이 꺼진 경우에도 일부 작업을 수행해야하는 경우에 필요합니다. 예를 들어, 이메일을받는 메일 전송 에이전트를 고려하십시오. 전자 메일이 포함 된 파일을 스풀에 sync기록한 후에는을 호출 한 다음 전자 메일이 수신되었음을 알리는 발신자에게 회신합니다. 호출하지 않고 sync수신 알림을 보낸 직후와 파일을 디스크에 커밋하기 전에 수신 기기의 전원이 꺼지면 전자 메일이 손실됩니다.

운영 체제는 효율성을 위해 디스크 쓰기를 지연시킵니다. 응용 프로그램에서 실제로 쓰기가 필요한 시점을 알 수 없습니다. 응용 프로그램을 현재 작성하는 운영 체제를 말할 수있는 방법 제공되도록 sync(1)하고 sync(2)fsync(2).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.