問題タブ [shlex]
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 - Python でグループ権限を設定する
それが私のセットアップです:
PostgreSQL/PostGIS データベースを実行している VirtualMachine (Ubuntu 14.04.LTS) があります。
QGIS の Windows 7 を使用して、このデータベースに接続し、フィーチャ レイヤーを GIS プロジェクトに読み込みます。
いくつかの Python コードを使用して、タイル ID といくつかの情報を含むファイルを作成します。
ファイルには次の権限があります。
自分のグループと他のグループにも同じ権限を設定したい。
私は試した:
失敗。
機能していたのは次のとおりです。
また
chmod コマンドが機能しないのはなぜですか?
UNIX では、このファイルを chmod できます。私は Windows と同じユーザーです。
os.chmod メソッドも試しました。しかし、成功しません。
アップデート
UNIX (Solaris) で「chmod 777 ファイル」を実行すると、パーミッションは
今できることは、GIS プロジェクトの Windows で権限をダウングレード/削除することです。
このコマンドを使用する0
と、Python コンソール出力にフィードバックが表示されます
新しいファイルで chmod 777 を実行すると、フィードバックも得られ0
ますが、何も起こりません。
問題は、権限をダウングレードすることしかできないことです。新しい権限を設定できません!
python - 非対話型プロセスのパスワード管理
チャレンジ
他のプロセス (あらゆる種類のスクリプト: python、php、perl など) によって呼び出されるパスワード管理ツールが必要であり、アクセス制御を実行するために呼び出し元スクリプトを識別および検証できます。戻るか出る -1
現在の実装
さまざまなフレームワークを検討した結果、Keepass V1.X バックエンド データベース ファイルを処理し、独自のアクセス制御オーバーレイを構築できる を使用することにしましpython
たkeepassdb
(これは後でカスタマイズして、ユーザー/グループ アクセス用に LDAP に統合できるためです)。 . アクセス制御はnotes
、各エントリのフィールドをオーバーロードして、パスワードへのアクセスが許可されている SHA-256 ハッシュのリストを含めることによって行われます。(これは、スクリプトが誰にも変更されていないことも検証することに注意してください)
パスワード マネージャーは-p
、呼び出し先のスクリプト/アプリケーションの PID であるパラメーターを使用して呼び出され、次の手順を実行します。
- 自身の PID から開始して親を探して、再帰的に「上」に検索します。
1
呼び出し元の PIDは、親 0 のプロセスに到達する前に見つける必要がありinit
ます。これにより、誰がこのパスワード マネージャー インスタンスを呼び出したのかを確実に知ることができます。 - その (親) プロセスの完全なコマンド ラインを取得し、python、perl、php、bash、bat、groovy などを含むスクリプト言語を探して分析します (
shlex
これには が使用されます)。 - スクリプトの絶対パスを特定し、その SHA を計算します
- これをデータベースの値と比較して、存在するかどうかを確認します。存在する場合、スクリプトは、stdout で標準形式で返されるパスワードを持つことが許可されます。そうでない場合は、-1 で終了します。
問題
上記の実装は正当なスクリプトに対してはうまく機能しますが、非常に混乱しやすいです。特定caller.py
のエントリへのアクセスが許可されているスクリプトにしますe
。コマンドラインを実行すると、次のようになりpython /path/to/caller.py arg1 arg2
ます。コマンド ラインを解析するコードは次のとおりです。
親プロセスのコマンドラインは、次を使用して取得されます。
上記の関数を混同する最も簡単な方法は.sh
、最初の引数としてcaller.py
. sh はその引数を使用せず、代わりにエントリを照会するパスワード マネージャーを呼び出しますe
。コマンドラインは次のようfake_sh ./caller.py
になり、上記のコードはパスを返します...これは間違ったことです。
質問
これは、プログラマーがパスをスクリプト/アプリにハードコーディングすることなく、ずっと前に解決された一般的な問題であると思われますが、数日間少し調査を行ったところ、同様の方法で機能するものを見つけることができなかったようです. この質問は自由回答であることを理解しているので、次の回答を受け入れます。
- 私は車輪を再発明していますか?同様のことを行うフレームワーク/ソフトウェアはありますか?
- これは、PID に依存する正しいアプローチですか? 別の方法はありますか?
- 実装に関しては、投稿されたコードを改善してより堅牢にし、簡単に混乱しないようにすることはできますか? (
shlex
分析部分)
python - shlex.split() と re.split() の違いは何ですか?
そのためshlex.split()
、最近、コマンドをsubprocess.Popen()
関数の引数として分割していました。re.split()
以前、関数を使用して特定の区切り文字を指定して文字列を分割したことを思い出しました。誰かがそれらの間の本質的な違いは何かを指摘できますか? 各機能が最も適しているのはどのシナリオですか?