全局可写文件和基于用户的进程监禁

全局可写文件和基于用户的进程监禁

我希望能够一般选择某个可执行文件(可能是恶意的)x并运行它(从管理员帐户),写入访问权限仅限于某些目录(动态推导)"${dirs[@]}"

可执行文件应该能够访问系统上全局可访问的任何内容。

我想我可以使用简单的用户切换并拥有一个专用的无状态系统用户foreveralone来运行这些可执行文件。

每当我想x在这些限制下运行时,我都会创建flock一个锁定文件,chown -R foreveralone:foreveralone -- "${dirs[@]}"然后执行sudo -u foreveralone -g foreveralone $PWD/x.

之后,我会将chown目录写入其他人,这样foreveralone文件系统上就不会有持久文件。我想我还需要清理s 文件/tmp, /dev/shm中的全局写入目录(例如,)foreveralone

我的问题是:

  1. 考虑到标准设置的 *nix 系统,这是一种可行且安全的监狱进程机制吗?
  2. 标准设置 *nix 上的标准全局可写位置和文件到底是什么?
  3. 我怎样才能找到比类似的东西更好的东西

    sudo -u Foreveralone -g Foreveralone 查找 / ! -type l -writable 2>/dev/null | -type l -writable 2>/dev/null | grep -v '^/proc'

    (我的find游戏非常弱。/proc/$pid似乎有很多文件看起来可写,但实际上并非如此,所以我跳过了这些文件(我想知道这是怎么回事))。

无论如何,在我的系统上, 3. 返回(过滤以显示文件类型):

  character special file    /dev/full
  character special file    /dev/fuse
  character special file    /dev/net/tun
  character special file    /dev/null
  character special file    /dev/ptmx
  character special file    /dev/random
  character special file    /dev/tty
  character special file    /dev/urandom
  character special file    /dev/zero
  character special file    /sys/kernel/security/apparmor/.null
  directory /run/lock
  directory /run/shm
  directory /tmp
  directory /tmp/.ICE-unix
  directory /tmp/.X11-unix
  directory /var/local/dumps
  directory /var/mail
  directory /var/spool/samba
  directory /var/tmp
  regular empty file    /run/sendmail/mta/smsocket
  regular empty file    /sys/kernel/security/apparmor/.access
  socket    /dev/log
  socket    /run/acpid.socket
  socket    /run/avahi-daemon/socket
  socket    /run/cups/cups.sock
  socket    /run/dbus/system_bus_socket
  socket    /run/gdm_socket
  socket    /run/mysqld/mysqld.sock
  socket    /run/samba/nmbd/unexpected
  socket    /run/sdp
  socket    /tmp/.ICE-unix/2537
  socket    /tmp/mongodb-27017.sock
  socket    /tmp/.X11-unix/X0
  1. 有没有更好的(更简单/更灵活的解决方案)

在我的特殊情况下,x这将是一个潜在的恶意构建脚本,它应该运行而不会写入错误的位置或读取不可全局读取的内容。

答案1

首先抱歉我的英语不好。让我们只使用 UNIX 概念为您展示一些东西,因为我认为它可以帮助(或者可能没有)。

想象一下,我希望可执行文件 nano 可以由每个用户执行,但绝不能以调用其可执行文件的用户身份运行,但环境有限,只能编辑 apache 配置或某些组中的文件,换句话说我希望 Nano 像 Linux 服务一样执行,仅限于特定的虚拟用户权限。

1-首先我将创建用户 nano 并禁用其登录:

useradd nano -d /var/nano
mkdir /var/nano 
chown -R nano:nano /var/nano
passwd -l nano

2-让我们强制nano以用户nano身份运行(例如,如果root调用nano,它必须以nano身份运行,而不是由root运行)

chown nano:nano /usr/bin/nano
chmod a+s /usr/bin/nano

现在 +s 意味着,nano 将作为所有者运行,而不是由调用它的人运行。

3- 使用 root 调用 nano 进行测试:

#nano
#ps aux | grep nano
nano      3399  0.0  0.0  13828  3840 pts/0    S+   08:48   0:00 nano

美丽的! Nano 现在以用户 nano 身份运行,不依赖于我登录的用户。

4-那现在怎么办?我希望 nano 编辑 /var/www/apache2 中的文件

chgrp -R www-data /var/www/ (yes i now that is unnecessary in Debian if the group are respected)
chmod -R g+rw /var/www 
adduser nano www-data

5-还有什么?

您会注意到,现在每个用户都可以使用 nano(或其特殊副本“nano-special”;-)来编辑 /var/www 文件,那么如果您希望只有 nano 组中的用户可以执行此操作,该怎么办?

简单地删除其他权限来执行它:

chmod o-x /usr/bin/nano 

并将用户添加到nano组中

adduser myuser1 nano

相关内容