Linuxモバイルデバイスで実行されているユーザーレベルのC++テストアプリケーションがあります。テストの1つは、デバイスファイルへの書き込みにroot権限を必要とするプリンター用紙センサーの有効化/無効化を含みます。アプリケーションにそのような特権を付与する方法はありますか?ない場合、その回避策はありますか?
4 に答える
これでうまくいく、
実行としてroot
:
chown -v root:root /path/to/yourapp
chmod -v 4755 /path/to/yourapp
または代わりに
chmod -v u+s /path/to/yourapp
または代わりに
man chmod
これはスクリプトでは機能しません。そして、はい、あなたはjdizzleが不必要な特権を落とすことについて言ったことを真剣に受け止めるべきです。
これを解決する別の方法は、アプリケーションを実行するユーザーを、デバイスファイルを所有するグループのメンバーにすることです。例えば、
ls -la /dev/devicefile
crw-rw---- 1 root printer 4, 0 may 6 10:56 /dev/devicefile
グループのメンバーはprinter
デバイスの読み取りと書き込みができるためjoe
、グループに追加するprinter
(そしてセッションを再開する)必要があります。
gpasswd -a joe printer
デバイスファイルのアクセス許可を調整する必要がある場合は、おそらくudevルールを編集して永続的にする必要があります。しかし、chmod
うまくいくはずです。
プログラムsetuidrootを設定できます。これは、ユーザーが実行した場合でも、常にrootとして実行されることを意味します。これには通常、rootアクセスを必要とする必要なアクションが完了した後、プログラム内で特権を削除するための特別な注意が必要です。
sudo
また、プリンターと通信するヘルパー プログラム自体を root に設定したり、適切な機能を使用したり、起動したりすることもできます。メイン アプリケーションはそのプログラムを fork & exec し、パイプを介して通信するため、それ自体をルートとして実行するべきではありません。
ヘルパー プログラムは、(ユーザーが直接ではなく) メイン アプリケーションによってのみ開始され、パイプやプログラム引数などを介して通信する単純な実行可能ファイル (適切な機能を備えたもの) になります。
多くのグラフィカル管理プログラムも同様に行われます。グラフィカル部分は管理部分から分離されたプログラムであり、適切に通信します。管理プログラム (通常は のような既存のコマンド ライン プログラムadduser
) だけが特別な特権を必要とします。
プログラムを「root」として実行することは絶対に避けてください。これにより、プログラムが/ dev / Sensordeviceを読み取り/書き込みできるようになるだけでなく、システム上の事実上すべてへのアクセスが許可されます(完全にブリックする機能を含む)。
したがって、適切なグループを使用し、デバイスファイルがグループに書き込みアクセスを許可していることを確認して、必要なリソースだけにきめ細かいアクセスを追加するようにしてください。特定のデバイスに特定のグループへの書き込みアクセスを許可する適切なudevルールの記述方法については、 (例)udevを参照してください。