質問
さて、私の質問は簡単ですが、私はCにちょっと慣れていないので、誰かが私を助けてくれることを望んでいました。 Cの別のユーザーに変更したいのですが、たとえば、ユーザーのパスワードを知っています。ユーザーが入力した場合:./Change user1はユーザーに変更されます。これは今のところセキュリティの問題かもしれないことを知っていますが、現時点ではセキュリティについては心配していません。
解決
あなたはで見つけることができるsetUidを使用したいと思うでしょう unistd.h
したがって、POSIXシステムで利用できます(したがって、Linux/Unix Falvourは大丈夫です)
マンページから
プロセスに適切な特権がある場合、setUID()は、実際のユーザーID、効果的なユーザーID、およびCalling Processの保存されたセットユーザーIDをUIDに設定するものとします。
プロセスに適切な特権がないが、UIDが実際のユーザーIDまたは保存されたSet-User-IDに等しい場合、SetUID()は効果的なユーザーIDをUIDに設定するものとします。実際のユーザーIDと保存されたSet-User-IDは、変更されていないままでなければなりません。
setUid()関数は、補足グループリストに決して影響しません。
これが次のとおりです 例
他のヒント
電話してください su
バイナリ(スルーなど system()
またはの組み合わせ fork()
そしてその1つ exec
関数)は、資格情報の変化のすべての複雑さを知っています。端末は共有されており、元のユーザーに属し続けています。
これらの複雑さのいくつかは、単純なものによっては処理されません setuid()
呼び出しは、グループ、アカウントの無効化、リソースの制限です。
これがただの楽しみのためであるなら、 setuid()
前任者 setgid()
と initgroups()
おそらくあなたにとって十分でしょう。
使用してUIDを見つけなければなりません getpwuid(). 。後語プログラムでUIDを設定する必要があります setuid() その後、これらの新しい権利、たとえばシェルで実行しようとするアプリケーション/関数が続きます。でアプリケーションを開始します 現在 uid使用 システム().