権限のないユーザーが `sync`コマンドを実行できるのはなぜですか?


11

現在、Ubuntu Linuxですが、他のOSでもこれに気づきました。どうやらすべてのユーザーがsyncコマンドを実行できますが、これはなぜですか?私は不利な点しか見られません:不必要なディスク書き込みのためにシステムが遅くなります。

なぜすべてのユーザーが実行できるのsyncですか?


1
このトピックに関する私の質問は次のようになります:ユーザーがsync()を使用できないようにする方法さえありますか?
Bonsi Scott

@BonsiScott確かに、実行可能ファイルから許可ビットを削除できます。しかし、それを行うときに何かが壊れるかどうかはわかりません。
ジッピー

ユーザーは同期を実行できるだけでなく、アカウントも必要ありません。アカウント「同期」の実行/bin/syncのシェルとして、あなたはログインせずに同期できるようにします。
CAMH

それは何に役立ちますか?ところで、現在作業しているボックスの同期アカウントにはパスワードがないため、機能しません。
ジッピー

本番システムではsync-calls 間の待機時間を短くすることをお勧めします(HP-Unixなど)。その理由は、大量の未処理の書き込みが一度にディスクに書き込まれることによる不要な待機を回避するためです。
Nils

回答:


16

権限のないユーザーがシステムの速度を落とすには多くの方法があり、同期を実行することは効率的ではありません。一方、ファイルシステムのデータをディスクにコミットすることは非常に正当な要求であるため、ユーザー(およびそのプロセス)がそれを行うことを禁止することは過剰です。

いずれにせよ、私はあなたの「不必要なディスク書き込み」ステートメントについて同意しません。これらの書き込みは確かに必要であり、とにかくしばらくすると自動的に行われます。

同期呼び出しがその実装に応じて特定のことを行う保証はありません。syncの呼び出しは、POSIX標準で定義されているように、OSがファイルシステムキャッシュをフラッシュするための「提案」に過ぎず、必ずしもフラッシュがすぐに実行されるとは限りません。より正確には、呼び出しはOSにキャッシュフラッシュをスケジュールするように要求しますが、Linux実装はそれが発生するのを待ってから戻りますが、すでにスケジュールされた時間より前に発生する保証はありません。

さらに、syncを連続して複数回呼び出しても、システムがそれほど遅くなることはありません。キャッシュがフラッシュされると、プロセスがファイルにアクティブに書き込んでいない場合、キャッシュは空になるため、同期は無効になります。

ユーザーがシステム上で同期を実行するのを本当に避けたい場合は、次のコマンドを実行するだけです。

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

これはユーザーにはほとんど気付かれず、同期を実行してからアンマウントせずにストレージデバイス(例:usbサムドライブ)を削除するだけの場合を除いて、悪影響はありませんが、これらのユーザーはすでにとにかくばかげています。

以前の/ bin / syncリンクと/ bin / trueの組み合わせはお勧めしません。sync確かにいくつかのケースで役立ちます。たとえば、残酷なシャットダウン(電力不足、システムパニックなど)がすぐに発生するのではないかと心配する場合は、ファイルシステムの内容を保持するのに役立ちます。これは私が正当な要求と呼んでいるものです。


2
@jippieすべてのsyncバイナリを呼び出すされないsync()(Bonsiスコットが言ったように)カーネルは、特権を持たないユーザーが呼び出すことができますなぜあなたが本当に求めていることであるので、機能をsync()
マイケルMrozek

2
@jippieポイントを逃していると思います。これまでに行われたすべての同期は、とにかくコミットする必要があったディスクにコミット(即座に)することです。フラッシュドライブの取り外しに行くとき、書いたすべてのものが実際に書き込まれたことを確認したいと思います。そして、umountはこれを保証することになっていますが、私は保証されていませんので、私はそれをヤンクする前に(ユーザーとして)確認したいと思います。システムにバッファをディスクにフラッシュさせることは、何の害もありません。最悪の場合、システムがバッファをアクティブにフラッシュしている間、いくつかのことが少し遅れます。危険は、ユーザーにこの機能を拒否することです。
キラーミスト

2
@killermist:同期は強制ではなく、提案するだけです。同期は、ディスクに何もフラッシュせずに成功の終了ステータスで戻る可能性があります。ディスク自体は、内部で書き込みを遅らせる可能性があることは言うまでもありません。私はWindowsに必要な機能が欠けているという意見を一般的に共有していますが、syncコマンドは私の心配事のほとんどをしません。
jlliagre

3
@killermist @jippieは正しいです。umountOS syncに関係なく実行が保証されているのではなく、OSが何であれ常に(ディスクがなくなっていない限り)バッファーをフラッシュすることを信頼する必要があります。Linux syncはフラッシュが有効になるまで待機するため、信頼できることに注意してください。
jlliagre

1
linux.die.net/man/2/sync- >標準仕様(例:POSIX.1-2001)によれば、sync()は書き込みをスケジュールしますが、実際の書き込みが完了する前に戻る場合があります。ただし、バージョン1.3.20以降、Linuxは実際に待機します。(これでもデータの整合性は保証されません。最近のディスクには大きなキャッシュがあります。)
Bonsi Scott

5

syncシステムに害を及ぼすことはできません。速度が低下する可能性がありますが、ディスクにアクセスするプログラムを実行するよりは遅くありません。なぜ制限する必要があるのですか?

すべてのユーザーに実行を許可する正当な理由がありますsync。これは、システムがクラッシュしたり電源が失われたりした場合でも、いくつかの操作を順番に実行する必要がある場合に必要です。たとえば、メールを受信するメール転送エージェントについて考えてみます。電子メールを含むファイルをスプールに書き込んだら、を呼び出しsync、その後、電子メールが受信されたことを通知する送信側マシンに応答します。が呼び出されずsync、受信通知を送信した直後で、ファイルをディスクにコミットする前に受信マシンの電源が切れた場合、電子メールは失われます。

オペレーティングシステムは、効率のためにディスクの書き込みを遅らせます。アプリケーションが実際に書き込みを行う必要がある時期を知ることはできません。そのため、アプリケーションには、オペレーティングシステムに、sync(1)およびsync(2)とを使用して今すぐ書き込むよう指示する方法が与えられますfsync(2)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.