あるユーザーから別のユーザーにファイルを渡す方法(コピーを作成せずに)


2

ユーザー "qqq"にファイル/home/qqq/bigfile.datがあり、ルートの助けを借りずにユーザー "aaa"に渡したいとします( "aaa"が所有している必要があります)。ユーザー「qqq」と「aaa」はどうすればよいですか?

素朴な方法:

  1. uid=qqq$ mv bigfile.dat /home/aaa/
  2. uid=aaa$ chown aaa /home/aaa/bigfile.dat # Operation not permitted

もちろん、ACL(uid=qqq$ setfacl u:aaa:rw- /home/aaa/bigfile.dat)を使用するか、一時コピー(uid=aaa$ mv bigfile.dat bigfile.dat_ && cat bigfile.dat_ > bigfile.dat && rm bigfile.dat_)を作成することで実行できますが、どちらの方法にも欠点があるようです。

両方のユーザーは、ファイルを「渡す」ことに同意します(何らかのコマンドを発行できます)。iノードやその他の属性などを保持しながら、迅速に処理する必要があります。

きれいにするにはどうすればいいですか?


aaaにファイルへのフルアクセスを与える方法を知っているようです(グループおよびその他のユーザーに対する通常のアクセス許可もそのために機能します)。ファイル所有者を設定する必要があり、今できないことは何ですか?

回答:


1

古いUNIXシステムでは、すべてのユーザーが自分のファイルを任意のターゲットに分割できました。これにより、いくつかのセキュリティ上の問題が発生したため、ほとんどは実行されません。

  • ディスク使用量クォータが設定されている場合、ユーザーAはプライベートディレクトリにファイルを配置することにより、ユーザーBの費用でファイルを保存できます。ユーザーBは、目に見えるディスク使用量をクォータと比較すること以外は決して知りません。また、クォータ泥棒を見つける方法もありません。

  • 一部の特権プログラム(set [ug] id実行可能ファイルまたはデーモン)は、ファイルがユーザーによって所有されている場合、そのユーザーはコンテンツを承認していると想定します。ユーザーAがファイルをユーザーBに寄せ付けた場合、Aは特権プログラムをだまして任意のデータを受け入れさせることができます。(これはとにかく安全ではない設計です。なぜなら、Aが実際にファイルを書き込んだとしても、Aはこの特定の目的のためにそれを承認していないかもしれません。

  • 非rootユーザーによるクラウンは元に戻すことはできません。心、それはあなたが一緒に暮らすかもしれないリスクです(そして実際、他のユーザーが協力する場合にのみ元に戻すことができるunixファイルシステムで行うことができる他のことがあります)。

私の知る限り、最近のほとんどのUNIXシステムでは、rootの協力なしにファイルの所有権を変更することは不可能です。ルートはchownを実行するか、AまたはBにsudoを介してそれを実行する許可を与えることができますが、これには通常望ましいものよりも多くのターゲットを絞ったルート介入が必要です。

お気づきのとおり、ACLが有効になっていると、実際にチャウニングの効果のほとんどが得られます。

ワークフローが本当にある時点でAが所有者であり、Bが他の時点で所有者であることが必要な場合、他のオプションを検討できます。

  • Bは、fakerootを使用してプログラムを実行し、rootとして実行されていると信じ込ませます。これにより、fakerootのメモリにのみ存在するシミュレートされたクラウンが許可されます(fakeroot sh -c 'chown B file; su B -c program')。

  • FUSEでトリックをプレイできます。たとえば、bindfsでは、ファイルの所有者が異なるディレクトリツリーのビューを作成できます(mkdir view_for_B; bindfs -u B actual_directory view_for_B)。


もちろん、両方のユーザーがそのような変更に同意することを期待しています。
Vi。

0

両方のユーザーが書き込みアクセスできる共有スペースにファイルを移動し(またはLinuxにそのようなものは存在しませんか?)、所有者にそれをレシーバーにchmodしてもらえますか?

私の考え方はMac OS Xに根ざしています。


これはLinuxにも存在しますが、通常のユーザーとしては認められません。

0

「ルートの助けなし」という意味に依存します。rootを取得してaaaとqqqを新しいグループに追加し(任意の名前で可能)、ファイルに少なくとも新しいグループのr--permsがあることを確認できる場合...(ユーザーaaaのrwxを保持できる- get => aaa:newgroup rw-r -----)その後、ルートaaaからのさらなる支援なしで、変更でき、qqqは同じファイルを読み取ることができます。

「ルートの希望に反して」それをしたい場合は、動作する方法を見つけた場合はバグだと思います。aaaがqqqがアクセスできるディレクトリにトロイの木馬を置くことができ、「誤って」実行される可能性がある場合、セキュリティ上の問題であるため、これを防ぐために多くの検討が行われました。


あなたはおそらく質問を理解していないでしょう。ユーザーはすでに同じグループに所属しています(そうでない場合、mv bigfile.dat /home/aaa/失敗するか、/ home / aaaのアクセス可能なアクセス許可が必要になります)。問題は、ファイルのメタデータを変更することです。
Vi。

-1

これを行う1つの方法は、ユーザーqqqaaaとして接続できるようにするssh-keyを作成することです。以下のようQQQはやります

ssh-keygen -t rsa

パスワードなしのキーを使用するかどうかを決定します。

次に、これをqqqとして実行して、新しく作成したキーをaaaに追加します

ssh-copy-id -i ~/.ssh/id_rsa.pub aaa@localhost

その後、次のようにファイルを移動できます。

scp bigfile.dat aaa@localhost:

(または、お気に入りのsftpクライアントを使用)

そうすれば、sshdは所有権の変更を処理します。

ローカル転送にscp / sftpを使用すると奇妙に聞こえるかもしれませんが、少なくともそれは機能します!:)


1.ネットワークの場合ではありません。2.ファイルのコピーを作成したくありません。ファイルが4 GBで、ストレージ全体が5 GBであるとします。
Vi。

1
3.ユーザー「qqq」に「aaa」へのアクセス権を与えたくありません。
Vi。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.