为什么需要超级用户权限来读取Linux上的实时时钟?

Bru*_*ams 6 linux clock real-time-clock

实时时钟/ dev/rtc可以使用hwclock -r 读取,但只能以root身份读取.

>hwclock -r --debug
hwclock from util-linux 2.23.2
hwclock: cannot open /dev/rtc: Permission denied
No usable clock interface found.
hwclock: Cannot access the Hardware Clock via any known method.
>sudo hwclock -r
[sudo] password for xxx: 
Wed 26 Apr 2017 12:44:01 BST  -0.281946 seconds

我想不出有任何理由阻止任何用户阅读时钟.那么,为什么这里需要根接取?

我唯一的想法是它必须与低级查询有关,可以某种方式与系统接口.也许如果你不断阅读/ dev/rtc,你可以阻止它足够长时间来扰乱内核?

上下文:我现在负责从/ dev/rtc读取的应用程序.因此,它必须以root身份运行,但没有真正的理由它不能成为用户空间应用程序.我怀疑它需要使用实时时钟,但我的问题仍然存在.

Mic*_*kis 5

这是在Linux中实现RTC访问的方式的工件:/dev/rtc* 设备只能打开一次(直到它们关闭)并且它们是只读的.然后通过调用来读取和设置RTC ioctl.

此外,有意义的是只有超级用户才能设置 RTC,这可能会对系统产生破坏性影响.因此,只有超级用户才能open使用RTC设备.

实际上,这导致rtc*属于root用户和组的设备,即使可以想到其他方式来实现这种限制.例如,人们可以允许每个用户访问open设备,并检查ioctl呼叫的适当权限.甚至可以基于每个用户,通过uaccess等对设备进行读访问.


根据RTC 内核文档,RTC 还有两个接口:

  • /proc/driver/rtc是一个伪文件,提供一些状态信息.在我的系统上,它提供对所有人的读取权限,但我找不到任何规范.

  • 这些/sys/class/rtc/rtc*条目支持相应的/dev/rtc*设备(如果你可以找到它们cat /sys/class/rtc/rtcN/dev),并且还提供(通过"属性"文件)对所有日期,时间,自Epoch等以来的读取访问权限.触发事件,修改最大中断率,请求唤醒事件的时间仅提供给root(MODE 0644).