web-dev-qa-db-ja.com

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

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

完全にメモリ内にあるディレクトリが欲しいのですが。 root権限がなくても可能ですか?

44
bitmask

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

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

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

当然、ここに配置されたファイルは再起動後も存続しません。マシンがスワッピングを開始した場合、/dev/shmは役に立ちません。

/dev/shmに対応するSolarisは/tmpで、これは「スワップ」タイプのパーティションであり、メモリベースでもあります。 /dev/shmと同様に、Solarisでは任意のユーザーが/tmpにファイルを作成する可能性があります。

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

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

52
gabe.

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

...アクティブなシステム スワップ !可能性は非常に高いお使いのコンピュータで有効になっています。

より良いsecureの標準的な代替手段— ramfsがあります。 RAMでバックアップされたスペースを使用してtemporary秘密キー、ビットコインなどの機密データを保存する場合は、ramfsを使用することができますまたはEthereumウォレットなど。

ramfsデータneverがスワップされるため、セキュリティが懸念される場合、tmpfsramfsよりも優れています(物理ストレージドライブに保存されます)、tmpfsmayがスワップされます。その後、サードパーティはスワップスペースを検査でき機密データを抽出できます

ソリューション

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

これを行うには、root特権、once特権が必要です。 root権限がない場合は、システムの管理者にこの設定を依頼してください。

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

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

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

一部のユーザーがこれをマウントすると、新しい1024 MB ramfsファイルシステムが作成され、_/mnt/ramfs/_にマウントされます。 _root:user_が所有します。マウントを解除するか、システムを再起動すると、このRAMベースのファイルシステムはvanishallそのデータ。かっこいいです。

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

マウントする:

_mount /mnt/ramfs/
_

アンマウントするには:

_umount /mnt/ramfs/
_

追伸root以外のユーザーとして新しくマウントまたは作成されたramfsのルートにrsyncファイルを保存しようとすると、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を作成します。

P.P.S. Debian 9でテスト済み。Ubuntuでも動作することを確認してください。

P.P.P.Sはるかに安全ですが、RAMベースのストレージはコールドブート攻撃 などのいくつかの精巧な攻撃に対して依然として脆弱です。したがって、データのセキュリティに真剣に取り組んでいる場合は、PC /ラップトップを安全に物理的に保護し、ケースとメモリスティックをロックしてください。 RAMがマザーボードに直接はんだ付けされているコンピューターを使用することを検討してください(ほとんどの上位層のウルトラポータブルラップトップの場合です)。また、意図しない場合はコンピューターを完全にシャットダウンすることを検討してください。スリープ/ハイバネーション機能を完全に無効にすることさえできるかもしれません。

16

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

システムにファイルシステムがないか、またはシステムが小さすぎる場合、ルートによってマウントされていないファイルシステムは、ほとんど Fuse を意味します。 UbuntuでFuseを使用するには、Fuseグループに属している必要があります。 利用可能なFuseファイルシステム を見ると、残念ながら上流に捨てられている Ramfuse のみが表示されます。

一般に、ファイルシステムはルートによってのみマウントできます。ユーザーがファイルシステムを任意に配置できるようにする場合、それは本質的にユーザーにルートを与えることになります。 (簡単な方法:/ etcに1つマウントし、そこに独自のpasswdとshadowを置き、作成した新しいrootパスワードでsuを実行し、マウントを解除します)

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

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

  • 1つのtmpfsのサブディレクトリを使用します。おそらく最良のアプローチです。おそらく、複数のtmpfsは必要ないでしょう。
  • ディレクトリを作成してその上にtmpfsをマウントするスクリプトを作成し、それを置いた場所に出力します。 Sudoを使用して、ユーザーが実行できるようにします。必ずnotを実行して、ユーザーが任意のパスを選択できるようにします。
5
derobert