AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 719111
Accepted
αғsнιη
αғsнιη
Asked: 2016-01-10 09:13:21 +0800 CST2016-01-10 09:13:21 +0800 CST 2016-01-10 09:13:21 +0800 CST

防止所有命令被定义为别名

  • 772

有没有办法防止所有命令被定义为别名?

例如,用户不应该能够将rm任何其他命令(Ubuntu 默认命令)定义为别名。

bash
  • 4 4 个回答
  • 2106 Views

4 个回答

  • Voted
  1. Best Answer
    muru
    2016-01-10T09:48:08+08:002016-01-10T09:48:08+08:00

    您无法阻止用户定义他们喜欢的任何别名。考虑:

    1. 您在 中禁用别名/etc/bash.bashrc。他们在任何他们选择的地方启用它。
    2. 您删除所有提及的别名/etc/bash.bashrc,以及所有~/.bashrc和~/.bash_aliases通过脚本。他们将别名放在另一个文件中并获取它。
    3. 您运行一个PROMPT_COMMAND禁用某些别名的命令。他们重新定义或取消定义PROMPT_COMMAND。
    4. 您捕获DEBUG和取消定义别名。他们移除了陷阱。
    5. 您将调用时来源的所有文件都chown 到root。他们使用另一个文件并手动获取它作为他们运行的第一个命令。
    6. 您禁用内置函数unset,builtin并且enable; 做alias一个函数;declare -rf alias防止用户修改功能;并导出函数。它们运行/bin/bash并启动一个新的 shell --rcfile,--init-file现在启用了所说的内置函数。
    7. ...

    您可以在编译时禁用别名,然后由您来确保 bash 保持最新并确保您不受下一次 Shellshock 的影响。当然,用户可以构建自己的 bash。

    • 24
  2. CodeGnome
    2016-01-10T12:12:29+08:002016-01-10T12:12:29+08:00

    TL;博士

    阻止用户创建别名的唯一方法是为他们提供不支持别名的 shell。这通常是一个 X/Y 问题,其中 X 实际上是一个威胁模型,应该通过适当的控制或架构来解决,而不是在为用户提供共享系统上的 shell 之后尝试事后解决问题。

    下面,我提供了一个技术上正确的答案,以及一些关于这将解决和不会解决哪些问题的指导。我还提供了一些关于替代控制的额外指导。

    使用 Bash 受限外壳

    您可以通过将 rbash 指定为用户的登录 shell来使用 Bash 的受限shell。例如:

    foo:x:2001:2001:restricted user:/home/foo:/bin/rbash
    

    然后,您必须禁用该用户的内置别名,最好不要破坏其他人的外壳。例如,您可以将以下内容添加到/etc/profile.d/rbash.sh等文件中:

    # Limit effect to users in a specific UID range.
    if ((UID >= 2000)) && ((UID < 3000)); then
        # Check shell options; disable alias builtins when shell is restricted.
        if [[ $- =~ r ]]; then
            enable -n alias
            enable -n unalias
        fi
    fi
    

    注意事项

    除非您已将用户放入 chroot 监狱或为他们提供不包括访问其他 shell的修改后的PATHbash ,否则没有什么可以阻止用户在提示符下简单地键入并获得不受限制的 shell。

    此外,通过设计,受限 shell 可以防止许多常见活动,例如更改目录:

    $ cd /tmp
    rbash: cd: restricted
    

    但不会阻止PATH中的其他脚本或程序这样做。这意味着您必须仔细设计用户的环境,特别是您需要防止他们能够修改其启动文件中的PATH,因为即使 rbash 将PATH设为只读,它也会在初始化后这样做。

    更好的选择

    即使您使用 rbash,您也需要将其作为更广泛的控件集的一部分。一些例子可能包括:

    • 通过在/etc/bash.bashrc文件中提供默认别名(例如、和)来防止非技术用户意外调用危险命令。rm -imv -icp -i

      • 鉴于您的原始示例,这可能是最明智的解决方案。
      • enable -n alias如果你愿意,你可以把它和它结合起来。
      • 这不会阻止知识渊博的用户更改别名,但它可能足以阻止非技术用户做任何你关心的事情。
    • 用于保护文件和目录的传统 Unix 权限或 POSIX ACL。

    • 执行单个非交互式命令的登录。例如:

      foo:x:2001:2001:run foo.sh:/home/foo:/usr/local/bin/foo.sh
      
    • 使用 per-key SSH 强制命令。例如:

      # ~foo/.ssh/authorized_keys
      command="/usr/local/bin/foo.sh" [remainder of line]
      
    • 使用带有条件匹配块的OpenSSH ForceCommand选项。

    • 使用为您的特定用例设计的特殊工具,例如gitolite或scponly 。

    • 使用chroot 监狱。

    • 使用 Xen、OpenVZ、LXC、VMware、VirtualBox 等虚拟化技术或其他技术来提供隔离环境。

    准确定义威胁模型后,您可以确定最适合您的用例的控制措施。如果没有更有意义地了解为什么要防止混叠(例如,它解决了哪些实际问题?),您将无法选择最合适的控件。

    • 10
  3. Sergiy Kolodyazhnyy
    2016-01-10T10:00:58+08:002016-01-10T10:00:58+08:00

    正如穆鲁的回答所示,这是一项毫无意义的努力。但是有一些选择,但它们并不完美。

    根据bash手册,函数总是优先于别名,因此我们可以执行以下操作:

    xieerqi@eagle:~$ function alias { echo "Aliases are no-no" ; }
    xieerqi@eagle:~$ alias TEST='rm'
    Aliases are no-no
    

    您可以将函数定义放入系统范围内.bashrc,但是正如 muru 指出的那样,聪明的用户会找到方法来获取别名bashrc,例如通过获取不同的文件。

    我玩过的另一个想法是enable内置的。 alias是一个内置的外壳,并且bash有很好的enable命令,允许启用或禁用内置。例如,这是我禁用alias.

    xieerqi@eagle:~$ enable -n alias
    xieerqi@eagle:~$ alias
    No command 'alias' found, did you mean:
     Command '0alias' from package 'zeroinstall-injector' (universe)
    alias: command not found
    xieerqi@eagle:~$ alias TEST='rm'
    No command 'alias' found, did you mean:
     Command '0alias' from package 'zeroinstall-injector' (universe)
    alias: command not found
    xieerqi@eagle:~$ enable alias
    xieerqi@eagle:~$ alias
    alias egrep='egrep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias grep='grep --color=auto'
    alias l='ls -CF'
    alias la='ls -A'
    alias ll='ls -alF'
    alias ls='ls --color=auto'
    xieerqi@eagle:~$ 
    

    同样,bashrc在这里使用系统范围是一个选项。

    • 5
  4. waltinator
    2016-01-10T10:00:52+08:002016-01-10T10:00:52+08:00

    您可以在调用 builtin 之前定义 (in /etc/profile) 一个调用的函数,该函数alias执行您想要的验证(可能使用type -p)(毕竟“Ubuntu 默认命令”是“可执行文件”) ,但是正如其他人指出的那样,您的用户可以获得周围。为什么不获取一组不同的用户,或者教育他们(“定义一个覆盖命令的方法是一种很好的自爆方式,并引起混乱(例如,为什么提示我输入密码?))?$PATHaliasaliasls

    • 0

相关问题

  • 同时复制到两个位置

  • 如何在 shell 脚本中创建选择菜单?

  • 从 bash 迁移到 zsh [关闭]

  • bashrc 还是 bash_profile?

  • 备份 bash 脚本未压缩其 tarball

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve