在学校,我们有一台计算机,仅供学生登录并进行与计算机科学相关的活动,例如为课堂编写 C 和 C++ 程序。它运行的是某种不为人知的 Linux 版本,在我接手之前很多年就安装了。我最近在其上安装了 Ubuntu Server,以使其更易于维护和更安全。目前,我们根据需要设置用户帐户。学生通过 ssh 登录并完成课堂作业,每个用户将他们的工作和游戏存储在他们的主文件夹中。教师会让学生将他们的作业放在某个文件夹中以供提交或类似的东西。
我担心的是,用户过于探索,或者有人恶意破坏并破坏某些东西,从而导致其他人无法完成任何工作,并导致教职员工向我抱怨,让我看起来像一个糟糕的系统管理员,因为我没有阻止这种情况。(我还是个本科生,任由他们摆布)
学生目前在自己的组中,只能看到自己的主文件夹/无法浏览其他学生的文件夹。教师拥有更高级的帐户,但没有管理员帐户。我不愿意开始更改重要系统文件夹的权限,担心我可能会破坏某些东西(就像我以前做过的那样)。
我可以采取哪些安全措施来确保系统的功能,同时保证其安全,以便每个人都能享受和使用它?
答案1
我在大学期间运行过一个大致类似的项目(我们有多个服务器,除了计算机服务外,实际上不对任何人负责,但我们是学生用的 Linux 机器)。在安全方面,主要是要保持补丁绝对最新。必要时,如果存在本地根漏洞且尚未发布补丁,请关闭登录。您还需要设置 ulimits。这些限制的严重程度可能取决于您的机器有多强大,或者,我们最不强大的机器使用了这些限制:
-
t: cpu time (seconds) 18000
-f: file size (blocks) 307200
-d: data seg size (kbytes) 51200
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-m: resident set size (kbytes) 51200
-u: processes 75
-n: file descriptors 300
-l: locked-in-memory size (kb) 175000
-v: address space (kb) 400000
-x: file locks unlimited
-i: pending signals 61440
-q: bytes in POSIX msg queues 819200
-e: max nice 0
-r: max rt priority 0
除此之外,您还需要设置配额,可能针对教师和学生帐户。配额的大小取决于您的磁盘,但我们目前默认设置 1GB 配额。我相信,负责管理机器的继任者通常很乐意提高配额,但前提是这些人有正当理由。
除此之外,如果可能的话,我会乞求/借用/偷取第二台机器来备份您的配置/用户数据。理想情况下,您应该备份所有 /etc/、已安装软件包的列表以及所有用户数据(如果您有自己组装的任何软件包,则应该备份完整的 .debs)。如果您有空间,我也会备份 /var(/var/tmp 除外)。
/root 的权限默认为 755。你需要更改这些权限,因为你将要在某些时候意外地将敏感文件留在那里。此外,wall 和 su(至少)应该更改其权限,以便只有 root/root 组可以使用它们(可以随意将 root 组更改为只有您所在的其他组)。
最后,我会将所有内容系统记录到远程服务器,无需用户登录(即使这不是您控制的机器)。我会在您的机器上设置 snoopy,这样当有人闯入时,您就会有某种审计日志。
我们的大多数系统文档都是这里。如果您只运行一台机器,其中大部分可能不适用于您,但无论如何,它们可能值得您仔细研究一下。
答案2
基本上有两种方法可以解决这个问题:
- 你要确保他们无法破坏它。
- 你要确保你能比他们破坏它更快地修复它。
对于第一个,您可以考虑一个带有非常严格的 SELinux 规则的最新 Linux 发行版。考虑到这些学生必须学习的事实,我预计他们会遇到问题(例如:您不能监听网络端口),这些问题使他们无法完成作业或只是超出他们目前的技能水平。
第二种选择实际上更容易实现。
- 安装类似皮匠自动重新安装他们工作的系统。
- 教导学生定期将他们的代码提交到 subversion/git 存储库(有用的编程技能!!)。让老师访问学生存储库。学生可以简单地要求老师查看他们个人 subversion 中的特定标签。
- 将所有登录信息放入 LDAP 并配置服务器以在学生登录时自动创建学生的主目录。
- 每晚重新安装服务器。这很容易,因为你已经自动化了整个过程。
副作用:
- 没有任何恶意软件的存活时间超过 24 小时。
- 如果学生人数增加,您只需添加第二/第三个系统并以 100% 相同的方式安装即可。
- 任何配置问题都只需修复一次,并在重新安装后保持不变。
- 学生们偶尔会忘记提交并丢失作业。
答案3
首先,确保设置备份并了解如何恢复系统。
也就是说,只要您立即应用安全更新(您也可以查看无人值守升级),就应该没问题。(但是,如果您可以限制外部登录,例如仅允许基于密钥的身份验证,则可以进一步降低风险)。
您将需要建议的配额和 ulimit 以及监控(这更有可能让您突然耗尽磁盘空间,而人们会因此而感到不安,而不是任何有足够知识获得 root 访问权限的人会将其丢弃)。
你不想要开始处理权限问题(但不知道自己到底在做什么)。
答案4
如何设置用户模式 Linux在每个学生的主目录中都放一个写时复制文件?这个沙箱将让每个人完全自由地控制自己的实例。如果出现问题,只需删除 COW 文件,您就会回到起点。
scp/sftp 可用于将提交的工作上传到中央存储库。