私はAmazon EC2インスタンスで実行され、rootアクセスを必要とする特定のコマンドを実行するアプリケーションを開発しています。問題は、異なる仮想マシンが異なる方法でルートアクセスを提供することです。たとえば、一部の仮想マシンはルートアカウントへの直接アクセスを許可し、他の仮想マシンはルートではなくプライマリユーザーにのみsudoアクセスを許可します。
これで、すべてのコマンドの前に「sudo」を追加するオプションを追加することで、上記の例を簡単に解決できます。しかし、私はUnixに慣れておらず、プログラムを準備する必要があるroot権限を取得する他の方法があるかどうかを知りたいです。 suとsudoは十分合理的ですか?
答え1
sudoに似たツールがいくつかあります(calife、op、superなど) - 参照システム管理者(root)でコマンドを実行する方法- しかし、Unixシステムに触れることなく、Unixシステムから一生を送ることができます(すべてsudoに置き換えられました)。実際にスクリプトをrootとして呼び出す必要がある場合は、すべてのシステムがパスワードのないsudoを持つように準備するか、rootとしてsshログインを許可します。 2つの間に大きなセキュリティの違いはありません。いずれにしても、スクリプトにはルートアカウントにアクセスするために必要なすべての資格情報が必要です。
スクリプトが特定のコマンドのみを実行できるようにするには、コマンドの特定のエントリを使用するか、行のある特定の/etc/sudoers
キーcommand=
を使用します~root/.ssh/authorized_keys
。
答え2
- POSIXファイルシステムは通常setuid / setgidビットを実装します。これは安全に実行するのが難しいため推奨されませんが、次のように機能します。
。
cp /usr/bin/id /tmp/rootid
sudo chown root /tmp/rootid
sudo chmod u+s /tmp/rootid
/tmp/rootid
綿密にUID大地
sudoとsuの操作は注意するか、
sudo -E
環境su -
と対話します。env -i
ダメージを避けるために、すべてのsu呼び出しを明示的にラップする方が良いかもしれません。ソラリスはRBACOpenSolarisは互換性のためにsudoパッケージを使用しましたが、
答え3
スクリプトからコマンドを実行する場合は、-t
sshにオプションを渡します。
ssh -i file.pem -t myhost “sudo -n myscript”
sudo オプションを使用すると、-n
sudo はパスワードの入力を求められません。コマンドにパスワードが必要な場合は、エラーメッセージが表示されます。
EC2 インスタンスへのアクセスに使用できます。