Lin*_*eak 0 shell root sudo alias
考虑下面的 Bash 别名,我很快就想到了这个,但我没有时间进一步挖掘:
alias su='sudo -s'
Run Code Online (Sandbox Code Playgroud)
请注意,我正在运行 Bash,但我希望该解决方案是可移植的,因为我可能会在某个时候将其发布到 GitHub 上进行共享。
人们可能遇到的问题是在已经 root 的情况下运行它(该别名)。
演示:
$ su
[sudo] password for vlastimil:
# su
# su
#
exit
#
exit
#
exit
$
Run Code Online (Sandbox Code Playgroud)
有没有办法避免嵌套的 shell 会话?
重要提示:我为我的用户和根用户使用相同的别名文件,而不是分开的。该解决方案必须是可移植的 (POSIX)。
su
和sudo -s
是具有不同 API、语义和行为的不同命令,您不应将其中一个命令别名为另一个命令。
在这里,您似乎想要一个命令来启动 的登录root
shell ,但仅当从非特权 shell 调用时,所以我会编写一个名为的脚本,例如: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
Run Code Online (Sandbox Code Playgroud)
添加-u root
到sudo
命令(或系统上 uid 0 的用户名),如果这不是系统sudo
配置中的默认目标用户。
或者,如果您不想创建脚本,请通过包装该代码以将其rootshell() (<that-code>)
添加到您的 shell rc 文件中,使其成为 shell 函数(更改$0
为函数名称,因为并非所有 shell 都将函数名称放入 中$0
)。