2017-11-23 30 views
0

Debian 9.2で動作するBeagleBone Blackボードのライトをオン/オフする小さなC++アプリがあります。実行中のユーザより実行可能なパーミッションを与える

これは、テキストファイルを更新することで行います。

// Turn light on 
fs.open("/sys/class/leds/beaglebone:green:usr0", std::fstream::out); 
fs << "1"; 
fs.close(); 

標準ユーザーとしてプログラムを実行すると、エラーなしで実行されますが、ライトは変化しません。

sudoでプログラムを実行すると、すべて正常に動作し、ライトが機能します。 私は、これらのファイルにはより高いアクセスが必要だと思います。

私はLinuxの権限に精通していませんが、ユーザーができなかったファイルにプログラムからアクセスできるようにする方法はありますか?

+3

私は20年前にバイナリスーパーユーザーフラグを与えることができたと思いますが、これは非常に間違った解決策です。まだ動作しているかどうか、またはセキュリティポリシーと衝突するかどうかは不明です。影響を受けるビーグルボーンファイルが特定のグループに属していて、書き込みが可能なグループ権限を持っている場合は、そのグループをユーザーに追加します(バイナリを実行します)。とにかく、私は管理者ではなく、単にLinuxのユーザーです。だから、グループの仕組みについて何か混乱するかもしれません。いずれにしても、これは純粋に* nix権限に関するもので、C++やプログラミングとは関係ありません。 – Ped7g

+2

ファイルへの書き込み権限を昇格する必要がある場合は、昇格した権限でプログラムを実行する必要があります。その周りには方法がありません。ただし、あなたができることは、([setuid](https://www.gnu.org/software/libc/manual/html_node/Setuid-Program)を使用して昇格された権限で実際にタスクを実行する必要があるまで、権限を削除することです。 -Example.html)。 –

+0

感謝してくれてありがとう。私は完全なLinuxのnoobであり、25年以上のMSスタック開発から来ているので、いくつかのコンセプトについて私の頭を包み込むのは難しいです。 – user3953989

答えて

2

読む慎重についてsetuidcredentials(7)(とプログラムが開始されている方法ですexecve(2))。しかし、vulnerabilitiesには注意してください。

Advanced Linux Programming(自由にダウンロードできますが、少し古い)またはLinuxプログラミングに関する新しい本をお読みください。 intro(2)syscalls(2)を読んでください。

また、一般的なOSの詳細については、Operating Systems: Three Easy Pieces(無料でダウンロード可能)を読むこともできます。

あなたは(適切なchownchmod u+sで)実行可能ファイルのsetuidを行い、適切な場所でのケアsetreuid(2)を呼び出すことができます。つまり、sudosuのようなプログラムが動作します(すべてがsetuidです)。場合によっては、グループ権限のみを使用できます(setgidのみ)。

しかし、このようなプログラムのバグは、巨大なセキュリティホールを開く可能性があるので注意してください。したがって、setuidプログラムを非常に小さく保ち、他の人がコードを見直すことが賢明です。可能なアプローチは、あなたの奇妙なことを実行する非常に小さなsetuid実行可能ファイルをコード化することです(例えば、ledを点滅させるだけです)。そして、より大規模で普通のプログラム(GUIの提供など)で(例えばpipe(7) -sまたは他の形式のinter-process communication

おそらく、グループledを作成し、グループ書き込み許可を/sys/class/leds/beaglebone:green:usr0に与え、setgid手法のみを使用してシステムを構成することができます。

1

これには多くの方法があり、より適切なものは大きな設定に大きく依存します。 1つの方法は、特定のファイルのアクセス許可を変更することです(sysfsが許可しているかどうかはわかりません)。

もう1つは、これを実行するユーザーをファイルへの書き込みアクセス権を持つグループに追加することです。

もう1つは、すでに述べたsetuidビットの設定と、実行可能ファイルの所有権をrootまたはそのファイルへの書き込みアクセス権を持つユーザーに変更することです。これは、通常、より深刻なセキュリティの影響をもたらします。

また、sudoまたはsuを使用してファイルを実行する方法も有効です。セキュリティの露出を制限するために、sudoersでこの特定のコマンドを許可することができます。

上記のいずれかのバリエーションは、より低特権のプロセスからのコマンドをリスニングする永続プロセスを実行することです。

このように、これは大きな設定にどのように適合するかによって異なります。また、セキュリティホールを開くことを避けるためには、その意味を考慮する必要があります。

関連する問題