だから私はシステムでいくつかの権限で遊んでいましたが、ファイルを別の場所に送信するように指定された権限がないことがわかりました。
一般ユーザーとして、次のコマンドを試しました。メッセージの受信に満足していますが、ファイルを送信するために必要な権限が何であるかはまだわかりません。mail -a //etc/shadow [email protected]
Permission Denied
つまり、mail
メールプロトコルにはコマンドを使用しますが、他のコマンドやプロトコルはどうですか?
ただし、このファイルの権限は次のとおりですshadow
。
-rw-r----- 1 root shadow 1759 Oct 23 2017 shadow
答え1
いいえ、ファイルを「送信」するのは実際にはファイルシステムレベルの操作ではないからです。このmail
コマンドが実行するのは、ファイルを読み取るためにファイルを開き、データを読み取り、ネットワークソケットを介して転送(書き込み)することです(電子メールの場合はエンコードできますが、重要ではありません)。同様に、FTPクライアントscp
や他のクライアントも同じことを行い、ファイルを正常に読み込みます。
読み取り権限がないため、ユーザーIDで実行する/etc/shadow
とmail
読み取れません。
Linuxではsendfile()
システムコールread()
、これは2つのファイルディスクリプタ間で直接データをコピーしますが、これはデフォルトで1つwrite()
のファイルディスクリプタを呼び出して別のファイルディスクリプタを呼び出すのと同じですが、カーネルで発生するため、システムコールのオーバーヘッドが少なくなります。また、読むにはソースコードを開く必要があります。