
シェルは~
ホームディレクトリに展開できます。 $HOME
通常、同じ処理があるがこれらの拡張をサポートしない可能性があるコンテキストで現在のユーザーのホームディレクトリを参照することがよくあります。
私のプロフィールはうまく$HOME
いきますが、うまく~
いかず、その逆も同じです。
ヒューズが次のようなものを提供できると思います/var/myself
->$HOME
これにより、構成ファイルに値を入れて、次の項目を指すことができます。/var/myself/backdrops/pornography/wtf/yarly.jpg
すでにそのようなことがありますか?そうでなければ、このようなことが起こってはならない正当な理由はありますか?
答え1
あなたの懸念を理解していますが、答えは「いいえ」です。そんなことはありません。
一般的なアプローチは、オペレーティングシステムにユーザーのホームパスを要求するか、$ HOME変数を取得することです。
これらすべてのオプションには、常にアプリケーションの一部のコーディングが必要です。 Bashのような多くのアプリケーションは「エイリアス」を提供します〜(open(2)ではそれを翻訳しません)。
もちろん、この目的のためにvfsまたはヒューズモジュールを使用することができます。やるべきことがあるかもしれないので尋ねなければなりません!
しかし、本当に必要ですか?次の回避策を使用できます。
$HOMEを相対パスまたは既知の場所にリンクするプログラムを起動するスクリプトを作成します。
pam_exec を使用して $HOME ディレクトリを既知の場所に接続します。http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-pam_exec.html
答え2
1つの秘密(少なくともLinuxでは)は、$HOME
アプリケーションを実行する前にディレクトリを変更してから構成/proc/self/cwd/...
ファイルで使用することです。
答え3
ほとんどのプログラムでは、コマンドラインから設定ファイルへのパスを指定できます。したがって、標準設定ファイルを使用してフィルタリングして、$HOME
現在のユーザーなどのエントリを置き換えてから、変更された一時設定ファイルをプログラムに渡すラッパーを作成できます。
答え4
要求しているユーザーのpidを取得し、システムにホームディレクトリを要求できます。だから可能です。
しかし、SUIDのないプログラムがFSを静的であると仮定しているかどうかはわかりません。
編集する:
struct fuse_context *ctx = fuse_get_context ();
struct passwd pwd, *ppwd;
char buffer[1024];
int status = getpwuid_r (ctx->ui, &pwd, buffer, sizeof(buffer), &ppwd);
if (status == 0) {
if (ppwd == NULL) {
// No record found
} else {
// Handle record
}
} else {
// Handle error
}
上記のコードは理想的ではありませんが、一般的な状況では機能します。