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身份运行,但没有真正的理由它不能成为用户空间应用程序.我怀疑它需要使用实时时钟,但我的问题仍然存在.
这是在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).