Answers:
您的问题应该是:
我不信任我的用户。愚蠢的人会在互联网上看到一些东西,然后在不了解它的作用的情况下尝试一下。狡猾的人喜欢偷偷摸摸,看看其他人的档案并窃取他们的想法。懒惰的人,不要让我开始上懒惰的人。
如何保护系统和用户免受用户侵害?
首先,unix具有非常全面的文件系统权限系统。 这似乎是有关unix文件系统权限的不错的教程。其要点是可以设置目录,以便用户可以进入目录并可以在该目录外运行程序,但不能查看该目录的内容。例如,如果在/ home上执行此操作,则如果用户在/ home上运行ls,则会收到拒绝权限错误。
如果您真的很害怕用户,并希望将他们限制在supermax类型的受限环境中,请使用freebsd的监狱或solaris的区域之类的东西-每个用户都有自己的量身定制的环境。对于添加的点,请使用ZFS,以便您可以在登录时为环境创建快照,因此,如果删除文件,则可以将其从快照中拉出。
要完全满足您的要求,需要完成三件事:
皮带,吊带和钉书钉枪。那里很难出错。
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配置文件。
在我看来,您仅需要步骤2和3,因为两者结合使用,都会阻止您在这两个步骤中精心设置的框之外进行有害的操作。
是的,这是可能的,但实际上,这需要大量的工作和计划。您可以创建脚本并使它们作为特权使用运行,然后从有问题的用户中删除所有特权。或者,您可以将用户的外壳设置为您自己制作的内容,以使他们仅执行您明确允许的操作。
但是,Linux中的标准权限使普通用户几乎不可能“损害系统”。您要预防哪种危害?防止用户能够在其主目录之外安装软件或运行程序是微不足道的,并且您可以使用chroot进一步锁定系统。
您可能需要尝试[lshell] [1](有限的shell)。
lshell是用Python编码的shell,可让您将用户的环境限制为有限的命令集,选择通过SSH启用/禁用任何命令(例如SCP,SFTP,rsync等),记录用户的命令,实施计时限制,和更多。
[1]:http://lshell.ghantoos.org/概述lshell
我通常实施这种限制的方式需要满足多个条件,否则可以轻松地规避该限制:
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*
为用户提供了一个受限制的,只读环境(想一样的东西LESSSECURE
,TMOUT
,HISTFILE
变量)。
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
)执行命令,或者完全不执行。