問題タブ [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.
python - os.setuid( ) 使用時の「操作は許可されていません」 [python]
いくつかのスクリプトを起動するためのプラットフォームを構築しようとしています。このスクリプトは、各ユーザーのホーム フォルダーに配置されます。すべての起動は各ユーザー ID で行う必要があるため、ユーザーごとに次のようにしています。
しかし、Python がそれを行おうとすると、次のos.setuid( user_id )
例外が発生します。
ちなみに、このスクリプトを起動するユーザーは root グループ (GNU/linux OS 上) に属しており、すべての root 権限を持っています。
root ユーザーで同じコードを起動しようとすると、別のエラーが発生します。
誰かが何が起こっているのかを理解するのを手伝ってくれるなら...
setuid - root以外のユーザーが所有するsetuidプログラム
rootが所有している場合にのみ期待どおりに実行されるsetuidプログラム(getpwd)があります。
言い換えれば、私のプログラムがユーザー「alice」によってコマンドラインで実行されると、すべて正常に動作します
プログラムはディレクトリ内のファイルを開き/home/secure
、内容を画面に出力します。
ただし、ファイルの所有権を変更してsetuidを設定すると、次のようになります。
ユーザー「alice」として実行した場合、プログラムは実行されません。
なぜこうなった?
perl - perlスクリプト内でsetuidperlスクリプトを実行する
私は2つのperlスクリプトを持っています:
getPwd.pl-パスワードを返すsetuidperlスクリプト
sub getOraPwd {... return getOraPwd; } getOraPwd();
testDBConn.pl
testDBConn.plスクリプトでgetPwd.plを呼び出し、getPwdスクリプトの結果を$ password変数に割り当てて、データベースに接続したいと思います。getPwd.plスクリプトはsetuidであるため、testDBConn.plがgetPwd.plを実行するように設定されていることに注意してください。
例えば。
iphone - setuid iPhone アプリで MobileSubstrate をロードする
iPod touch (Installer4) に root アプリがあり、MobileSubstrate をロードして、バグを修正するための微調整を開始できるようにしたいと考えています。ルートアプリには、アプリがクラッシュすることなく6755のアクセス許可を設定できる中間実行可能ファイルがあることを知っています。インストーラーの場合、Scytheという名前です。execve() で MobileSubatrate をロードする新しいものを作成しようとしましたが、成功しませんでした。アプリはクラッシュせず、ルートのままですが、MobileSubatrate はロードされません :/ (Activator が機能しないため、これはわかっています)。
これが私の Scythe.c です (Icy の Trichlorotrifluoroethanol.c に基づく) :
ご覧のとおり、execve() で dylib をロードする方法を調べたところ、LD_PRELOAD と LD_LIBRARY_PATH が見つかりましたが、どちらも機能していません。そして、dlopen("/Library/MobileSubstrate/MobileSubstrate.dylib", RTLD_LAZY) を実行するためのインストーラーのソース コードを持っていません。
誰かが問題を解決してくれることを願っています。
c++ - rootとして実行しているときにユーザーのロケールを取得するにはどうすればよいですか?
私はrootとして実行していますが、ユーザーのuidがあります(例504
)。ユーザーのロケール(私の場合en_GB
)をどのように計算できますか?以下は機能しません。
これは私のために出力en_US
します。
python - Pythonスクリプトのsetuidビット:LinuxとSolaris
Linux と Solaris の両方で、権限のないユーザーとしてこの小さな python スクリプトを実行しています。
実行する前に、スクリプトで setuid ビットが設定されます (Python インタープリターでは設定されません)。
Solaris では、setuid ビットにより有効な uid が設定されます。
ただし、Linux ではありません:
Python のバージョンは、Solaris と Linux の両方で 2.6 であることに注意してください。
Python Linux を Python Solaris として動作させることは可能ですか?
linux - ファイルの所有者:グループは場所 /proc/ で変更されません/ setuid() の後?
プロセスをルートとして生成し、その権限をルート以外のユーザーにドロップする必要があったため、これを実装するためにバイナリに setbit を使用し、所有者をルートに変更しました。次に、プロセスを非ルートユーザーとして生成し、最初は root として開始しました。必要なタスクを実行した後、 setuid(getuid()) 呼び出しを使用してその権限を非ルートユーザーにドロップしました。これで何が起こるかというと、場所 /proc/(pid)/ にあるすべてのファイルの所有者:グループはルート:ルートのままです。私のプロセスによって生成されたスレッドが原因です(特権を削除した後)。/proc/(pid)/exe でアクセスを拒否してください。setuid が owner:group をファイルの場所 /proc/(pid) に設定しない理由を知っている人はいますか?
linux - Linux 2.6 / IBM DB2 v9.7 で「db2 connect to table」を使用して csh スクリプト専用のユーザー/パスワードを設定する
「db2 connect to < table >」コマンドを使用して db2 データベースに接続する従来の csh スクリプトが多数あります。「db2 connect to < table > user < user > using < password >」を明示的に使用しないため、接続はスクリプトを実行しているユーザーにデフォルト設定されます。
db2 接続を、csh スクリプトを実行しているユーザー アカウントから専用の db2 アカウント (「dblegacy」と呼ばれる) に変更したいと考えています。
rootとしてロード/実行し、cshスクリプトを実行する前にアカウントを「dblegacy」に変更するラッパー実行可能ファイルを作成しようとしました。唯一の問題は、Linux (ld.so) が setuid() アカウントを「dblegacy」に変更した後にロードされたすべてのスクリプト/ファイルから LD_LIBRARY_PATH 環境変数を削除することです。もちろん、csh スクリプトには共有ライブラリが必要です。
したがって、「db2 connect to table」でこの「dblegacy」アカウントを使用またはデフォルトにする方法が必要です。
linux - RealUID、保存されたUID、有効なUID。どうしたの?
これはset-root-uidプログラムです
ソースコード:
出力
私の質問
マニュアルページには、setuidが実際の保存された有効なuidを変更すると記載されています。したがって、呼び出し後、setuid(1000)
3つすべてがに変わり1000
ます。どのようにsetuid(0)
私を変えましょeuid
う0
?
linux - ELF での set-uid と、INTERP (動的リンカー) の相対パスに関するセキュリティの問題
ELF バイナリの INTERP セクションでの set-uid と相対パスの組み合わせは非常に危険です。
この問題をどこでどのように報告すればよいかよくわかりませんが、Linux/glibc での動的リンクがどのように機能するかに関する一般的なセキュリティ問題のように思われるので、それが何であるかを説明させてください。
動的にリンクされたバイナリを構築し、(--dynamic-linker gcc オプションを使用して) ELF INTERP セクションで相対パスを指定することを検討してください。これにより、動的にリンクされた商用アプリケーション (静的にリンクすることが許可されていない場合) でカスタム glibc バージョンを再配布できます。 LGPL glibc に反対しますが、異なる glibc バージョンを持つ異なる Linux ディストリビューションでバイナリを機能させる必要があります)。
バイナリをルートに chown し、バイナリに set-uid フラグを設定すると、実質的にルートキットになります。別のディレクトリから実行すると、ルート権限で実行される動的リンカーの実行可能ファイルを置き換えることができます。
これを実証するには、次の C コード (issue.c) を見てください。
このようにset-uidバイナリを実行すると
またはこれを行うだけでも
あなたが期待するものを得る代わりに、例えば:
あなたが得る:
ポイントは、ld-linux-x86-64.so.6 バイナリを好きなものに置き換えることができるということです。
RPATH の $ORIGIN を解決しないか、set-uid フラグが設定されている場合は LD_LIBRARY_PATH を無視することで、同様の問題が解決されたようです。
したがって、set-uid フラグが設定されている場合 (つまり、デフォルトのダイナミック リンカ - /lib32/ld-linux.so.2 または /lib64/ld-linux-x86- を使用する場合) は常に、ELF のINTERP を無視する必要があるのではないかと思います。 64.so.2)?
では、これはどこで修正または報告する必要があると思いますか? glibc またはカーネルで?