仅在脚本中为系统管理员提供别名

仅在脚本中为系统管理员提供别名

我希望有几个别名/脚本仅供系统管理员使用。我知道我可以将脚本放在 /usr/sbin 中。至于别名,我可以在手动创建用户帐户后添加这些别名:

#as root
adduser username
passwd username
usermod -aG wheel username
cd /home/username
nano .bashrc
if [ -f /path/to/file ]; then
  . /path/to/file
fi

但是我更希望有一个包含这些别名的文件,这些别名将在系统管理员的 .bashrc 中引用,而不必手动编辑每个 .bashrc 文件。有什么建议吗,还是我只需要手动操作?

答案1

如果您确实希望脚本只能由系统管理员运行,那么最简单的方法是创建一个只能由系统管理员组读取的目录,并将相关机密放入其中。

答案2

您的发行版可能有一个 /etc/profile,用于在 /etc/profile.d 中查找文件;如果是这样,请在那里放置一个文件,为 Wheel 组的成员设置这些别名。在 Debian 系统上,相关代码是:

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

对于 bash,你只需要使用.sh扩展名来命名它;例如:

/etc/profile.d/admin-aliases.sh

# set up admin-only aliases if the user is a member of the wheel group
if id -Gnz "$LOGNAME" | grep -qxz wheel
then
  alias youralias=yourcommand
fi

解决id | grep方案借鉴自Stéphane Chazelas 的解决方案搜索具有完全匹配的特定用户组成员资格。这个想法是看看当前用户是否是wheel组的成员。 id -Gnz请求以null 分隔的列表中-G按名称 ( )列出的组 ( ) 列表。-n然后通过管道传输到grep,其标志为:

  • -q-- 不输出任何匹配项,仅将返回码设置为成功或失败
  • -x-- 要求整个“行”匹配,因此如果用户是名为的组的成员,我们就不会得到误报flywheel
  • -z-- 将输入解释为以空结尾的“行”列表

答案3

将其添加到 /etc/bash.bashrc 中:

if id -G | egrep "(^| )$(getent group wheel | cut -d: -f3)( |\$)" > /dev/null; then
    # set your aliases here
fi

相关内容