問題タブ [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.
linux - SystemTap で stapdev および stapusr グループを使用するには?
なしで実行するためにstapdev
、 andに自分自身を追加しようとしました。簡単な例を実行しようとしていますが、次のようなエラーが発生します。stapusr
stap
sudo
それを使用sudo
するとうまくいくようです:
これどうやってするの?
ノート
ubuntu 12.04 システムとインストール済みsystemtap
パッケージを使用しています
編集
unix - setuidは多数を設定します
rootを使用して、uid 9999999のsetuid関数を呼び出したプログラムを実行しました。その後、/ etc / passwdに存在しなくても、このuidを正常に設定します。では、setuidはどのようにuidを検証し、この無効なuidを設定するとどのような影響がありますか?
linux - Linux では、実行可能ファイルの場所は setuid ビットの解釈方法に影響しますか?
Linux システムでは、setuid プログラムが存在するディレクトリのアクセス許可は、カーネルがプロセスを起動する方法に影響しますか? 私が尋ねる理由は、2 つの異なるディレクトリで同一の setuid プログラムをコンパイルしたときに、実際には 1 つのディレクトリのユーザー権限しか想定していなかったからです。コンパイルしましたが、アクセスしようとしているユーザー アカウントはどこに/tmp
ありますか。から実行すると、期待どおりに権限がエスカレートされませんでしたが、下では機能しました。/home/flag03
flag03
/tmp
/home
問題の背景:
私は、exploit-exercises.com /nebula のレベル 03 に取り組んでいます。flag03
この演習では、ユーザー アカウントへのアクセス権を取得する必要があります。この演習は、flag03
ユーザーが特定のディレクトリでスクリプトを実行できるようにする cronjob を定期的に実行するように設定されています。私の計画は、それ自体が bash シェルを起動する setuid プログラムをコンパイルする単純な bash スクリプトを作成し、次に setuid ビットを で設定することchmod +s
でした。アイデアは、setuid プログラムがコンパイルされるときに、flag03
cronjob を介してユーザーによってコンパイルされるというものです。この新しくコンパイルされたプログラムが実行されると、シェルが user として起動されますflag03
。これが目標です。
以下は単純な setuid プログラムです (l3.c、レベル 1 + 2 に基づく):
これを機能させるために、bash スクリプトはプログラムをユーザーとしてコンパイルし、flag03
次に setuid ビットを chmod します。
で生成された実行可能ファイル/tmp
は権限を期待どおりにエスカレートしませんが、で生成されたもの/home/flag03
は期待どおりに機能します。
注/tmp
: にコンパイルされた setuid プログラムのバージョンを に移動し/home/flag03
、setuid ビットをリセットする新しい bash スクリプトを作成しました。そこから実行すると、そのバージョンも機能しました。そのため、setuid プログラムが存在するディレクトリのアクセス許可は、プロセスの起動方法に何らかの影響を与えているようです。多分これは/tmp
、やや「特別な」ディレクトリであることに関連していますか?
この長ったらしい質問に関心をお寄せいただきありがとうございます。
linux - setfsuid() - 結果コードを解釈する方法は?
のマニュアルページにsetfsuid()
は次のように書かれています:
成功すると、以前のfsuidの値が返されます。エラーの場合、fsuidの現在の値が返されます。
私が間違っていなければ、単に「setfsuid() は、 setfsuid() を呼び出す前に設定されていた fsuid 値を常に返します - それが成功したかどうかにかかわらず」と言うことができます。
私の仮定は正しいですか?
もしそうなら、関数がない ことに注意してgetfsuid()
、呼び出しが成功したかどうかを確認するにはどうすればよいですか?
setfsuid()
簡単で醜いハックとして、2回呼び出して2回目の呼び出しの戻り値を使用することしか考えられません...
linux - issetugid の目的は?
のマニュアルページによるとissetugid
、呼び出しは次のいずれかになるはずです。(1) uid/gid の変更を警告する。または (2) 汚染された環境の可能性を警告します。関数名は、3 つ目の目的を示唆しています。
最初の質問: 目的は何ですか?
利用可能な実装を調べると (たとえば、Linux カーネルは API を提供しないため、Linux システムではライブラリとして)、次のことがわかります。
Solaris では、次のようになります。
私は少し疑わしいですが、それは部分的には、BSD、Linux、Unix、Solaris など、すべてのプラットフォームで関数がどのようなもので、どのような関数が返さgeteuid
れるのかを理解するのが難しいためです。getegid
2 番目の質問: Linux コードは意味的に Solaris コードと同等ですか?
3 番目の質問: はプラットフォーム間で同じようgeteuid
に実装されていますか? getegid
リアル、効果的、節約という 3 つの ID の遊びがあるシステムについてはどうですか?
4 番目の質問: ここで重要なのは実効 ID だけですか?
プロセスが UID = 0 として開始され、一時的に権限が失われた場合、saved
ID が影響を及ぼします。root を一時的に削除するプロセスは、汚染する必要exec
はなく、汚染するべきではありません。
5 番目の質問: root を一時的に削除するプロセスは汚染されていますか?
6 番目の質問: 有効な ID が保存された ID であるプロセスは汚染されていると見なすべきですか?
passwords - Web ページから setuid プログラムにアクセスする
学生がプログラミングの課題をチェックインし、成績を表示するために使用する setuid ページがあります。一般的な使用方法は次のとおりです。
ユーザーは、部門のマシンにアカウントを持っている必要があります。さらに、誰でもチェックイン/グレードを実行できますが、特定のクラスにも登録されている場合にのみ機能します。
学生は、タブレット/スマートフォンのブラウザから自分の成績にアクセスできるようにすることを要求しています。次のようなphpページのようなものを検討していました
ただし、これはエラーメッセージで失敗します
実行が実際に学生として行われるように、sudoの代わりにsuを使用したいと思います。Web ページでは学生がログインする必要があるため、学生の ID/パスワードにアクセスできます。これを行う方法の提案はありますか?
チェックイン プログラムは、提出されたファイルを部門のマシンにコピーし、学生としてチェックインを実行する必要があるため、Web ページから実行する場合はもう少し手間がかかります。一部の学生はファイルを学部のマシンに ftp で送信し、チェックインに ssh を使用することに消極的であるように思われるため、これを検討しています。
十分にデバッグされている既存のプログラムをラップして、学生がシェルまたは Web から機能にアクセスできるようにしたいと考えています。
ありがとうございました。
android - Galaxy s4 で setuid が PermissionDenied で失敗する
Android用のcでsetuidプログラムを作成しようとしています。Android 2.3-4.2 でテストしたところ、Samsung Galaxy s4 (i9500) を除くすべてのデバイスで正常に動作します。
CF-Auto-Root を使用してデバイスに su をインストールしたところ、正常に動作しました。しかし、私のアプリはうまくいっていません。
mysu をシステム ディレクトリにインストールし、すべての権限を設定しました。
そして、それはChainfireのsuについてです:
Selinux は許容モードです。
mysu では、シェルを呼び出す前に setuid と setgid を使用しますが、Galaxy S4 では失敗します。
私は何を間違っていますか?setuid と setgid を除いて、Chainfire の su は何をしますか?
c++ - setuid ビットがオンになっていますが、プログラムはスーパーユーザー ファイルを開くことができません
superuser.cpp
アクセス許可を持つスーパーユーザーによって作成されたファイルがあります770
。ここで、スーパーユーザーは、.cpp と setuidDemonstration.cpp のオブジェクト ファイルをsetuidDemonstration.cpp
使用して、superuser.cpp を開いたファイルを作成します。今、私の質問は: -open("superuser.cpp", O_RDONLY).
rwxrwxr-x
setuidDemonstration プログラムを実行したところ、通常モードとスーパーユーザー モードの両方で、superuser.cpp を開くことができませんでした。なんで?少なくとも、スーパーユーザーモードで開くには成功しているはずです。
今、私はそうします
sudo chmod 4775 setuidDemonstration
。これにより、実行時に setuid ビットが設定されているため、実行中にスーパーユーザーの euid を取得するため、プログラムは通常モードでも superuser.cpp を開くことができますsudo chmod 4775 setuidDemonstration
。しかし、それはできませんでした。また、通常モードから実行中にeuidを印刷すると、印刷され1000
ず0
. なんで?
更新: 間違いを指摘していただきありがとうございます。ファイル パスから「/」を削除したところ、スーパーユーザーでも機能するようになりました。しかし、sudo chmod 4775 setuidDemonstration の後でも、通常モードの実行プログラムはファイルを開くために失敗します。説明してください。