Postgresにアクセスして他の操作を実行しないようにSSHユーザーを設定する方法

Postgresにアクセスして他の操作を実行しないようにSSHユーザーを設定する方法

Ubuntu 18.04サーバー内のpostgresへの読み取り専用アクセス権を誰かに付与する必要があります。

Postgresの場合、次のことを行いました。

CREATE ROLE read_only_user WITH LOGIN PASSWORD 'FAKEPASSWORD123' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION VALID UNTIL 'infinity';
GRANT CONNECT ON DATABASE "somedb" TO read_only_user;
GRANT USAGE ON SCHEMA public TO read_only_user;

SSH経由/etc/ssh/sshd_config

PasswordAuthentication no
PermitRootLogin no

Ubuntuで私はこれをしました

sudo mkdir /var/read_only_on_ubuntu_user
sudo groupadd read_only
sudo usermod -g read_only read_only_on_ubuntu_user
sudo useradd -d /var/read_only_on_ubuntu_user  read_only_on_ubuntu_user
sudo chown read_only_on_ubuntu_user:read_only /var/read_only_on_ubuntu_user

cd /var/read_only_on_ubuntu_user && mkdir .ssh
vim .ssh/authorized_keys # this is to add the public key for this user account

ユーザーがSSH経由でlocalhost:5432からpostgresに正常にアクセスしました。

このユーザーをさらに制限するにはどうすればよいですか?

修正する

ユーザーが現在サーバーにトンネリングし、SSHを介して自分のデスクトップからリモートでデータベースにアクセスするデスクトップGUIアプリケーションを使用しているという事実を追加することを忘れました。

SSH経由でログインしてからpsqlを実行しません。次回リクエストすることもできますが、そうなる可能性はほとんどないと思います。

答え1

実行中のクライアントのsshd_configに追加しますForceCommand(あなたの場合)psql

または、authorized_keysファイルの前に追加することもできますcommand="..."restrictそこにフラグを追加してpty

別のアプローチは、ユーザーがリモートサーバーでpsqlを実行するのではなく、実行中のクエリpostgresqlのローカルホストポートのトンネルを作成し、ローカルに接続できるようにするssh接続を実行することです。

答え2

トンネリングのみを許可するには、以下を追加します/etc/ssh/sshd_config

Match User myusername
  # PasswordAuthentication yes
  PermitOpen 127.0.0.1:5432
  X11Forwarding no
  AllowAgentForwarding no
  ForceCommand /bin/false

PasswordAuthentication yesこのユーザーがログインするにはパスワードが必要ですが、他のユーザーはパスワードでログインできない場合はコメントを外してください。

-NSSH クライアントを使用する場合は接続が必要です。そうしないと、サーバーはユーザーに挨拶してから切断します。

次に、上記の設定に接続してトンネルを開きます。これにより、10123ローカルシステムのポートからPostgresにアクセスできます。

ssh -N -L 10123:localhost:5432 myusername@myserver

答え3

限られたシェルを使用してください。シェル、ユーザー用。これにより、シェルが許可するコマンドのホワイトリストを指定できます(制限は、psqlクライアント内で実行されるシェルにも適用されます)。

chsh コマンドを使用してユーザーシェルを設定します。

関連情報