我希望能够一般选择某个可执行文件(可能是恶意的)x
并运行它(从管理员帐户),写入访问权限仅限于某些目录(动态推导)"${dirs[@]}"
。
可执行文件应该能够访问系统上全局可访问的任何内容。
我想我可以使用简单的用户切换并拥有一个专用的无状态系统用户foreveralone
来运行这些可执行文件。
每当我想x
在这些限制下运行时,我都会创建flock
一个锁定文件,chown -R foreveralone:foreveralone -- "${dirs[@]}"
然后执行sudo -u foreveralone -g foreveralone $PWD/x
.
之后,我会将chown
目录写入其他人,这样foreveralone
文件系统上就不会有持久文件。我想我还需要清理s 文件/tmp, /dev/shm
中的全局写入目录(例如,)foreveralone
。
我的问题是:
- 考虑到标准设置的 *nix 系统,这是一种可行且安全的监狱进程机制吗?
- 标准设置 *nix 上的标准全局可写位置和文件到底是什么?
我怎样才能找到比类似的东西更好的东西
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
- 有没有更好的(更简单/更灵活的解决方案)
在我的特殊情况下,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