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