我正在编写一个 bash 脚本,它可以为我做一些清理工作(清除当前目录中任何 Rails 项目的日志文件)。我正在使其可执行,但我不确定设置“组”和“其他”文件权限的最佳实践是什么。我应该将权限设置为 700 (只有所有者可以 rwx)吗?
我的部分困惑是当文件从一个系统复制到另一个系统时如何确定“所有权”。如果我的 UID 是 509 并且我将my_file.sh
文件权限设置为 700,我猜测文件所有权是通过在文件上存储 UID 来确定的。如果我共享my_file.sh
并且有人将其下载到他们的系统中,UID 是否会更改以匹配他们自己的?这是否取决于文件的传输方式(scp、git、http 等)?
答案1
我不确定设置“组”和“其他”文件权限的最佳实践是什么。
正常的方法是 755,因此组和其他人具有读取执行权限。几乎 (eg) 中的所有内容/usr/bin
都是这样设置的。
如果我共享 my_file.sh 并且有人将其下载到他们的系统中,UID 是否会更改以匹配他们自己的?这是否取决于文件的传输方式(scp、git、http 等)?
几乎可以肯定它确实被设置为它们的 UID,但是有一些方法可以保留原始值 - 例如,如果您打开tar
该文件,然后以 root 身份在某处打开它,您将获得原始的数字 UID。
不过,这通常没有什么意义,除非您出于某种特殊原因想要将文件部署到具有特定 UID 的位置。如果您担心的是读取和修改脚本的能力,那么无论您使用什么 UID 或方法,都无法阻止这种情况。将文件传输到具有 root 访问权限的另一个系统的人可以对其执行任何操作。但是,除非他们拥有原始文件的写入权限,否则他们无法替换或修改原始文件。
在本地系统上,可以复制具有读取执行权限的文件(因为它是可读的),并且副本将具有制作副本的用户的 UID。你可以设置一个文件可执行但不可读,但这样做没有任何目的;文件必须是可执行的和可读以便执行。换句话说,如果您希望每个人都可以使用该脚本,您需要最低限度地world 对它的读取执行权限。