私はUbuntu 14.04で作業しており、コンパイルされたC ++アプリケーションを持っています。 「program」という名前の実行ファイルを取得します。問題は、このプログラムがopencvとソケットを使用していることです。したがって、端末で次のように実行しようとすると:
./program
次のエラーが発生します。
listener: socket: Operation not permitted
setsockopt: Bad file descriptor
ソケットを使用していてアプリケーションをrootとして実行する必要があるため、このエラーが発生しました。だから、次のように入力しました。
sudo ./program
これには、私のパスワードとプログラムの作業属性が必要です。
問題は、Ubuntuを起動するときにこの「プログラム」が自動的に実行されるようにしたいが機能しないことです。他のアプリケーションがありますが、名前は「カメラ」です。ソケットなしでopencvのみを使用するため、rootとして実行する必要はありません。そのため、このアプリをUbuntuのスタートアップアプリに入れたところ、「Camera」アプリが問題なく最初からすぐに起動しました。
それでは、Ubuntuでソケットを使用するアプリケーションを自動的に起動する方法は?
私はこれを試みます:
sudo chown root:root ./program
sudo chmod a+s ./program
ところで、私のプログラムはビデオを使用しているので、ビデオを見ようとするとプログラムは停止します。私のプログラムにはセキュリティホールがないため、バッファオーバーフローの脆弱性などに脆弱です。
基本的に、問題なくプログラムを起動する方法だけを知ることができます。
答え1
RecvRawEth.c
上記のコメントに投稿したファイル名で見ると、生ソケット(SOCK_RAW
)を使用しようとしていると推測されます。これいつもネイティブソケットには、次のような他のセキュリティメカニズムをバイパスする可能性があるため、プログラムをrootとして実行する必要があります。特権ポート。
このアプリをもう一度考えてください。非常に生のソケットを合法的に要求するプログラムはほとんどありません。ほぼ常により良い方法があります。
考慮すべき少なくとも2つの追加の問題があります。不正な食べ物Stack Exchangeタイプのサイトではとにかく解決します。
設定値
root
実際に誰が起動したかに関係なく、rawソケットを実行中としてマークして、
root
rawソケットの制限を解決しようとしています。これを行うと、1つ以上のセキュリティの脆弱性が発生する可能性があります。私を信じなさい。数十年間のUnixの歴史を見ると、複雑なsetuidroot
プログラムには悪用可能な問題がある可能性が高いです。これをすべて見つけて削除するには数年かかることがあります。絶対にネイティブソケットを使用する必要があるため、プログラムの一部の要素をrootとして実行する必要がある場合は、限られた範囲で作成することをお勧めします。悪魔。つまり、プログラムをできるだけ小さくし、これを実行するのに必要な最小限のタスクのみを実行し、結果
root
情報を一般権限で実行されるプログラムにエクスポートするために必要なすべてのタスクを実行します。新兵
デーモンを作成する場合は、システムの起動時に実行するように設定するのは簡単です。デーモンを生成する方法を示す良いチュートリアルでこの内容を取り上げます。 Ubuntuではこれが処理を意味すると信じています。
systemd
。GUI部分は次のとおりです。セッションの開始にこれを追加。