2010-08-10 11 views
8

Chciałbym zbudować program , który przyjmuje nazwę użytkownika jako parametr i tworzy użytkownika oraz jego folder macierzysty (z pewnymi zakodowanymi na sztywno specyfikacjami, takimi jak folder, a kontrole bezpieczeństwa, takie jak nazwa użytkownika, nie mogą być rootem lub istniejącym użytkownikiem).Jak stworzyć użytkownika Linuxa używając C/C++?

Moja aplikacja musi tworzyć użytkowników, aby umożliwić dostęp SSH.

Program zostanie wykonany przy użyciu sudo. Czytałem, że powinien być napisany w C lub C++ zamiast skryptów, ponieważ skrypty mogą być łatwo wykorzystane.

  • Czy możesz dać mi kilka rad lub dobrymi obyczajami o tym, jak osiągnąć ten cel?
  • Czy powinienem używać biblioteki Pam? Czy są jakieś przykłady?
  • Jakie są ewentualne wady bezpieczeństwa w przypadku ?

Znam C/C++ i uruchamiam Ubuntu Lucid.

Edit:

Użytkownik będzie miał dostęp tylko sudo aby uruchomić danego polecenia, ja nie chcę, żeby móc uruchomić powłokę lub obejście niektóre programy (poprzez zmianę środowiska PATH, na przykład) .

W rezultacie, na przykład, będę musiał przesłonić PATH, o co jeszcze powinienem się martwić?

+4

Dlaczego skrypt jest łatwiejszy do wykorzystania niż plik wykonywalny? Jeśli masz uprawnienia roota, masz dostęp do roota, a ich nic nie możesz zrobić. Zrób to w prosty sposób i użyj skryptu, który używa normalnych komend linuksowych (a zatem został całkowicie przetestowany). –

+0

Użytkownik będzie miał tylko dostęp sudo do uruchomienia tego konkretnego polecenia, nie chcę, aby mógł on uruchomić powłokę lub ominąć niektóre programy (np. Zmieniając środowisko PATH). – Weboide

Odpowiedz

10

Prawdopodobnie najlepiej jest wywołać useradd; zrobi to, co trzeba (przy odpowiednich parametrach).

Próba utworzenia jednego poprzez wywołanie odpowiednich interfejsów API jest możliwa, ale nie pożądana.

+0

Brzmi o wiele bardziej pożądanie. Skompilowanie skryptu Perla, a następnie wywołanie useradd to odpowiedź * I * na rozwiązanie tego problemu. –

+5

Brak "odpowiednich interfejsów API" w bibliotece Linux C. –

6

Masz na myśli adduser lub useradd? Spróbuj spojrzeć na ich kod źródłowy.

5

Nie ma w tym celu interfejsu API. Po prostu napisz do /etc/passwd i /etc/group (i ewentualnie także wersji shadow) używając normalnych wywołań systemu dostępu do plików.

+0

Dlaczego upadek? –

+6

Nie zapominaj, że przed zmodyfikowaniem tych wartości należy zawsze uzyskać wyłączną blokadę plików (wszystkie polecenia systemowe, które modyfikują te pliki). W przeciwnym razie istnieje możliwość uszkodzenia pliku, a Ty jesteś w bardzo złym stanie. –

+0

Myślę, że jest to "jedyna droga", jeśli twoje/etc/passwd jest puste i nie można dodawać użytkowników do grup przy użyciu programu adduser – rogerdpack

Powiązane problemy