我们的实验室由多台台式机和一个数据节点组成,所有台式机都运行 Ubuntu Linux。台式机从数据节点挂载 /home。/home 中的文件和用户使用存储在数据机的 /etc/passwd、/etc/group 和 /etc/shadow 中的 UID 和 GID 进行管理。如果我想添加用户或组,我必须编辑数据机的 passwd/group/shadow 文件并将特定行复制到所有台式机的 passwd/group/shadow 文件中。
有没有办法让 Linux 使用多个 passwd/group/shadow 文件?我们希望桌面计算机拥有自己的 passwd/group/shadow,然后将数据计算机的 passwd/group/shadow 作为其自身文件的补充。
另外,有没有办法让用户拥有 sudo 访问权限,但不允许他们修改 passwd/group/shadow 以授予他们访问文件和组的权限?我们希望他们执行管理任务(安装软件、设置网络/打印机等),但我们也希望严格控制谁有权访问特定数据。
答案1
虽然我不知道如何让 Linux 合并多个 passwd 文件,但我想指出的是,您的设置是使用 LDAP 进行集中用户管理的典型用例。不幸的是,虽然配置 Ubuntu 客户端进行 LDAP 身份验证变得相当容易,设置 OpenLDAP 服务器 有点烦人和我发现存储库中的管理软件缺乏。
一个务实的建议:在内部,定义一系列 UID 以供整个实验室共享使用,并为客户端编写一个小型启动脚本,将部分 passwd/shadow/groups 文件与服务器上的“中央用户数据库”同步(在这种情况下,可以通过简单的文本文件实现)。
关于你问题中的 sudo 部分:/etc/sudoers 可以保存有关各个 sudoers 可以使用提升的权限运行哪些命令的信息。但是,很难找到一种万无一失的方法将用户锁定在外,同时仍允许他们使用任何编辑器。引自sudoers 手册页:
感叹号 ('!') 既可以在别名中用作逻辑非运算符,也可以在 Cmnd 前面使用。这允许排除某些值。但请注意,将 ! 与内置 ALL 别名结合使用以允许用户运行“除少数之外的所有”命令很少能按预期工作
如果您可以列举用户可以运行的任务而无需添加“并使用文本编辑器更改设置文件”,我看不出有可靠的方法来做到这一点。
答案2
您可以看看 NIS(或以前称为 YP)。
或者您可以拥有一个中央系统,并在所有系统之间定期对 passwd/group/shadow 文件进行 rdist。该过程将避免所有系统的输入和修改,并保持这些文件的一致性,以防某些特权用户对这些文件进行某些操作。
至于 sudo 问题,我认为对拥有此权限的用户进行信任、验证、审计和教育,对于防止出现问题大有裨益。确保您的用户了解所赋予的责任,并得到管理层的支持,以便在出现问题时采取行动。问题是,几乎不可能避免泄漏到某种类型的编辑器或程序中(无论是分布式的还是生成的)