所以我有一个用户能够进入/etc
并读取httpd.conf
.
我想拒绝该用户访问任何关键位置,例如/etc
,/var
等等。
最好的方法是什么?我真的不想只为一个用户修改我的整个文件夹/文件权限。
答案1
您可以使用文件访问控制列表来删除特定用户的权限。该命令是 setfacl,它在文件上设置(创建)ACL。
用法示例:
root@host:/tmp# date > f1
root@host:/tmp# ls -l f1
-rw-r--r-- 1 root root 30 Mar 28 12:12 f1
root@host:/tmp# setfacl -m u:johan:0 f1
root@host:/tmp# ls -l f1
-rw-r--r--+ 1 root root 30 Mar 28 12:12 f1
请注意权限后面的 + 符号。它告诉您该文件设置了 ACL。 setfacl 命令选项 -m 告诉它创建/修改 ACL。参数“u:johan:0”导致用户“johan”的用户条目设置为“0”,这是权限模式“0 0 0”的缩写,相当于“--- --- -- -”用于传统的“rwx rwx rwx”权限集。
root@host:/tmp# getfacl f1
# file: f1
# owner: root
# group: root
user::rw-
user:johan:---
group::r--
mask::r--
other::r--
root@host:/tmp# cat f1
Thu Mar 28 12:12:07 SAST 2013
root@host:/tmp# exit
退出后命令具有指定用户的权限,例如“johan”
johan@host:/tmp> cat f1
cat: f1: Permission denied
说了这么多要特别小心。不加区别地删除 /etc 的访问权限将导致各种故障,并且用户可能无法登录。许多系统功能会使用登录用户的权限读取 /etc 中的各种配置文件。然而,阻止用户访问特定的单个文件是完全可以接受的。
答案2
监狱ch安格斯根,如/
,到新路径。
作为一个简单的例子作为开始。
首先,您很可能希望将 chroot 目录放在单独的分区上 - 这样用户就无法填充您的系统分区。
但为了简单起见:
制作 chroot 目录:
# mkdir /usr/chroot_test # cd /usr/chroot_test
制作系统目录:
# mkdir bin etc home lib var
添加一些基本工具:
这里可以用来ldd
查找依赖关系。
# ldd /bin/bash
linux-gate.so.1 => (0xb774d000)
libtinfo.so.5 => /lib/libtinfo.so.5 (0xb770a000)
libdl.so.2 => /lib/libdl.so.2 (0xb7705000)
libc.so.6 => /lib/libc.so.6 (0xb755a000)
/lib/ld-linux.so.2 (0xb774e000)
将它们复制到 chroot 的 lib:
# cp /lib/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux.so.2} lib/
现在输入chroot
# chroot /usr/chroot_test
bash-4.2# ls
bash: ls: command not found
bash-4.2# pwd
/
bash-4.2# exit
exit
好的。作品。添加更多工具:
# sed '/=>/!d;/=>\s*(/d;s/.*=>\s*\([^ ]*\) .*/\1/' < <(ldd /bin/{ls,cat,vi}) | sort -u)
... copy
ETC。
然后添加chroot登录(http://kegel.com/crosstool/current/doc/chroot-login-howto.html)。
但是,正如前面提到的,通过使用 jailkit 可以简化这一过程:http://olivier.sessink.nl/jailkit/howtos_chroot_shell.html。
答案3
您担心的文件是意思是可供公众访问。真正敏感的数据被锁定。是的,Unix(从设计和历史上来说)是一个相当开放的系统。
如果您非常担心该用户,请将她拒之门外。您不信任的用户在您的计算机上没有地位。
或者去问问你的偏执狂,也许事情已经失控了。