問題タブ [linux-capabilities]
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 - ubuntuとlibcap(機能)の未定義の参照
私はubuntu10.10で次の最小限のCコードをコンパイルしようとしています:
これにより、次のエラーが発生しgcc -lcap test.c
ます。
libcap2-devとlibcap2-bin、バージョン2.21をインストールしています
同じgccコマンドを使用した同じコードがarchとgentooで正常にビルドされます
それをubuntu上に構築するにはどうすればよいですか?
c++ - アプリケーションのネットワーク機能
LinuxコンピューターでC++でアプリケーションを開発するのに忙しいです。アプリケーションは、イーサネットアダプタとネットワークを使用するサードパーティのライブラリを使用します。ライブラリは、GigEVisionカメラのライブラリです。起動時に、アプリケーションはカメラへの接続を試み、カメラに関する情報を返します。その後、アプリケーションへのビデオのストリーミングを開始します。
しばらくすると、アプリケーションはカメラに接続したり、カメラからカメラ情報を取得したりできなくなりましたが、root(sudo)としてアプリケーションを実行すると問題が解決します。
私は図書館の供給者に連絡しました、そして彼らは私が以下をするべきであると示しました:
rootとして実行するとシステムのセキュリティが損なわれると感じるユーザーは、次の実装で十分だと感じるかもしれません。
- 実行可能所有者をrootとして設定します。
- 実行可能ファイルに「setuid」権限ビットを設定します
- コードでは、アプリケーションの起動時にcapset()を使用して、次の権限を除くすべての権限を解放します。CAP_SYS_NICE、CAP_NET_ADMIN、CAP_NET_BROADCAST、CAP_NET_RAWアプリケーションはすべてのroot権限で起動しますが、起動後すぐに削除されます。
これは機能しますが、実行可能ファイルを変更せずにこれを行う別の方法はありませんか?これらの特権にアクセスできるグループにユーザーを追加することを考えています。助けていただければ幸いです。
上記のソリューションは、コンパイルのたびに所有者を変更して権限を設定する必要があるという意味で最適ではありません。このアプリケーションは、ビデオの録画と画像のキャプチャに使用されます。前述のソリューションでは、これらの記録とキャプチャもrootユーザーが所有しているため、ファイルを配布するときにユーザーを元に戻す必要があります。
OS:Ubuntu Linux 11.10環境:Qtを使用したC ++
linux - Linux機能(setcap)はLD_LIBRARY_PATHを無効にしているようです
LD_LIBRARY_PATH
アプリケーションの特定のユーザーライブラリのパスを設定するために使用します。しかし、このアプリケーションに機能を設定すると
その後、LD_LIBRARY_PATH
無視されているようです。プログラムを起動すると、Linuxは特定の共有ライブラリが見つからないと文句を言います。
拡張された権限を持つアプリケーションが乗っ取られるのを防ぐために、何らかの保護が機能していると思います。回避策はありますか?
c - CAP_IPC_OWNERのLinux機能をlimits.confに追加するにはどうすればよいですか?
私は次のような/etc/security/limits.conf
ファイルを持っています
ここで、ユーザー「manu」がshmctl
必要な機能を使用できるようにしたいのですCAP_IPC_OWNER
が、この機能を持つようにこのファイルを変更するにはどうすればよいですか?出来ますか?
c - setuid() 後に機能を失う
cap_setgid
、cap_setuid
、を設定しようとしていcap_setpcap
ます。
実行は root ユーザーで行っています。プログラムをトレースすると、これが示されます
権限は設定されていますが、機能しません。この問題を解決する方法はありますか?
更新:prctl
コードに追加
だから今は
キャップは の後に継承されsetuid
、手動で設定されたキャップはまだ存在しますが、問題は解決しませんでした
UPDATE2: 理解できません。setuid
キャップを確認するために、1st の後に 2strs を追加しました。
それは戻った
有効なフラグは設定されていませんが、cap_set_flag は 0 を返しました
linux - FUSE ファイル システムを介した Linux 機能
私は、次のようにコーディングgetxattr
した FUSE ファイルシステムを持っています。setxattr
と
私はこれをテストしましたが、機能を除いて非常にうまく機能します。 setcap を使用してプログラムの機能を設定して実行すると、プログラムは特権作業を実行できません。getcap にもかかわらず、以前に設定した機能が返されます。
誰かが問題を追跡する方法を教えてくれますか、または何が起こっているかについての指針を教えてくれますか?
c - CAP_SYS_NICE を保持しながらルート UID を削除
setuid ビットを使用してルートとして起動するデーモンを作成しようとしていますが、すぐにプロセスを実行しているユーザーに戻ります。ただし、デーモンは、新しいスレッドを「リアルタイム」優先度に設定する機能を保持する必要があります。優先度を設定するために使用しているコードは次のとおりです (スレッドが作成されると、スレッドで実行されます)。
ただし、私が問題を抱えているのは、上記の呼び出しを行う機能を保持しながら、uid を設定することsched_setscheduler
です。
アプリケーションのメイン スレッドで、起動間際に実行されるコードがいくつかあります。
sched_setscheduler
問題は、このコードを実行した後、上記のコメントで示唆されているように、呼び出し時に「操作が許可されていません」というメッセージが表示されることです。私は何を間違っていますか?
c - setuid/capabilitiesを使用したstdbuf
出力を生成する別のプロセスからの出力を読み取っています(低速で無限)。このデータをリアルタイムで読み取りたいので、「stdbuf -oL」(行バッファー、データはテキスト)を使用します。生成プロセスを制御できないため、ソースを変更して強制的にフラッシュすることはできません。
これまでのところ、stdbufは問題なく動作しますが、プロセスはSOCK_RAWを使用し、rootとして実行するか、setuid(0)またはcap_net_raw
機能を備えている必要があります。setuidまたは機能を使用して非rootとして実行している場合、stdbufは無視されるようです。問題を説明しましょう:
これは単純なライターです。
そして簡単な読者:
予想通り、実行./writer | ./reader
してもバッファがいっぱいになるまで何も表示されません。プリペンディングstdbuf -oL
はラインバッファリングを有効にし、リーダーにラインを取得します。
しかし、追加すると機能cap_net_raw+ep
しなくなります。
setuidを使用した場合も、同じ動作が見られます。
これが発生する理由と、rootとして実行せずにstdbufを引き続き使用する方法を理解することに興味があります。setuidが舞台裏で何をしているのか完全には理解していないことを認めます。
linux - Linux の機能とゼロ/非ゼロの UID との関係は?
機能のマンページはかなり長く、いくつかのことを完全には理解していません。
たとえば、CAP_NET_RAW にアクセスできるかどうかを決定する関数はどのように見えるでしょうか?
入力:
- a = 実効 uid は 0
- b = 0 であるいくつかの実際の/保存された/任意の uid があります
- c = CAP_NET_RAW は +e
- d = CAP_NET_RAW は +i
- e = CAP_NET_RAW は +p
- f = CAP_NET_RAW は「境界セット」から除外されます
出力:
- x =
socket
EPERM を取得せずに呼び出すことができるようになりました - y = いくつかのトリッキー (ファイルシステムベース
chmod +s
またはsetcap
アクセス昇格、外部ヘルパーへの接続を含まない) の後、たとえば、capsetp
最終的に raw ソケットを開くことができるようになります。
私が現在理解しているように、それは次のようなものです:
- x = !f && (a || c)
- y = !f && (b || a || c || e)
実際にはどうですか?
linux - ファイルシステムベースの機能が欠落しているにもかかわらず、機能を保持しながらプロセスを実行するにはどうすればよいですか?
setuid
ファイル「+p」機能なしで、一般にPR_SET_NO_NEW_PRIVSを設定したときに無効になるものなしでシステムを使用できるようにしたい。
このアプローチ(init
セットPR_SET_NO_NEW_PRIVS
およびファイルシステムベースの機能の昇格は不可能)では、機能を「補充」することはできず、機能を「飛び散らせ」ないように注意する必要があるだけです。
execve
付与された機能を「飛び散らせる」ことなく(新しいプログラムのファイルがである場合など)、他のプロセスを実行するにはどうすればよいですsetcap =ei
か?「私は自分自身を信頼するので、この新しいプロセスを信頼します」。たとえば、機能がユーザーに与えられます(そして、ユーザーは自分が開始する任意のプログラムでそれを実行したいと考えています)...
ファイルシステム全体を永続的に作成できます=ei
か?ファイルシステムがスキームに干渉しないようにし、機能を付与または取り消すことができないようにしたい。親->子のものを通してすべてを制御します。