2010-08-10 18 views
8

Kullanıcı adını parametre olarak alan ve kullanıcı ve ana klasörü (klasör gibi bazı kodlanmış belirtimlerle birlikte ve kullanıcı adı gibi güvenlik denetimleri kök veya varolan bir kullanıcı olamaz) oluşturan bir programı oluşturmak isterim.C/C++ kullanarak linux kullanıcısı nasıl oluşturulur?

Uygulamamın SSH erişimi sağlamak için kullanıcı oluşturması gerekiyor.

Program, sudo kullanılarak yürütülecektir. Okudum, script'lerin kolayca sömürülebileceğinden, scriptler yerine C veya C++ ile yazılmalıdır.

  • Bana bazı tavsiye ya da iyi uygulamalar bunu başarmak konusunda verebilir misiniz?
  • Bazı Pam kitaplığını kullanmalı mıyım? Herhangi bir örnek var mı? olası güvenlik açıkları ne
  • nelerdir?

C/C++ biliyorum ve Ubuntu muhtelemelen Lucid çalışan.

Düzenleme:

kullanıcı sadece bunu bir kabuk veya bypass bazı programlar çalıştırmak mümkün istemiyoruz, bu özel komutu çalıştırmak için sudo erişimi olacak (PATH ortam değiştirme gibi) . Sonuç olarak, örneğin, PATH, 'u başka hangi konuda endişe etmeliyim?

+4

Neden daha kolay bir komut dosyası, bir yürütülebilir daha yararlanmaya edilir? Kök erişime sahipseniz root erişiminiz vardır ve onların yapamayacağınız bir şey yoktur. Bunu basit bir şekilde yapın ve normal linux komutlarını kullanan bir betik kullanın (ve böylece tamamen test edilmiştir). –

+0

kullanıcı sadece bunu bir kabuk veya bypass (örneğin, PATH ortam değiştirerek) bazı programlar çalıştırmak mümkün istemiyoruz, bu özel komutu çalıştırmak için sudo erişebilecek. – Weboide

cevap

10

Muhtemelen en iyi bahsiniz, useradd'ı çağırmaktır; Doğru şeyleri yapar (uygun parametreler verilir). Uygun API'leri arayarak el ile oluşturulmaya çalışılabilir, ancak istenilemez.

+0

Bu benim için çok daha cazip geliyor. Perl betiğini bir araya getirmek ve daha sonra useradd çağırmak, bu problemi nasıl çözeceğimi düşünür. –

+5

Linux C kütüphanesinde hayır "uygun API'ler" vardır. –

6

adduser veya useradd mu demek istediniz? Kaynak kodlarına bakmayı dene.

5

bunun için hiçbir API yoktur. Sadece normal bir dosya erişim sistemi çağrılarını kullanarak (aynı zamanda ve belki gölge sürümleri) /etc/passwd ve /etc/group içine yazın.

+0

Neden düşüş var? –

+6

bu değerleri değiştirmeden önce her zaman dosyaları (bunu bu dosyaları değiştirebilir tüm sistem komutları) özel bir kilit elde gerektiğini unutmayın. Aksi takdirde dosya bozulma olasılığı vardır ve o zaman gerçekten kötü durumdasınız. –

+0

/etc/passwd'niz boşsa ve bu nedenle kullanıcıları adduser kullanarak gruplara ekleyemiyorsanız, "tek yol" olduğunu düşünüyorum. – rogerdpack

İlgili konular