次のBashエイリアスを考えてみましょう。すぐに思ったけど、深く掘り下げる時間はなかった。
alias su='sudo -s'
私はBashを実行していますが、いつか共有するためにGitHubに公開できるので、このソリューションを移植可能にしたいと思います。
人々が遭遇する可能性のある問題は、すでにルートされている状態でそのプログラム(このエイリアス)を実行することです。
デモ:
$ su
[sudo] password for vlastimil:
# su
# su
#
exit
#
exit
#
exit
$
ネストされたシェルセッションを防ぐ方法はありますか?
重要:私は別のファイルではなく、ユーザーとルートに同じエイリアスファイルを使用します。ソリューションは移植可能でなければなりません(POSIX)。
ベストアンサー1
su
API、セマンティクス、動作は異なるコマンドなので、sudo -s
コマンドの1つを別のコマンドにエイリアスとして指定しないでください。
ここでは、ログインシェルを起動するコマンドが必要なように見えますが、root
権限のないシェルから呼び出されたときにのみ可能なので、次のスクリプトを作成します。root
sudo
rootshell
#! /bin/sh -
die() {
printf >&2 '%s\n' "$@"
exit 1
}
[ "$#" -eq 0 ] || die "Usage: $0
Starts a root shell, no argument accepted."
[ "$(id -u)" -eq 0 ] && die "You're already superuser!"
exec sudo -s
システム構成のデフォルトのターゲットユーザーでない場合は、コマンド(またはシステムのuid 0ユーザー名)-u root
に追加します。sudo
sudo
または、スクリプトを生成したくない場合は、rootshell() (<that-code>)
コードをシェルrcファイルに追加してコードをラップしてシェル関数にします($0
すべてのシェルが関数名をに入力するわけではないため、関数名に変更$0
)。