你要求的太多了。
有几种可能的方法:
本机 Linux 权限
为这个新用户创建他们自己的新组。让他们成为这个组的唯一成员。
删除所有数据文件的世界读取、写入、执行权限。如果任何用户通过 world 权限获得了对数据文件的权限,请根据需要为所有用户和数据创建新组(可能一个用于accounting,一个用于billing,一个用于sales,一个用于engineering,等等。随便什么都行。)
为此用户添加一个新的sudoers(5) 条目,用于sudo stop tomcat、sudo start tomcat、sudo restart tomcat、sudo status tomcat -- 或该用户需要执行以管理 tomcat 服务的任何命令。有关编辑 sudo(8) 配置文件的详细信息,请参阅 visudo(8)。
如果您真的想要锁定此用户,请将此人需要的实用程序复制到他们的~/bin/ 目录中,然后继续删除/bin 上的世界执行位,@ 987654341@,/usr/bin,/usr/sbin。 (别管/lib、/usr/lib 等——在这个用户需要的库中复制无疑是一项大量工作。)
强制访问控制
我将使用AppArmor 系统来解释这一点;我在 AppArmor 上工作了十多年,这是我最了解的系统。还有更多选择:TOMOYO、SMACK、SELinux 都是优秀的工具。 AppArmor 和 TOMOYO 致力于限制对路径名的访问。 SMACK 和 SELinux 的理念是,系统上的每个对象都被分配一个标签,并且策略指定哪些标签(在进程上)可以读取、写入、执行等标签(在数据或其他进程上)。如果您想实施全面的开放、分类、秘密、绝密保护风格,SMACK 或 SELinux 将是更好的工具。如果您想将某些程序限制在某些文件中,AppArmor 或 TOMOYO 会是更好的工具。
AppArmor 应该可以在大多数 Ubuntu、SUSE、PLD、Annvix、Mandriva 和 Pardus 发行版上使用。
AppArmor 系统限制进程并控制进程在进程执行新程序时如何从域移动到域。域通常由程序分配。
最简单的入门方法是将/bin/bash 复制到/bin/jail_bash(或/etc/shells 中的其他名称not),在/etc/passwd 中为用户设置shell(@ 987654350@ 可以简化此操作),并为/bin/jail_bash 创建一个 AppArmor 配置文件,该配置文件只允许您希望允许的操作。如果我们正确地限制了流程,那么用户就无法逃脱我们为他们制作的配置文件。
为此用户添加一个新的sudoers(5) 条目,用于sudo stop tomcat、sudo start tomcat、sudo restart tomcat、sudo status tomcat -- 或该用户需要执行以管理 tomcat 服务的任何命令。有关编辑 sudo(8) 配置文件的详细信息,请参阅 visudo(8)。
在一个终端中,运行aa-genprof jail_bash。在另一个终端中,以用户身份登录(或以其他方式运行/bin/jail_bash)并开始执行您希望允许此人执行的任务。我们将使用您所做的作为培训材料来迭代地构建配置文件。您可能有兴趣观看/var/log/syslog 或/var/log/audit/audit.log(如果您安装了auditd 包)以了解AppArmor 注意到您的程序执行的操作。不要一次做太多事情——每次迭代只做一些新的事情。
在aa-genprof 终端中,回答出现的问题。允许需要允许的。否认应该否认的。当您被问及 执行权限 时,首选 inherit 或 child 而不是 profile。 (profile 选项会影响系统上的所有其他人。Inherit 或 child 只会影响您当前正在处理的任何配置文件的执行改进。Child 将权限分解为更小的部分,而 inherit 将权限保留在较大的配置文件中。在这种情况下更喜欢 inherit。)
一旦遇到有关执行 tomcat 的问题,请使用 unconfined execute 权限。这是危险的——如果启动tomcat的方式中的一个错误允许人们启动不受限制的shell,那么这可以用来越狱。您可以限制 tomcat(这甚至是一个好主意 - tomcat 并不完美)以防止它成为逃生路线,但这可能没有必要马上。
AppArmor 旨在让您在系统上随时间推移轻松扩展配置文件。 AppArmor 不适用于所有安全情况,但我们在DEF CON Capture-the-flag 黑客竞赛with excellent results 中部署了与此非常相似的场景。我们必须允许攻击者 root(和临时用户帐户)通过 telnet 以及 POP3、SMTP、HTTP+CGI 和 FTP 访问机器。
在允许您的用户登录之前,请务必手动检查 /etc/apparmor.d/ 中的配置文件。您可以使用纯文本编辑器修复任何您想要的内容;运行 /etc/init.d/apparmor restart 以重新加载所有配置文件(并卸载您可能删除的配置文件)。
当您第一次学习如何配置 AppArmor 时,保持一个不受限制的 root sash(1) shell 打开会很方便。如果您忽略有关不应拥有自己配置文件的程序的警告,则可能很难重新进入您自己的系统。 (不要忘记在最坏的情况下使用init=/bin/sh 启动。)