2010-08-10 3 views
8

사용자 이름을 매개 변수로 사용하고 사용자 및 해당 홈 폴더 (폴더와 같은 하드 코딩 된 사양 및 사용자 이름과 같은 보안 검사는 루트 또는 기존 사용자 일 수 없음)을 만드는 프로그램을 작성하고 싶습니다.C/C++을 사용하여 Linux 사용자를 만드는 방법은 무엇입니까?

내 응용 프로그램은 SSH 액세스 권한을 부여하기 위해 사용자를 만들어야합니다.

sudo을 사용하여 프로그램이 실행됩니다. 스크립트가 쉽게 악용 될 수 있기 때문에 스크립트 대신 C 또는 C++로 작성되어야한다고 읽었습니다.

  • 이것을 수행하는 방법에 대한 조언이나 우수 사례 줄 수 있습니까?
  • Pam 라이브러리를 사용해야합니까? 어떤 예가 있습니까?
  • 가능한 보안 결함은 무엇입니까?

나는 C/C++를 알고 있고 Ubuntu Lucid를 사용하고 있습니다.

편집 :

사용자 만 나는 쉘 또는 우회 일부 프로그램을 실행할 수 없도록하려면, 특정 명령을 실행 sudo는 액세스 할 수 있습니다 (PATH 환경을 변경하여이 예를 들어) .

결과적으로 예를 들어 경로, 을 다시 정의해야합니까?

+4

스크립트가 실행 파일보다 악용되기 쉬운 이유는 무엇입니까? 루트 액세스 권한이 있으면 루트 액세스 권한이 있으며 수행 할 수있는 권한이 없습니다. 간단한 방법으로 일반 리눅스 명령을 사용하는 스크립트를 사용하십시오 (따라서 완전히 테스트되었습니다). –

+0

사용자는 특정 명령을 실행하기 위해 sudo 액세스 만 할 수 있습니다. 예를 들어 PATH 환경을 변경하여 쉘을 실행하거나 일부 프로그램을 우회 할 수 없길 원합니다. – Weboide

답변

10

아마도 가장 좋은 방법은 useradd를 호출하는 것입니다. 올바른 일을 할 것입니다 (적절한 매개 변수가 주어짐).

적절한 API를 호출하여 수동으로 생성하려고하지만 바람직하지는 않습니다.

+0

이것은 나에게 훨씬 더 바람직하게 들린다. Perl 스크립트를 작성한 후 useradd를 호출하는 것은이 문제를 해결할 방법을 생각할 수있는 방법입니다. –

+5

Linux C 라이브러리에는 "적절한 API"가 없습니다. –

6

adduser 또는 useradd과 같은 뜻입니까? 소스 코드를 살펴보십시오.

5

API가 없습니다. 정상 파일 액세스 시스템 호출을 사용하여 /etc/passwd/etc/group (그리고 아마도 섀도우 버전도 가능)으로 작성하십시오.

+0

왜 downvote? –

+6

이 값을 수정하기 전에 항상 파일에 배타적 잠금을 가져야합니다 (이 파일을 수정하는 모든 시스템 명령이 해당 작업을 수행함). 그렇지 않으면 파일 손상의 가능성이 있으며, 그러면 당신은 정말로 나쁜 형태입니다. –

+0

/etc/passwd가 비어있어 adduser를 사용하여 그룹에 사용자를 추가 할 수없는 경우 이것이 "유일한 방법"이라고 생각합니다. – rogerdpack

관련 문제