ほとんどのコマンドがroot権限を必要としないシェルスクリプトを書いています。スクリプトは管理者が実行する必要があります。しかし、root権限を必要としないスクリプトの部分については、通常のユーザーアカウントに「su」できるようにしたいと思います。これにより、root権限で実行される操作の数が最小限に抑えられ、セキュリティが向上します。
それを行うLinuxコマンドはありますか?
どのユーザーアカウントでもsuを実行できることはわかっていますが、特定のユーザー名がマシンに存在するという仮説に依存したくありません。
スクリプトの作成時に一時的なアカウントを作成し、スクリプトの最後で削除することを考えました。しかし、このアカウントにパスワードを設定しない場合、攻撃者はアカウントの有効期間が短い間、それを使用することができないのですか?ユーザーShellを/ sbin/nologinに設定できません。 シェルスクリプトでコマンドを実行する アカウントに「訴える」。
ご協力いただきありがとうございます。
私は個人的にあなたの戦略を逆転させ、スクリプトを非特権ユーザーとして実行し、Sudoはroot特権を必要とするコマンドを実行するために使用しました。 rootとしてスクリプトを実行する必要がある特定の理由はありますか?
ただし、質問に答えるには、-cフラグを使用して、ユーザーとして特定のコマンドを実行します。
su someuser -c "touch /tmp/file"
リファレンス: http://linux.die.net/man/1/s
特定のユーザー名がマシンに存在するという仮説に依存したくありません。
スーパーユーザーであることには利点があります... :-)
scriptuser_created=no
scriptuser=myuser
if ! id "$scriptuser" &>/dev/null
adduser --system "$scriptuser"
scriptuser_created=yes
fi
Sudo -u "$scriptuser" command1
Sudo -u "$scriptuser" command2
Sudo -u "$scriptuser" command3
if [ yes = "$scriptuser_created" ]; then
userdel "$scriptuser"
fi
Suは代理ユーザーの略です。 suを使用して、別のユーザーに変更できます。したがって、スーパーユーザーで別のユーザーとして何かを実行したい場合は、ユーザー名をsuにしてコマンドを実行します。
このような問題に対する従来の解決策は、問題のプログラムが必要とするアクセスレベルとアクセス許可を備えた永続的なユーザーアカウントを存在させることです。ネットワークサービス(Apacheなど)は、通常のインタラクティブユーザーの権限とは異なり、ルートよりもはるかに少ない権限を持つ独自のユーザーとして実行されることがよくあります。
Rootが最初にスクリプトを実行している場合、ユーザーがパスワードを持っている場合でも、他のユーザーにsuするためのパスワードを提供する必要はありません。
#! /bin/bash
# (GPL3+) Alberto Salvia Novella (es20490446e)
execute () {
function="${1}"
command="${2}"
error=$(eval "${command}" 2>&1 >"/dev/null")
if [ ${?} -ne 0 ]; then
echo "${function}: $error"
exit 1
fi
}
executeAsNonAdmin () {
function="${1}"
command="${2}"
eval setPasswordAsker="Sudo_ASKPASS=/usr/libexec/openssh/ssh-askpass"
run="runuser ${Sudo_USER} --session-command=\"${setPasswordAsker}\" --command=\"${command}\""
execute "${function}" "${run}"
}
executeAsNonAdmin "" "${@}"