2010-06-21 70 views
7

Làm cách nào tốt nhất để thêm người dùng/nhóm vào linux bằng C++ có thư viện mà tôi có thể gọi không? Tôi không muốn bắt đầu làm những việc như:C++ thêm người dùng linux

fopen("/etc/passwd", "a"); 
fprintf(tmp, "%s:x:%d:1:%s:/%s/%s:/bin/ksh\n", username, usernumber, commentfield, userdir, username); 
fclose(tmp); 

fopen("/etc/shadow", "a"); 
fprintf(stmp, "%s:*LK*:::::::\n", username); 
fclose(stmp); 

Cảm ơn!

Trả lời

5

Tôi nhận thấy rằng hầu hết các tiện ích chính bổ sung và thay đổi người dùng thực hiện trực tiếp, thường theo những cách khác nhau. Các chức năng bạn có thể sử dụng để sửa đổi các tệp passwd và bóng được hiển thị trong <pwd.h> và trong <sys/types.h>they're part of glibc.

fgetpwent, getpwnam, getpw, getpwent_r, putpwent, setpwent

Chúng ta có thể nhìn vào cách busybox (thông qua TinyLogin) nào đó, như một ví dụ. Trong busybox/loginutils/adduser.c, họ đặt người dùng vào tệp passwd bằng cách tạo cấu trúc mật khẩu và sau đó gọi putpwent. Để thêm mật khẩu của người dùng vào tệp bóng, họ chỉ cần gọi fprintf và viết chuỗi trực tiếp.

Để xác thực người dùng theo cách hiện đại, có Linux-PAM. Nhưng với việc thêm người dùng, bạn có thể thấy trong số pam_unix_passwd.c mà họ gọi là unix_update_db(), gọi các chức năng khác nhau trong libpwdb, mà bạn phải thêm làm phụ thuộc vào dự án của mình nếu bạn sử dụng.

Điều đó đang được nói, tôi phạm tội đã viết một vài tiện ích để phân tích cú pháp cơ sở dữ liệu mật khẩu và bóng và sửa đổi chúng trực tiếp. Nó hoạt động tốt, nhưng đây là một hệ thống nhúng nơi tôi có thể kiểm soát chặt chẽ mọi thứ. Tôi không phải lo lắng về những thứ như điều kiện chủng tộc với các chương trình khác thay đổi db passwd.

Nếu bạn cần thêm một nhóm, cùng một lượt cho số group database.

3

Thêm người dùng ở mức quá cao để có thể gọi hệ thống. Theo như tôi biết, không có thư viện nào được sử dụng rộng rãi cho điều này. Đặt cược tốt nhất của bạn có thể sẽ là sử dụng cuộc gọi system để gọi chương trình useradd với các tùy chọn thích hợp.

+0

Rất ít điều: * Không sử dụng hệ thống() trừ khi bạn chắc chắn rằng những thứ bạn vượt qua sẽ không được diễn giải là các ký tự đặc biệt của vỏ. * useradd không đặc biệt là di động (và trên một số hệ thống, bạn có thể không tạo được người dùng "bình thường", ví dụ như người dùng ở LDAP/NIS/AD/v.v. Nói chung, đối với người dùng một lần Tôi sẽ sử dụng một kịch bản lệnh shell. –

4

Bạn có thể thử sử dụng thư viện libuser.

Một trong các ứng dụng được phân phối với libuser là luseradd, một chương trình có vẻ là một tiện ích đa nền tảng useradd. Ở cốt lõi, luseradd sử dụng chức năng lu_user_add của libuser để tạo ra người dùng.

Xem thư mục docs/html trong phân phối nguồn cho tài liệu.

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