如何限制用户的外壳程序以允许执行外壳程序


9

是否可以防止任何用户不使用ls,rm和其他可能危害系统的系统命令。但是用户应该能够执行Shell程序。


你为什么想做这个?您不能编写与他们互动的程序吗?

他们应该执行哪种外壳程序?
迈克,

您的意思是“运行自己创建的Shell程序”,它具有明显的安全问题
。.– pjc50

13
哦,不,不是危险的ls命令!
womble

Answers:


11

您的问题应该是:

我不信任我的用户。愚蠢的人会在互联网上看到一些东西,然后在不了解它的作用的情况下尝试一下。狡猾的人喜欢偷偷摸摸,看看其他人的档案并窃取他们的想法。懒惰的人,不要让我开始上懒惰的人。

如何保护系统和用户免受用户侵害?


首先,unix具有非常全面的文件系统权限系统。 这似乎是有关unix文件系统权限的不错的教程。其要点是可以设置目录,以便用户可以进入目录并可以在该目录外运行程序,但不能查看该目录的内容。例如,如果在/ home上执行此操作,则如果用户在/ home上运行ls,则会收到拒绝权限错误。

如果您真的很害怕用户,并希望将他们限制在supermax类型的受限环境中,请使用freebsd的监狱或solaris的区域之类的东西-每个用户都有自己的量身定制的环境。对于添加的点,请使用ZFS,以便您可以在登录时为环境创建快照,因此,如果删除文件,则可以将其从快照中拉出。


9

要完全满足您的要求,需要完成三件事:

  1. 一个缺少您感兴趣的命令的自定义外壳。这是一件很难的事情,但是如果您确实真的不希望用户访问某些shell原语,则这是删除它们的唯一方法。
  2. 正确设置文件权限。不想让用户破坏系统吗?设置权限,以使它们即使使用正确的工具也不会损坏系统。在这三个步骤中,这是最简单的步骤。
  3. 使用诸如AppArmor之类的强制访问控制技术。诸如AppArmor和SELinux之类的MAC在内核中嵌入了权限。即使用户在某处找到它们,它们也会阻止用户运行正确的工具(并且像文件权限一样,防止用户在受限制的框之外使用它们)。

皮带,吊带和钉书钉枪。那里很难出错。

AppArmor很有趣,因为特定可执行文件的MAC被其所有子级继承。将用户的登录名/bin/bash-bob设置为,为该特定的二进制权限设置AppArmor配置文件,而要摆脱该权限监狱的唯一方法是通过内核漏洞利用。如果/var/opt/vendor/tmp由于某些愚蠢的原因而使某些懒惰的安装脚本无法全局写入,则将/bin/bash-bob其用作shell 的用户将无法在其中编写脚本。将bash-bob配置文件设置为仅允许写入其主目录和/tmp,并且不能利用此类权限错误。即使他们以某种方式找到了root密码,/bin/bash-bob也仍然会使用该应用程序的AppArmor配置文件,su因为它们启动后,su并且bash其生成的过程是的子级/bin/bash-bob

困难的部分是构建该AppArmor配置文件。

  1. 为/ bin / bash-bob创建一个AppArmor配置文件并将其设置为审核模式
  2. 将Bob的登录shell设置为/ bin / bash-bob
  3. 以Bob身份登录。做您希望鲍勃能够做的所有事情。
  4. 使用auditlog来构建AppArmor配置文件(SUSE具有用于此的工具,不确定其他Linux发行版)。这非常繁琐,但是如果您需要这种级别的安全性,则需要进行此操作。
    1. 您将执行以下操作:
      • 批准对大多数系统库的读取访问
      • 批准对选定的少数几个允许的系统命令的读取和执行权限
      • 批准对临时空间的写访问
      • 必要时批准套接字创建
  5. 设置要执行的策略。
  6. 以Bob身份登录,执行操作。
  7. 进行调整。

在我看来,您仅需要步骤2和3,因为两者结合使用,都会阻止您在这两个步骤中精心设置的框之外进行有害的操作。


4

好了,您可以将用户的外壳程序设置为您编写的仅允许他们运行某些外壳程序脚本的程序。

当然,这仅与程序和Shell脚本一样安全。实际上,这种受限制的外壳通常无法抵御聪明的攻击者。


3

不要尝试限制命令,限制文件权限。您实际上不能限制人们对syscall的访问,因此某人需要做的就是提供自己不想让他们执行的所有“危险”命令的副本,这样您就被塞满了。


2

如果您希望用户只能执行某些脚本/二进制文件,则可以使用受限shell。这(如Wikipedia文章所述)并不完全安全,但是如果可以保证没有允许运行的应用程序能够执行新的Shell,那么这是一个不错的选择。

要设置用户受限外壳,请将/bin/rbash(或类似的,当二进制文件名为r *** name *时,大多数外壳进入受限模式)设置为用户外壳。然后,编辑**。bashrc(或等效文件)并将其设置$PATH为存储所有允许的二进制文件/脚本的目录。


1

是的,这是可能的,但实际上,这需要大量的工作和计划​​。您可以创建脚本并使它们作为特权使用运行,然后从有问题的用户中删除所有特权。或者,您可以将用户的外壳设置为您自己制作的内容,以使他们仅执行您明确允许的操作。

但是,Linux中的标准权限使普通用户几乎不可能“损害系统”。您要预防哪种危害?防止用户能够在其主目录之外安装软件或运行程序是微不足道的,并且您可以使用chroot进一步锁定系统。


我正在尝试防止可能的命令,例如rm -rf / bin,ls / home / *,rm -rf / usr / bin,ls / ..... .....

2
您可以阻止使用标准linux文件权限的用户...
ChristopheD

1

您可能需要尝试[lshell] [1](有限的shell)。

lshell是用Python编码的shell,可让您将用户的环境限制为有限的命令集,选择通过SSH启用/禁用任何命令(例如SCP,SFTP,rsync等),记录用户的命令,实施计时限制,和更多。

[1]:http://lshell.ghantoos.org/概述lshell


1

我通常实施这种限制的方式需要满足多个条件,否则可以轻松地规避该限制:

  • 用户不属于该wheel组,而是唯一一个有权使用的组su(通过PAM强制执行)。
  • 为用户提供了适当的保护 rbash带有PATH指向private 的只读指针~/bin,该~/bin/目录包含指向简单实用程序的链接:

    $ ll ~/bin
    total 0
    lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
    lrwxrwxrwx. 1 root dawud  7 Sep 17 08:58 df -> /bin/df*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
    lrwxrwxrwx. 1 root dawud  8 Sep 17 08:58 env -> /bin/env*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
    lrwxrwxrwx. 1 root dawud  9 Sep 17 08:58 grep -> /bin/grep*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
    lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
    lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
    
  • 为用户提供了一个受限制的,只读环境(想一样的东西LESSSECURETMOUTHISTFILE变量)。

  • 用户映射到SELinux用户,staff_u并有权通过权限与其他用户一起执行命令sudo
  • 用户的/home/tmp并且可能/var/tmp通过/etc/security/namespace.conf以下方式进行了实例化:

    /tmp       /tmp/.inst/tmp.inst-$USER-     tmpdir:create   root
    /var/tmp   /tmp/.inst/var-tmp.inst-$USER- tmpdir:create   root
    $HOME      $HOME/$USER.inst/              tmpdir:create   root
    

    同样,/etc/security/namespace.init使所有骨骼文件对用户只读,由拥有root

这样,您可以选择是否$USER可以代表他(她)(通过私有~/bin目录中的链接,通过/etc/skel,通过设置),代表其他用户(通过sudo)执行命令,或者完全不执行。


0

是的,只需更改这些命令的权限即可。

通过编写符合您要求的shell命令,您可能会有更好的战斗机会。

Linux上普通用户的默认权限不适合什么?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.