4

ユーザー名とパスワードが与えられた場合、そのユーザー名とパスワードを持つユーザーがローカル システムに存在するかどうかを確認する必要があります。

私はパッケージを認識しposix_getpwnamて使用していPAMますが、これらの方法の両方で、PHP スクリプトが にアクセスできる必要があります/etc/shadow。システムファイルやデーモンユーザーのパーミッションを台無しにしたくありません。

これは、 などの標準システム コマンドをいじるかsudo、独自の小さな setuid C プログラムを作成することで実行できると思います。上記のユーザー名/パスワードを使用してFTPまたはSSH経由でlocalhostに接続して検証することもできます。もっと簡単な方法はありますか?

4

3 に答える 3

1

よりネイティブな方法が必要な場合は、独自のロールを作成できます。私はPAMをもっと調べます: pam_authenticate

つまり、sudo などの PAM を使用して、認証するが root を必要としないアプリケーションを作成できる必要があります。

ただし、より単純なソリューションが必要な場合は、次のように呼び出すことができます。

ソースlogin.sh

#!/bin/bash
su $1 < `echo $2` #Need echo for the newline

最初のパラメーターがユーザー名で、2 番目のパラメーターがパスワードであるexecステートメントとしての PHP コード。login.sh

于 2010-07-31T20:01:22.693 に答える
0

上記のユーザー名/パスワードを使用してFTPまたはSSH経由でlocalhostに接続して検証することもできます。

それが私が最後にしたことです(PHP ssh2拡張機能を使用)。ローカル コマンドも、ユーザーの資格情報の下で、同じ接続を介して実行されます。

于 2010-07-31T14:19:31.960 に答える
0
  1. システムが常にこれらを実行していると仮定すると、ftp/ssh は巧妙な方法だと思います。

  2. アクセス許可のための別の可能性として、/etc/shadow からユーザーを取得するスクリプトを作成し、このスクリプトを cron ジョブとして実行して定期的に更新する方法があります。このスクリプトは、Web (Apache など) を実行しているユーザーにのみ固有のアクセス許可を持つファイルを作成し、このファイルを使用して、または本当に夢中になりたい場合は、mysql へのエントリをデータベースで確認することもできます。

1 つ目はシンプルで簡単に実行できますが、2 つ目は少し手間がかかります。頭に浮かんだ別の方法は、php を介して useradd $user などのシステム コマンドを実行し、return をチェックすることです。ただし、これには sudo が必要です。

于 2010-07-24T23:53:06.320 に答える