防止修改文件和/或文件时间戳

防止修改文件和/或文件时间戳

作为操作系统课程的一部分,我让学生接触 Linux 和一些编码。学生在指定的目录中提交他们的程序,并在自己的帐户中使用名称(例如,~/Prog1/Prog1.java)。他们最多可以延迟两天提交计划。

我希望能够避免他们在“提交”后修改他们的程序。我的第一个想法是禁用或隐藏该touch命令,这样当我使用 进行检查时,他们就无法伪造文件的时间戳ls -l,但这就足够了吗?还有其他相对简单的方法可以让他们偷偷修改源代码而我却无法检测到吗?他们是 Linux 新手 - 所以知识不是很丰富。

或者有没有办法让我创建一个只写目录,以便他们可以将程序复制到其中,但不能修改时间戳?有没有我没有考虑的更简单的方法?

这是 Linux 的 RedHat 7.5 版本。

我考虑过发帖https://superuser.com/或者https://cseducators.stackexchange.com/如果更合适的话,我很乐意将我的问题移到那里,尽管它从根本上让我觉得这是一个 Linux 问题。


检查给我的更改/修改时间stat是否是一种万无一失的方法,可以确保文件在提交后没有被弄乱?

答案1

您可能正在寻找chattr可以使文件不可变的命令。从曼查特尔

具有“i”属性的文件无法修改:无法删除或重命名,无法创建到该文件的链接,也无法向该文件写入任何数据。只有超级用户或拥有 CAP_LINUX_IMMUTABLE 能力的进程才能设置或清除该属性。

  • 设置不可变属性:

    chattr +i ~/Prog1/Prog1.java
    
  • 删除不可变属性:

    chattr -i ~/Prog1/Prog1.java
    
  • 要查看当前属性,您可以使用lsattr(请注意,您的学生也可以使用此命令来查看不可变属性是否已设置):

    lsattr ~/Prog1/Prog1.java
    

您还需要添加一项cron作业,以在 2 天的提交时间间隔内监视提交文件夹中是否有新文件。

答案2

您可以轻松获得指定文件夹的所有权,同时允许他们检查那里的工作。

要获得该文件夹的所有权: chown teacher /path/to/file.java

并且,禁止非所有者帐户进行任何更改:chmod go-w /path/to/file.java

现在,要自动执行此操作,请使用命令at运行代码作业,例如:

at 10am Jul 31,然后您将看到一个新的命令行at>。从那里只需输入前面的chmod & chown命令,它们就会从那里运行。

请注意,at使用超级用户运行命令root

相关内容