所以我在我的系统中玩了一点权限,然后我注意到没有指定将文件发送到其他地方的权限。
作为一个简单的用户,我尝试了以下命令:
mail -a //etc/shadow [email protected]
我很满意收到一条Permission Denied
消息,但仍然不清楚发送文件需要什么权限。
我的意思是,我使用mail
邮件协议的命令,但是其他命令或其他协议呢?
顺便说一句,该shadow
文件的权限是:
-rw-r----- 1 root shadow 1759 Oct 23 2017 shadow
没有,因为“发送”文件并不是真正的文件系统级操作。该
mail
命令的作用是打开文件进行读取,读取数据并通过网络套接字发送(写入)它(可能在电子邮件的情况下编码,并不重要)。类似地,FTP 客户端scp
或任何其他客户端也会这样做,它们会像往常一样读取文件。您没有对 的读取权限
/etc/shadow
,因此mail
使用您的用户 ID 运行无法打开它进行读取。Linux 确实有
sendfile()
system call,它直接在两个文件描述符之间复制数据,但这与read()
一个 fd 和write()
另一个 fd 上的调用基本相同,只是它发生在内核中,因此系统调用开销较小。它也需要打开源以供阅读。