-1

さて、私の質問は単純ですが、私はCに少し慣れていないので、誰かが私を助けてくれることを望んでいました。Cで別のユーザーに変更したい。たとえば、ユーザーのパスワードを知っていて、ユーザーが次のように入力した場合:./changeuser1これはuser1に変更されます。現在、これがセキュリティの問題である可能性があることはわかっていますが、現時点ではセキュリティについては心配していません。

4

3 に答える 3

2

にある setuid を使用 unistd.hして、POSIX システムで使用できるようにすることをお勧めします (Linux/Unix のいずれでも問題ありません)。

マニュアルページから

プロセスが適切な特権を持っている場合、setuid() は、呼び出しプロセスの実ユーザー ID、実効ユーザー ID、および保存された set-user-ID を uid に設定します。

プロセスが適切な特権を持っていないが、uid が実際のユーザー ID または保存された set-user-ID と等しい場合、setuid() は実効ユーザー ID を uid に設定します。実際のユーザー ID と保存された set-user-ID は変更されません。

setuid() 関数は、補助グループ リストにまったく影響を与えません。

ここに例があります

于 2011-01-06T21:52:48.210 に答える
1

Unix 全般と特定の OS の両方で、資格情報の変更のすべての複雑さを知っているsuバイナリを呼び出します(関数system()の組み合わせまたは関数fork()の 1 つを使用するなど)。exec端末は共有され、引き続き元のユーザーに属します。

単純な呼び出しでは処理されないこれらの複雑な問題にsetuid()は、グループ、アカウントの無効化、およびリソースの制限があります。

これが単なる楽しみである場合は、setuid()前にsetgid()andinitgroups()を付けるだけで十分でしょう。

于 2011-01-08T00:29:39.530 に答える
0

getpwuid()を使用して UID を見つける必要があります。あとで、 setuid()を使用してプログラムに UID を設定し、その後にこれらの新しい権限で実行するアプリケーション/関数 (シェルなど) を設定する必要があります。現在のUIDでアプリケーションを起動するには、system()を使用します。

于 2011-01-06T21:58:08.447 に答える