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
このユーザーがログインするにはパスワードが必要ですが、他のユーザーはパスワードでログインできない場合はコメントを外してください。
-N
SSH クライアントを使用する場合は接続が必要です。そうしないと、サーバーはユーザーに挨拶してから切断します。
次に、上記の設定に接続してトンネルを開きます。これにより、10123
ローカルシステムのポートからPostgresにアクセスできます。
ssh -N -L 10123:localhost:5432 myusername@myserver
答え3
限られたシェルを使用してください。シェル、ユーザー用。これにより、シェルが許可するコマンドのホワイトリストを指定できます(制限は、psqlクライアント内で実行されるシェルにも適用されます)。
chsh コマンドを使用してユーザーシェルを設定します。