2009-10-15 57 views
6

Tôi muốn tạo nhóm người dùng bằng cách sử dụng python trên hệ thống CentOS. Khi tôi nói 'bằng cách sử dụng python' Tôi có nghĩa là tôi không muốn làm một cái gì đó như os.system và đưa ra lệnh unix để tạo một nhóm mới. Tôi muốn biết nếu có bất kỳ mô-đun python nào đề cập đến điều này.Tạo nhóm người dùng trong linux bằng cách sử dụng python

Tìm kiếm trên mạng không tiết lộ nhiều về những gì tôi muốn, ngoại trừ nhóm người dùng python .. vì vậy tôi phải hỏi điều này.

Tôi đã tìm hiểu về mô-đun grp bằng cách tìm kiếm ở đây trên SO, nhưng không thể tìm thấy bất kỳ điều gì về việc tạo nhóm.

EDIT: Tôi không biết mình có phải bắt đầu câu hỏi mới hay không, nhưng tôi cũng muốn biết cách thêm người dùng (hiện tại) vào nhóm mới tạo.

Bất kỳ trợ giúp nào được đánh giá cao. Cảm ơn bạn.

+0

Tôi đoán tôi sẽ thực hiện các công cụ dòng lệnh ... –

Trả lời

10

Tôi không biết của một module python để làm điều đó, nhưng/etc/group và/etc/định dạng gshadow khá chuẩn, vì vậy nếu bạn muốn bạn chỉ có thể mở tệp, phân tích nội dung hiện tại của họ và sau đó thêm nhóm mới nếu cần.

Trước khi bạn đi làm điều này, hãy xem xét:

  • gì xảy ra nếu bạn cố gắng thêm một nhóm mà đã tồn tại trên hệ thống
  • gì xảy ra khi nhiều trường hợp của chương trình của bạn cố gắng thêm một nhóm tại đồng thời
  • gì xảy ra với mã của bạn khi một sự thay đổi không tương thích được thực hiện cho các định dạng nhóm một vài phiên bản xuống dòng
  • NIS, LDAP, Kerberos, ...

Nếu bạn không sẵn sàng đối phó với các loại vấn đề này, chỉ cần sử dụng mô-đun subprocess và chạy groupadd. Nó sẽ là cách ít có khả năng để phá vỡ máy khách hàng của bạn.

Một điều bạn có thể làm điều đó sẽ ít mong manh hơn việc viết của chính bạn sẽ là quấn mã trong groupadd.c (trong gói bóng) trong Python và làm theo cách đó. Tôi không thấy điều này mua bạn nhiều so với chỉ exec'ing nó, mặc dù, và nó sẽ thêm phức tạp hơn và mong manh để xây dựng của bạn.

+1

Cảm ơn bạn đã có câu trả lời tuyệt vời. Các trường hợp sử dụng tôi viết kịch bản cho không có bất kỳ vấn đề bạn đã đề cập, nhưng thêm mục của tôi để những 'thánh' linux tập tin ... làm cho tôi cảm thấy tội lỗi:) ... Tôi nghĩ rằng tôi sẽ phải đi với giải pháp xử lý con. Cảm ơn một lần nữa. –

5

Tôi nghĩ rằng bạn nên sử dụng các chương trình dòng lệnh từ chương trình của bạn, rất nhiều sự cẩn thận đã đi vào đảm bảo rằng chúng không phá vỡ tệp nhóm nếu có sự cố.

Tuy nhiên các định dạng tập tin là phía trước khá thẳng để viết một cái gì đó cho mình nếu bạn chọn để đi theo con đường mà

+0

Phải có một số hàm và thư viện C đằng sau hậu trường .. thực hiện rõ ràng) rằng các lệnh đang sử dụng, tôi mong đợi có thể là một số loại của một wrapper python xung quanh họ .. ?? –

1

Không có cuộc gọi thư viện nào để tạo nhóm. Điều này là bởi vì thực sự không có thứ gì như tạo ra một nhóm. Một GID chỉ đơn giản là một số được gán cho một tiến trình hoặc một tệp. Tất cả những con số này đã tồn tại - bạn không cần phải làm gì để bắt đầu sử dụng GID. Với các đặc quyền thích hợp, bạn có thể gọi chown (2) để đặt GID của một tệp thành bất kỳ số nào hoặc setgid (2) để đặt GID của quy trình hiện tại (có nhiều hơn một chút so với ID có hiệu lực, ID bổ sung, v.v.)

Đặt tên cho GID được thực hiện bởi một mục nhập trong/etc/group trên các hệ thống Unix/Linux/POSIX cơ bản, nhưng đó thực sự chỉ là một quy ước được gắn với công cụ của người dùng Unix/Linux/POSIX. Các thư mục dựa trên mạng khác cũng tồn tại, như đã đề cập bởi Jack Lloyd.

Nhóm trang người đàn ông (5) mô tả định dạng của tệp/etc/group, nhưng bạn không nên viết trực tiếp vào đó. Bản phân phối của bạn sẽ có chính sách về cách GID chưa được đặt tên được phân bổ, chẳng hạn như đặt chỗ nhất định cho các mục đích khác nhau (nhóm hệ thống cố định, nhóm hệ thống động, nhóm người dùng, v.v.). Phạm vi của các không gian số khác nhau trên các bản phân phối khác nhau. Các chính sách này thường được mã hóa trong các công cụ dòng lệnh mà một sysadmin sử dụng để gán GID chưa được đặt tên.

Điều này có nghĩa là cách tốt nhất để thêm nhóm cục bộ là sử dụng các công cụ dòng lệnh.

+0

"thực sự không có thứ gì như tạo ra một nhóm" ... đó chắc chắn là điều tốt để biết ... Cảm ơn rất nhiều cho một câu trả lời tuyệt vời ... Tôi nghĩ rằng tôi sẽ đi với exec-ing các công cụ dòng lệnh. –

Các vấn đề liên quan