6

CentOS システムで python を使用してユーザー グループを作成したいと考えています。「Python を使用する」と言うとき、os.system のようなことをしたくなくて、新しいグループを作成する unix コマンドを与えたくないという意味です。これを扱うpythonモジュールがあるかどうか知りたいです。

ネットで検索しても、Pythonユーザーグループを除いて、私が欲しいものについてあまり明らかになりませんでした..だから私はこれを尋ねなければなりませんでした.

ここSOで検索してgrpモジュールについて学びましたが、グループの作成については何も見つかりませんでした。

編集:これについて新しい質問を開始する必要があるかどうかはわかりませんが、新しく作成されたグループに(既存の)ユーザーを追加する方法も知りたいです。

どんな助けでも感謝します。ありがとうございました。

4

4 に答える 4

11

それを行うための python モジュールについては知りませんが、/etc/group および /etc/gshadow 形式はかなり標準的なので、必要に応じてファイルを開いて現在の内容を解析し、新しいグループを追加できます。必要であれば。

これを行う前に、次のことを考慮してください。

  • システムに既に存在するグループを追加しようとするとどうなりますか
  • プログラムの複数のインスタンスが同時にグループを追加しようとするとどうなるか
  • グループ形式に互換性のない変更が加えられた場合、コードはどうなりますか?
  • NIS、LDAP、ケルベロス、...

このような問題に対処したくない場合は、subprocess モジュールを使用して groupadd を実行してください。顧客のマシンを壊す可能性ははるかに低くなります。

Python で groupadd.c (shadow パッケージ内) にコードをラップし、そのようにすることは、独自に作成するよりも脆弱ではない別の方法です。ただし、これが実行するだけでなく、ビルドに複雑さと脆弱性を追加するとは思えません。

于 2009-10-15T05:26:09.760 に答える
5

プログラムからコマンドライン プログラムを使用する必要があると思います。何か問題が発生した場合に、グループ ファイルが破損しないように細心の注意を払っています。

ただし、ファイル形式は、その方法を選択した場合、自分で何かを書くのは非常に簡単です

于 2009-10-15T05:20:29.023 に答える
1

グループを作成するためのライブラリ呼び出しはありません。これは、グループを作成するようなことが実際には存在しないためです。GID は、プロセスまたはファイルに割り当てられた単なる番号です。これらの番号はすべて既に存在します。GID の使用を開始するために必要なことは何もありません。適切な特権があれば、chown(2) を呼び出してファイルの GID を任意の数値に設定したり、setgid(2) を呼び出して現在のプロセスの GID を設定したりできます (有効な ID を使用すると、それよりも少し多くのことが必要です。補助IDなど)。

基本的な Unix/Linux/POSIX システムでは、GID に名前を付けるには /etc/group のエントリを使用しますが、これは実際には Unix/Linux/POSIX ユーザーランド ツールが順守する規則にすぎません。Jack Lloyd が言及したように、他のネットワークベースのディレクトリも存在します。

man ページ group(5) は /etc/group ファイルの形式を説明していますが、直接書き込むことはお勧めしません。ディストリビューションには、さまざまな目的 (固定システム グループ、動的システム グループ、ユーザー グループなど) のために特定のスペースを予約するなど、名前のない GID の割り当て方法に関するポリシーがあります。これらの数値空間の範囲は、ディストリビューションによって異なります。これらのポリシーは、通常、システム管理者が名前のない GID を割り当てるために使用するコマンドライン ツールでエンコードされます。

つまり、グループをローカルに追加する最善の方法は、コマンド ライン ツールを使用することです。

于 2009-10-15T11:47:13.493 に答える
-2

Python を検討している場合は、このプログラムを試してください。使い方はかなり簡単で、コードは簡単にカスタマイズできますhttp://aleph-null.tv/downloads/mpb-adduser-1.tgz

于 2010-03-11T16:33:03.660 に答える