(方法)tmpfsを通常の(非root)ユーザーとして作成できますか?


39

ディストリビューションは、2.6.35-30 Linuxカーネルを実行するUbuntuサーバーです。

完全にメモリ内に存在するディレクトリが必要です。これはルート権限なしでも可能ですか?

回答:


49

Linuxは、すべてのユーザーが使用できるtmpfsデバイスを提供します/dev/shm。デフォルトでは特定のディレクトリにマウントされていませんが、1つのディレクトリとして使用できます。

単純にディレクトリを作成し、/dev/shm必要な場所にシンボリックリンクします。作成したディレクトリに任意のアクセス権を付与して、他のユーザーがアクセスできないようにすることができます。

これはRAMでバックアップされたデバイスなので、デフォルトではメモリに何があります。内部に必要なディレクトリを作成できます/dev/shm

当然、ここに配置されたファイルは再起動後も存続し/dev/shmません。また、マシンがスワップを開始しても、助けにはなりません。

Solaris平行/dev/shmIS /tmp「スワップ」タイプのパーティション、及び、メモリベースです。と同様に/dev/shm、任意のユーザーが/tmpSolarisでファイルを作成できます。

OpenBSDにはメモリベースのマウントも使用できますが、デフォルトでは使用できません。mount_mfsコマンドは、スーパーユーザーが利用できます。

他の* BSDについてはわかりません。


1
シンボリックリンクはwhere問題を解決できます。
エンゾチブ

D'oh ...それらの厄介な小さなシンボリックリンクを忘れました。
ガベ。

@enzotibが修正しました!
ガベ。

/dev/tmpfsシステム上にはないようです(3.0.0カーネルを持っている自分のシステムもありません)。それはディストリビューションによって作成されたものではないのですか?
ビットマスク

1
これが他の人にも当てはまるかどうかはわかりませんが、ubuntuの現在のバージョンでは、これは変更されているようで、回答を更新する前にさらに調査する必要が/runあり/run/shmます。
ガベ。

14

/ dev / shmは安全ではありません

...アクティブなスワップがあるシステムで!コンピュータで有効になっている可能非常に高い

より良い、安全な、標準の代替手段があります— ramfs。秘密鍵、ビットコイン、イーサリアムなどの機密データramfs一時的に保存するためにRAMでバックアップされたスペースを使用する予定がある場合に使用できます。

ramfs優れてtmpfsいるため、セキュリティが懸念されている場合ramfs、データが決してスワップされません取得しますしばらくは、(物理ストレージドライブに保存された)tmpfs 入れ替えます。サードパーティは、スワップスペース検査し、機密データ抽出できます

ソリューション

ramfsマウントを準備して、非特権ユーザーがオンデマンドでマウント/アンマウントできるようにすることができます。

これを行うには、一度ルート権限が必要になります。ルート権限がない場合は、システムの管理者にこれを設定するよう依頼してください。

最初に、に行を追加する必要があります/etc/fstab。fstabの行は次のようになります。

none    /mnt/ramfs    ramfs    noauto,user,size=1024M,mode=0770    0    0
  • /mnt/ramfsramfsファイルシステムがマウントされるマウントポイントです。ディレクトリが存在する必要があります。
  • noauto オプションは、これが自動的にマウントされるのを防ぎます(例えば、システムの起動時)。
  • user 通常のユーザーがこれをマウントできるようにします。
  • sizeこの「RAMディスクの」サイズを設定します(あなたが使用することができますMし、Gここに)。
  • modeこれは非常に重要です0770このファイルシステムをマウントした8進コードはルートとユーザーのみであり、他のファイルシステムではなく読み書きできます(選択した別のコードを使用することもできますが、十分に確認してください! )。

これが完了すると、すべてのユーザーがオンデマンドでこれをマウントできるようになります。

一部のユーザーがこれをマウントすると、新しい1024 MB ramfsファイルシステムが作成され、にマウントされ/mnt/ramfs/ます。が所有しroot:userます。彼/彼女がそれをアンマウントするか、システムがリブートされると、このRAMベースのファイルシステムはすべてのデータとともに消えます。どれがかっこいいですか。

また、このファイルシステムは複数のユーザーが個別にマウントできますが、同時にはできません。つまり、次のユーザーがマウントできるように、前のユーザーはこのファイルシステムをアンマウントする必要があります。

マウントする:

mount /mnt/ramfs/

アンマウントする:

umount /mnt/ramfs/

PS rsync非rootユーザーとして、新しくマウント/作成されたramfsのルートにファイルしようとすると、rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]エラーが発生する可能性があります。ユーザーがramファイルシステムのルートを所有していないため、これは完全に正常であり、期待されています。解決方法は簡単です。/mnt/ramfs/copied/たとえば、そこにディレクトリを作成し、そこにディレクトリを作成するだけrsyncです。

PPSはDebian 9でテスト済みです。Ubuntuでも機能することは間違いありません。


10

システムにはすでに使用可能なものがあります。Glibcに基づく最近のLinuxシステムでは、/dev/shm常にtmpfsがマウントされています。

システムに1つもない場合、または小さすぎる場合、ルートによってマウントされていないファイルシステムは、ほとんどFUSEを意味します。Ubuntuでは、fuseFUSEを使用するにはグループに属している必要があります。見て可能なFUSEファイルシステム、私は見Ramfuse残念ながら上流に放棄され、。


5

通常、いいえ、ファイルシステムはルートによってのみマウントできます。ユーザーがファイルシステムを任意に配置できるようにする場合、それは基本的にそれらにルートを与えます。(簡単な方法:/ etcにマウントし、そこに独自のパスワードとシャドウを置き、作成したばかりの新しいrootパスワードでsu、アンマウントします)

特定の場所にtmpfsが必要な場合/etc/fstabは、にフラグを付けてを追加すれば、noauto,userユーザーはそれをマウントできます(ただし、自動マウントしない理由は特に明確ではありません)

ユーザーが任意のtmpfsを必要とする場合、いくつかのオプションがあります。

  • 1つのtmpfsのサブディレクトリを使用します。おそらく最良のアプローチ。おそらく、複数のtmpfsは必要ありません。
  • ディレクトリを作成し、その上にtmpfsをマウントするスクリプトを作成し、それを置いた場所に出力します。使用しsudo、ユーザーがそれを実行できるようにします。ユーザーが任意のパスを選択できないようにしてください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.