CentOS 6.1 中的 sudo 不会像其他地方的 sudo 那样保留命令别名?

CentOS 6.1 中的 sudo 不会像其他地方的 sudo 那样保留命令别名?

在现有的 CentOS 6.1 安装中,如果我使用所有常用的命令别名在用户 shell(tcsh)中启动,并按照我通常的方式(在其他版本的 Linux 和 Mac OS X 中)获取 root shell,

sudo tcsh

我的命令别名是不是保存。这是不是我在其他操作系统上看到 sudo 的行为,包括旧版本的 RHEL(CentOS 就是从它派生出来的)。我在 CentOS 6.1 中尝试了不同的版本,例如

sudo -i tcsh
sudo tcsh -m
sudo -i tcsh -m

根据我对 sudo 和 tcsh 手册页的阅读,它应该会使其行为更像登录 shell,并且可能执行诸如解释我的 .cshrc 文件之类的操作,但没有任何效果。我的默认 shell 是 /etc/passwd 中的 /bin/tcsh;我尝试将 /etc/passwd 中的 root 条目切换为也使用 /bin/tcsh(默认为 /bin/bash),但没有任何变化。

我猜测这种行为可以通过 /etc/sudoers 中的某些内容来控制,但是我的 /etc/sudoers 是 CentOS 6.1 安装的库存文件,并且将它与(例如)Mac OS X 10.6 的 /etc/sudoers 文件进行比较并不能立即显示可以控制这种特定行为的明显设置。

我目前很困惑,希望得到帮助。

答案1

在 tcsh 中,别名是定义它们的 shell 实例的本地别名。您必须安排在每个子 shell 中重新定义它们。当 tcsh 启动时,它会从中读取命令$HOME/.tcshrc$HOME/.cshrc如果不存在);假设您在此处设置了别名。

该命令通过设置(和各种其他环境变量)为目标用户来sudo -i“模拟初始登录” 。$HOME

更远,最新版本如果该选项存在于 中,则sudo$HOME从环境中删除。env_reset/etc/sudoers

因此,要使 root shell 成为.tcshrc调用 sudo 的用户的源,请使用sudo -s,并将以下行添加到/etc/sudoers

Defaults env_keep += HOME

或者,您可以将以下内容添加到/root/.tcshrc

if ( $?SUDO_USER ) then
    source ~$SUDO_USER/.tcshrc
endif

答案2

当您使用 sudo 时,您进入的是 root shell,而不是您自己的 shell。您可以将别名添加到 /root/.cshrc,以便在您使用 sudo 时可以使用别名。

相关内容