問題タブ [setuid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - seteuid(0) の後に呼び出すと popen が失敗する
私のCコードは
seteuid(0) で呼び出しても失敗します。(実行可能ファイルは setuid をオンにしています)。
seteuid と popen は連携していないようです。
popen が呼び出されると、stderr に次のメッセージが出力されます
つまり、popen は「成功」しますが、新しいシェルが作成されるため、アクセス許可が維持されず、ユース ケースは失敗します。
どうすれば問題を解決できますか?
c - root以外のユーザーのプログラムでsetuidビットを設定するにはどうすればよいですか?
setuidビットを設定してPythonスクリプトを実行可能にしようとしています。ユーザー'bgmc'に属するプログラムは、ディレクトリ'/ home / bgmc'にいくつかのファイルを作成する必要がありますが、別のユーザー'client'によって呼び出されます。確かに、私はユーザー「クライアント」がプログラムによって作成されたファイルを変更することを望んでいません。c-wrapperを使用してプログラムを呼び出しました(シェルスクリプトのsetuidを参照)。
プログラムのsetuidビットをオンに設定しました。c-compiledプログラムがrootに属する場合、プログラムは正常に実行され、期待されるファイルを作成します。cでコンパイルされたプログラムのプロパティは次のとおりです。
ただし、myprogramのユーザーグループをbgmc:bgmcに変更すると、プログラムはファイルを作成できなくなります:「アクセスが拒否されました」。行を変更しようとしました:
と:
1002は'bgmc'のユーザーIDであるため(これにはコマンド "id -u bgmc"を使用しました)、これは役に立ちませんでした。
私はむしろプログラムへのrootアクセスを与えたくない。これを防ぐ方法はありますか?
ios - NSUserDefaults Proofread を使用した UISwitch 状態の設定/保存
ジェイルブレイクされたデバイスの開発。
私はここで私の問題に対する解決策を探しました。UISwitch の状態を保存するために NSUserDefaults を使用していますが、多くのコードが機能しないと人々は言います。
UISwitch を使用して、iOS の起動デーモンをロード/アンロードしています。私は非常に近くなりましたが、スイッチの状態は保存されません。これは私が使用しているコードです。
ブール値はアプリの plist に書き込まれます。私は自分が何を間違えたのか分からないようです。運が悪いオーバーフローに関する質問からいくつかの例をつなぎました。コマンドが失敗しても、スイッチは保存する必要があります。
誰かが説明して、何を編集する必要があるかを教えてください。これは私を完全に夢中にさせています。
c - setreuid 呼び出しがプロセス許可の再確立に失敗する
私はsetreuidと少し混乱しています。
シナリオ: プロセスは通常のユーザー (id: cateof) として実行されますが、ごく短時間、root として実行する必要があります。アクセス許可を cateof から root に昇格させてから、通常のユーザーに戻す必要があります。私が最初に考えたのは、「ルート呼び出し」を setreuid(0, 0); の間にネストすることでした。および setreuid(ruid, euid); 十分でしょうが、私は間違っていました。通常のユーザーに戻る唯一の方法は、「root 呼び出し」の後に setreuid(ruid, euid) を生で 2 回呼び出すことです。
コードは次のとおりです。
最後の行でsetreuid(geteuid(), getuid())を呼び出さないと、プロセスはルートとして実行され続けます。なぜ私はそれを2回呼び出す必要があるのですか???
c - main から execv に argv を渡すことはできますか?
このexecv()
関数は、終了文字列の配列を想定NULL
していますが、引数の数を取りません。番兵値 (NULL
ポインター) を使用して、配列がいつ終了するかを判別します。
execv()
州のマニュアルページ...
最初の引数は、慣例により、実行中のファイルに関連付けられたファイル名を指す必要があります。ポインターの配列は、NULL ポインターで終了する必要があります。
...だから私の質問は....
argv
frommain()
をに渡したいexecv()
。
main に入る argv が NULL ポインターで終了していると確信できますか? つまり、サイズ+ 1argv[argc] == NULL
の独自の配列を割り当ててインデックスを配置する必要があると確信できますか?char*
argc
NULL
argc
安心できる場合、それはどこかに文書化されていますか?
ありがとう、〜エリック
c - setgid()が失敗します-操作は許可されていません
Cでsetuidプログラムを作成しました。実行可能ファイルは次のようになります。
プログラムをとして実行しuserA/users
、uid/gidをに設定しようとしuserB/otherUsers
ます。setgid()
操作が許可されていない状態で失敗します。userA
効果的なgidを変更するにはotherUsers
どうすればよいですか?
[編集]これが私がしたことの簡単な要約です。userAとして実行される私のCプログラムは、uidとgidをuserBに設定し、ファイルを作成します。予期しないことに、失敗したため、ファイルはグループルートに属していsetgid()
ます。
c - fork()の後にsetuid()を使用する
さまざまなユーザーのリクエストを処理するサーバーがあります。クライアントに接続した後、子プロセスをフォークsetuid()
し、クライアントユーザーに切り替えるために使用します。親のuidも設定しているように見えます。
子プロセス専用のuidを設定するにはどうすればよいですか?
[編集]私はすべてを小さな例にまとめましたが、うまく機能しています。でヒントをありがとうfork()
;
c - setuidプログラムのデバッグ/setuidを使用した「アクセスが拒否されました」
これは実際には3つの部分からなる質問であり、以下で説明しますが、質問は次のとおりです。
- gdbを使用して、root権限でプログラムの一部を実行し、残りを通常で実行するにはどうすればよいですか?
- mkstempを使用してsetuid(ルートへ)プログラムの/ tmpにファイルを作成すると、「許可が拒否された」のはなぜですか?
- 「sudoprogram_name」は、setuidをrootに設定した./program_nameとは異なる動作をするのはなぜですか?
Linux(複数のディストリビューション)で実行されているCプログラムがあり、通常は通常の特権を持つユーザーによって実行されますが、プログラムの一部はroot権限で実行する必要があります。このために、私はset-UIDフラグを使用しましたが、それは問題なく機能します。
しかし、今度は通常のユーザー権限でプログラムをデバッグしたいのですが、キャッチ22があります。一時ファイル(/ tmp / my_name-XXXXXX)を作成する関数を追加しました。この関数は、プログラム内の多くのポイントから呼び出されます。何らかの理由で、この関数は実行時に次のメッセージを発行します。
(もちろん、実際の名前は異なります。)それでも、プログラムは、root以外のユーザーが実行できないことを私が絶対に知っているrawソケット関数を実行できます。(setuidフラグを削除すると、プログラムは無残に失敗します。)
sudoを使用せずにgdbを介してこのプログラムを実行すると、rawソケットのもので停止します(gdbはプログラムのsetuidフラグを尊重しない、またはおそらくできないため)。「sudogdb」で実行すると、すべて正常に動作します。「sudo./my_name」として実行すると、すべて正常に動作します。
そのプログラムのls-l出力は次のとおりです。
だから私の質問は、順不同です:
- (どのように)gdbの下で異なる有効なUIDを使用してプログラムの異なる部分を実行できますか?
- ./programがrootに設定されているのに「sudo./program」が「./program」と異なるのはなぜですか?
- setuid(rootへの)プログラムで通常のユーザーによって呼び出されたときにmkstempが失敗するのはなぜですか?
c++ - C++ で root 以外のユーザーに UID を設定する
Ubuntu 11.04 の NetBeans 6.9 で C++ で開発しています。root ではなくユーザー "peter" として呼び出されたい system() 呼び出しを行っています。という事は承知しています
ユーザーをルートに設定しますが、ユーザーをピーターに設定するにはどうすればよいですか?
ありがとう、ピーター。
c - Linuxでsetgidとsetuidを呼び出した後、グループに属するファイルにアクセスできません
新しいグループとユーザーを追加して、システムグループに追加しましょうvideo
ファイルを作成し、その所有者をルートに変更し、グループをに変更しますvideo
setgid()
ここで、とを使用してCで記述された単純なアプリケーションについて考えてみます。setuid()
コンパイル後、通常のユーザーとして実行できます。
setgidへのアクセス許可がないため、失敗します。mydaemonとして直接実行します。
setgid
結構です、私はできますsetuid
(私は同じユーザーです)そして私は期待通りにファイルを開くことができます
次に、rootとして実行します。
私はできるしsetgid
、 mydaemonとして実行していると言いますがsetuid
、ファイルを開くことができません。(errno 13はEACCES:許可が拒否されました)getgid
getuid
問題はどこだ?