我必须将我的 RPI4 交付给客户进行试用,并且我想将代码的执行限制为 100 次,或者对其进行时间限制,使其在 30 天(特定日期)后不会启动。我在 RPI 中安装了 I2C-RTC DS3231。
我已经检查过crontab
,但我不确定它是否可以用来限制日期过后的执行。
一些笔记
- 用户将无法访问 Pi。 Pi 启动后,代码就会开始执行。
- 该应用程序不需要访问互联网,周围也没有可用的互联网。
有没有办法可以限制最终用户在特定日期后执行的次数和不执行的次数?
答案1
您所询问的问题不是特定于 UNIX/Linux 的,而是属于您的应用程序。该应用程序作为交钥匙系统的一部分提供,因此您拥有很大的灵活性。
不那么容易的是处理您没有提到的 Pi 特定问题的方法:如果 SD 卡可访问,那么某人就有可能对系统上的任何文件进行未经确认的更改。包括添加 root 等效帐户、启用网络访问,甚至绕过评估超时代码。
解决这个问题的任何解决方案要么要求 SD 卡不可拆卸(胶水!),要么通过默默无闻的方式实现安全性,要么向 Pi 中添加一个额外的包以提供某种加密/解密/标记化服务。
还要考虑如何远程延长许可证期限 - 特别是在设备没有网络访问权限的情况下。我在这里没有建议解决方案,但它可能是您的应用程序中的一个特殊菜单选项,允许上传新的许可证文件。
首先,让您的客户签署一份合同,限制他们只能使用 100 次或一个月。
然后看技术解决方案。例如,在您的应用程序中实现许可证文件。
为了帮助防止篡改,我会考虑将以下内容作为初始包的一部分包含在该许可证文件中:
- 文件中必须将终止日期设置为最大可能值(例如提前三个月)
- 文件中必须有运行计数器 := 0
- 这两个值的文件中必须有一个“秘密哈希”。这样的“秘密哈希”必须包含只有您的应用程序知道的秘密
当应用程序启动时,其规则可能是:
- 如果没有文件则不运行
- 如果文件包含无效数据(包括日期/计数器值和“秘密哈希”不匹配),则不要运行
- 如果文件包含有效数据但已超过终止日期或运行次数,则不要运行
- 如果运行计数器为零,则将终止日期设置为从今天算起的一个月
- 增加运行计数器
- 更新“秘密哈希”
答案2
对于这个特定问题有一些解决方案。解决这个问题的最优雅的方法是在应用程序中创建一个脚本。该脚本将启动您的实际程序/代码,无论如何。
您可以在 SQL 数据库或类似数据库中记录所有日期(当前日期和程序执行日期)。如果您有超过 100 个条目或者首次启动时间超过 30 天,您可以在此处创建检查。您可以创建一条错误消息,其中客户需要输入激活密钥或您创建的任何内容才能再次解锁。
这将是最具企业性的方式。并且可以重用此代码。
干杯