アプリのユーザーにSSH/RSYNCのような機能を提供したくありません。 SSHキーをアプリに貼り付けて保存できるようにしたいと思います GitHubの場合と同様 :
したがって、私の質問は、ユーザーにキーを(できればデータベースに)保存させたら、次のようになります。
実際にLinuxユーザーアカウントを作成せずにSSH/RSYNC機能を提供/模倣できる方法はありますか?それらに基づいて承認できるようにしたいと思いますデータベースに保存された公開鍵を特定のフォルダーにRSYNCで出し入れします(たとえば、アプリ内のユーザー名に基づいて)。
(重要な場合は、Rails Ubuntuサーバーにデプロイされたアプリ)
SSHのauthorized_keys-fileのcommand
-オプションを見てください。このようにして、SSHキーに応じて、マシンにアクセスする特定のユーザーにコマンドを強制することができます。
サーバー上で「git」という名前のユーザーを想像してみてください。このユーザーには、例として次のauthorized_keysファイルがあります。
command="/path/to/script user1",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa [public key of user1]
command="/path/to/script user2",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa [public key of user2]
したがって、user1を実行するとssh [email protected] "/execute/command --with --parameter"
、/path/to/script
が呼び出されます(gitユーザーとして)。このスクリプトは元のコマンドにアクセスできます(/execute/command --with --parameter
)環境変数$ SSH_ORIGINAL_COMMAND内(詳細については、SSHのドキュメントを参照してください)。
このように、authorized_keys-fileに正しい行を入れるだけです(データベースに保存されているキーからファイルを動的に構築できます)。
そこから、独自のシェルを作成するか、元のコマンドで好きなことを行うことができます。
これは基本的に、gitoliteとgitosisがgitリポジトリのアクセス許可を管理する方法です(Githubはこれらのいずれかを使用していると思います)。
これが少し役立つことを願っています-よろしくお願いします!
OPは、キーを複数のユーザーに割り当てたいこと、およびユーザーを実際のLinuxユーザーとしてではなくデータベースに保存したいことを具体的に述べています。上記のGithubスタイルのセットアップでは、単一のgitユーザーがいます。
答えを完全にするために、OPはAuthorizedKeyCommandディレクティブも使用する必要があります。これはここで非常によく説明されています データベースからの公開鍵を使用したOpenSSH
したがって、両方を組み合わせて使用します。データベースに保存されているx人のユーザーに対するサーバーへの認証は、によって行われます。カスタム認証スクリプト(Webアプリケーションでスクリプトを呼び出すbashスクリプト)に基づく
カスタムスクリプトが認証のために(authorized_keysファイルの代わりに)公開鍵をOpenSSHに返す場合、MichaelTrojanekの回答に記載されている形式で公開鍵を提供します。このようにして、動的ユーザーがアクセスできる特定の機能に対する承認を提供します。