对于 Linux 中的某些用户“bob”,是否可以将“bob”可执行的内容限制在特定路径下。
举例来说,假设“bob”的主目录为 /home/bob
'bob' 绝不能具有读取/写入/执行(零权限)/home/bob 之上的任何内容的能力。
/bin、/lib、/usr/bin、/usr/lib、/usr/local/bin、/usr/local/lib 等都明确给出了适当的设置 rx - 因此“bob”可以从这些路径执行内容但不能写入它们。
“bob” 拥有自己目录 (/home/bob) 的 rwx 权限,但是否可以默认禁止 bob 从自己的目录执行内容,然后允许“bob”执行某些内容(启动器、脚本等)
请注意 - 'bob' 可以在 /home/bob 中编译自己的内容并运行这些内容(应予以阻止)。此外,'bob' 始终可以对自己拥有的文件使用 chmod、chgrp 等。需要的是执行预防 - 即使是对自己拥有的文件。
答案1
将主目录放在noexec
文件系统上。这将有助于防止用户执行存储在那里的二进制文件,尽管这并不能 100% 保证。
将任何其他用户可写位置(例如 /tmp)也放在 noexec 文件系统上。
将您希望用户能够执行的任何内容放入例如 /usr/local,由 root 拥有并具有适当的权限。
请注意,这不会阻止解析器解析和执行存储在 bob 主目录中的代码。例如,Perl 脚本可以设置其执行位并作为执行,./myscript.pl
也可以作为执行,perl ./myscript.pl
在这种情况下,它只会作为 Perl 解释器的输入读取。
如果您想要获得更好的保证,请考虑使用 chroot jails、SELinux,甚至完全删除 bob 的 shell 访问权限。如果他只被允许使用他的账户作为美化文件存储,那么他真的需要 shell 访问权限吗?例如,在您的使用案例中,将不受信任的用户限制到 sftp、SMB/CIFS/NFS 或 WebDAV 访问是否会更好?