Linux文件权限查询

Linux文件权限查询

abcd.php我想以这种方式设置文件的权限,以便用户/程序可以执行/运行该文件,但用户无法使用 SFTP 或 FTP 删除或下载该文件。

我尝试了很多搜索,但无法得到完美的答案。

答案1

(注:这听起来有点像XY问题。您可能想要描述使您想要设置此类权限的实际问题abcd.php。)

让我们看看您的要求意味着什么:

  • 文件可以由用户执行/运行:对于 PHP 文件,这意味着该文件必须是可读的对于以用户身份运行的程序,可能使用执行添加了一点。这是很正常的并且可以轻松完成。
  • 用户无法删除:这意味着该文件必须位于位于用户不可写入的目录中,并且也没有用户可写入的父目录。这本质上意味着该文件必须位于用户完全只读的位置。 (如果不允许用户删除该文件,您可能也不想允许用户修改文件的内容。)
  • 用户无法下载文件:不幸的是,这与您的第一个要求相冲突。当Linux文件权限指定文件可读时,该文件将被出于任何目的可读:无法使用文件权限将文件指定为“可读执行但不可下载”。您将不得不使用其他一些方法来强制实施这种限制。

由于*.php文件经常与网页一起使用,因此此类问题通常可以通过将网络服务器作为单独的用户帐户运行并完全禁用 SFTP/FTP 访问来解决,并且配置网络服务器只输出执行 PHP 文件的结果,而不输出实际的 PHP 文件本身。

如果本地用户需要执行 PHP 文件,他们可以运行类似命令curl http://localhost/some/path/abcd.php,让 Web 服务器进程为他们执行该文件,而用户自己不需要abcd.php在文件系统级别直接访问该文件根本不。

如果您使用 PHP 作为本地脚本编写工具,您可能不想涉及 Web 服务器,而是使用sudo,正如 FelixJN 的回答中所述

答案2

问题是这PHP毕竟是一种脚本语言。即为了执行,必须能够读取它。

不过,您可以通过更改所有者并允许无密码 sudo 执行来规避此问题。例如

 $ls -a file.php
 -r-x------ 1 phpuser phpuser 15 15. Sep 13:12 file.php

phpuser 不是john您担心的用户。然后有一个像这样的条目

 $cat /etc/sudoers
 %phpreaders ALL=(phpuser) NOPASSWD: /path/to/file.php

并将您想要的用户添加到phpreaders组中。通过上述sudoers条目,组成员phpreaders可以在没有密码的情况下在服务器上执行脚本ALL,但它将作为phpuser.所以执行将通过john调用完成

sudo -u phpuser /path/to/file.php

请注意,它不是以 方式运行,john而是以 方式运行phpuser

相关内容