为什么非特权用户可以执行“sync”命令?

为什么非特权用户可以执行“sync”命令?

目前在 Ubuntu Linux 上,但我在其他操作系统上也注意到了这一点。显然任何用户都可以执行该sync命令 - 但这是为什么呢?我只能看到缺点:由于不必要的磁盘写入,系统速度变慢。

为什么每个用户都可以执行sync

答案1

非特权用户有很多方法可以减慢系统速度,而运行同步远非更有效的方法。另一方面,将文件系统数据提交到磁盘是一个相当合法的请求,因此禁止用户(及其进程)这样做就太过分了。

无论如何,我不同意你的“不必要的磁盘写入”声明。这些写入当然是必要的,并且无论如何都会在一小段时间后自动发生。

甚至无法保证同步调用会根据其实现执行任何特定操作。调用sync,是,正如 POSIX 标准定义的,只是操作系统刷新其文件系统缓存的“建议”,它不一定强制刷新立即发生。更准确地说,这些调用要求操作系统安排缓存刷新,但不能保证它会在已安排的时间之前发生,尽管 Linux 实现在返回之前会等待它发生。

此外,连续多次调用sync不会使系统速度减慢太多,因为一旦缓存被刷新,如果没有进程主动写入文件,则缓存为空,因此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)

相关内容