ssh制限付きリモートアクセスを設定するには

ssh制限付きリモートアクセスを設定するには

sudoersファイルを正しく設定しようとしていますが、見つかった文書が役に立たないようです。

次のユーザーがいます。ユーザー1

2 台の Debian サーバーがあります。サーバー1そしてサーバー2

現在、SSHを使用してWindows PCから2つのサーバーのいずれかに接続し、必要に応じてsudo権限をエスカレートできます。

これから行けるはずですサーバー1到着サーバー2シェルスクリプトからファイルを実行します。サーバー2同様に、sudoパスワードを入力する必要はありません(スクリプトまたは手動で)。

このファイルを使用してこれを行うことができることを知っていますsudoers

しかし、どうすればいいですか?

私のsudoersファイルに(サーバー2)私は持っています:

# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo  ALL=(ALL:ALL) ALL
%user1 ALL=(ALL:ALL) ALL

私は次のことができることを知っています。

%user1 ALL = NOPASSWD: /path/to/myscript    

これによりユーザー1スクリプトの実行/パス/to/mysqscriptパスワードは必要ありません。しかし、Windows PCから接続すると、スクリプトの実行以外の操作を実行できなくなりますか?

NOPASSWD理想的には、この機能を次の接続に制限したいと思います。サーバー1

ここで何か抜けましたか?私は自分自身を完全にロックしないように変更を「テスト」することを嫌がっています。

答え1

実際の答えを得る前に、1つの調整が必要です。 「%user1」を使用すると、「その人はグループuser1"; おそらく"user1"がuser1を意味することを望むでしょう。

第二に、sudoはあなたがどこにログインしたのかわかりません。~から- 現在sudoを実行している場合にのみ適用されます。

第三に、「visudo」を使用して変更する必要があります。これにより、構文エラーが発生するのを防ぎます。

第四に、sudoers行を追加すると、現在のアクセス権のみが増加します。そのスクリプトにsudoが必要な場合は、さらにsudoersエントリが必要です。

答え2

で接続する機能を制限する方法についてお問い合わせいただきましたserver1。私はこれをしますssh。変更されたユーザーコードはDebian / Ubuntuで動作します。これらの原則と他のほとんどの規則はかなり一般的でなければなりません。この構成を使用してserver2fromからスクリプトを実行するには、server1次のコマンドを実行します。

$ ssh -i ~/.ssh/script_identity.pub ruser@server2

上記のコマンドは、追加の介入や認証なしでserver2スクリプトを接続して実行します。公開鍵ファイルは、スクリプトをリモートで実行できる唯一のファイルであるため、スクリプトにアクセスできるコンピュータおよび/またはアカウントを決定できます。sshsudosshserver2ssh

次の説明は、これらのタスクを実行するコードを示しています。

この設定には専用アカウントが必要ですserver2。いくつかの理由があり、すでに述べたものの1つがロックされる可能性があります。server2悪い場合は、仕事用アカウントで誤ったファイルを誤って修正することです。

ssh制限付きリモートアクセスを設定するには

存在するserver1

  1. スクリプトを実行するアカウントでserver1リモートスクリプトを実行するためにのみ使用する新しいSSHキーを作成します。
  2. 実行を1つのコマンドに限定するように新しいSSH公開鍵を変更します(command=マンページを参照sshd)。
  3. ユーザーIDと日付を印刷するテストスクリプトを作成します。

オンserver2(すべての操作がリモートで行われますserver1

  1. に新しいアカウントを作成してくださいserver2
  2. 変更した公開IDファイルを.ssh/authorized_keys新しいユーザーのホームディレクトリにコピーしますserver2
  3. テストスクリプトを新しいユーザーのホームディレクトリにコピーしますserver2
  4. 新しいユーザーアカウントのすべてのファイルに対するすべての権限と所有権を確認してください。

パスワード

次のスクリプトruser.shを に保存し、そのスクリプトserver1の機能を理解し、次のコマンドを実行して実行します。

$ sh ./ruser.sh ruser server2

このスクリプトをruser.shユーザーアカウントに保存しますsystem1

#!/bin/sh -e

#
# ruser.sh -- setup user on remote host for secure remote script execution
#
# This is for first time setup!
# Always use a new user on remote host.
#

USAGE="ERROR: Usage: sh $0 remote-username remote-hostname"    
RUSER="${1:?$USAGE}"
RHOST="${2:?$USAGE}"
UNIQUE=$$

# build files that will be transferred to the remote host

# Make the new ssh key, and modify the public key so that
# it can only be used to execute "./rscript.sh"

ssh-keygen -N '' -f ~/.ssh/script_identity
sed -i '1 {
    s,command="./rscript.sh",,
    s,^,command="./rscript.sh" ,
}' ~/.ssh/script_identity.pub

# rscript.sh -- the only script that can be executed
# with the modified public key.

printf '%s' '(id;date) > rscript.out' > /tmp/rscript.sh.$$

# copy the new identity public key and rscript.sh to the remote host

scp ~/.ssh/script_identity.pub "${RHOST}":/tmp/script_identity.pub.${UNIQUE}
scp /tmp/rscript.${UNIQUE} "${RHOST}":/tmp/script_identity.pub.${UNIQUE}

# setup remote user for script execution
# Create new user
# Move identity file and script to new user's home directory.
# Fix ownership and permissions

ssh -t ${RHOST} "sudo /bin/sh -cex '
        adduser --system --shell=/bin/sh ${RUSER};
        mkdir -m0700 ~${RUSER}/.ssh;

        mv /tmp/script_identity.pub.${UNIQUE} ~${RUSER}/.ssh/authorized_keys;
        mv /tmp/rscript.sh.${UNIQUE} ~${RUSER}/rscript.sh

        chmod -R 0600 ~${RUSER}/.ssh/;
        chmod    0700 ~${RUSER}/.ssh/;
        chmod 0700 ~${RUSER}/rscript.sh;
        chown -R ${RUSER}:nogroup ~${RUSER}/;
    '
"

# remove temp files

rm -rf /tmp/rscript.sh.${UNIQUE}

次のコマンドを実行して上記の設定をテストしますserver1

$ ssh -i ~/.ssh/script_identity.pub ruser@server2

ruser次に on のホームディレクトリを確認し、ファイルがserver2実際rscript.outに作成されたことを確認し、すべてが正しく設定されたことを示します。

その場合は、sudoersファイルを変更する前にsshコマンドを再度実行してリモートスクリプトを再実行して、出力とエラーの出力が目的のruser@server2:rscript.sh方法/path/to/myscriptで機能していることを確認してください。

新しいユーザーがパスワードなしでrootとして1つのスクリプトしか実行server2できないようにsudoersファイルを設定します。server2

ruser ALL = NOPASSWD: /path/to/myscript

おめでとうございます。これで、パスワードsshsudoシステムパスワードなしでリモートで特権スクリプトを安全に実行できるようになりました。

関連情報