【问题标题】:SSH user lock to their home dir & one serviceSSH 用户锁定到他们的主目录和一项服务
【发布时间】:2011-11-16 10:04:16
【问题描述】:

我真的是 Linux 新手。我用谷歌搜索了几天,并在 CentOS 中安装了 Java 和 Tomcat。

现在我需要一个用户,该用户在其主目录中拥有所有权限(包括文件、子目录和子目录中的文件),但不能访问任何其他目录。

此外,此用户必须具有管理一项服务的权限(我创建了 tomcat 服务,我可以“启动”、“停止”和“重新启动”)。

谁能解释一下如何做到这一点?

【问题讨论】:

    标签: linux permissions ssh


    【解决方案1】:

    你要求的太多了。

    有几种可能的方法:

    本机 Linux 权限

    为这个新用户创建他们自己的新组。让他们成为这个组的唯一成员。

    删除所有数据文件的世界读取、写入、执行权限。如果任何用户通过 world 权限获得了对数据文件的权限,请根据需要为所有用户和数据创建新组(可能一个用于accounting,一个用于billing,一个用于sales,一个用于engineering,等等。随便什么都行。)

    为此用户添加一个新的sudoers(5) 条目,用于sudo stop tomcatsudo start tomcatsudo restart tomcatsudo status tomcat -- 或该用户需要执行以管理 tomcat 服务的任何命令。有关编辑 sudo(8) 配置文件的详细信息,请参阅 visudo(8)

    如果您真的想要锁定此用户,请将此人需要的实用程序复制到他们的~/bin/ 目录中,然后继续删除/bin 上的世界执行位,@ 987654341@,/usr/bin/usr/sbin。 (别管/lib/usr/lib 等——在这个用户需要的库中复制无疑是一项大量工作。)

    强制访问控制

    我将使用AppArmor 系统来解释这一点;我在 AppArmor 上工作了十多年,这是我最了解的系统。还有更多选择:TOMOYOSMACKSELinux 都是优秀的工具。 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 tomcatsudo start tomcatsudo restart tomcatsudo 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 终端中,回答出现的问题。允许需要允许的。否认应该否认的。当您被问及 执行权限 时,首选 inheritchild 而不是 profile。 (profile 选项会影响系统上的所有其他人。Inheritchild 只会影响您当前正在处理的任何配置文件的执行改进。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 启动。)

    【讨论】:

      【解决方案2】:

      您可以通过在受限模式下启动 bash 轻松创建一个非常受限的环境。将用户的 shell 设置为 rbash 而不是 bash,这将使其进入受限模式。

      http://www.gnu.org/s/bash/manual/html_node/The-Restricted-Shell.html

      rbash 有可能对您的需求过于限制。除其他外,受限环境禁止更改目录。但是看看它,看看它是否足以满足您的需求。

      【讨论】:

        猜你喜欢
        • 2015-05-24
        • 2010-12-04
        • 1970-01-01
        • 2013-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-25
        相关资源
        最近更新 更多