如何限制普通用户在 RHEL 中仅运行有限的命令集?

如何限制普通用户在 RHEL 中仅运行有限的命令集?

如何限制普通用户在 RHEL 中运行一组有限的命令?

答案1

您可以强制用户使用受限外壳

选项1 -如何:配置用户帐户以使用受限 Shell ( rssh )


选项#2 -这里是一个描述由红帽公司制作如何在 RHEL 中做到这一点

免责声明:这只是一个 hack,不建议用于实际生产使用

普通用户已被授予执行 /bin/ 和 /usr/local/bin/ 中可用的某些命令的权限,因此要删除这些权限并限制用户仅运行特定的命令集,以下步骤将很有用。

  1. 创建受限 shell。

    # cp /bin/bash /bin/rbash
    
  2. 修改 shell 的目标用户为受限 shell

创建用户时:

    # useradd -s /bin/rbash localuser

对于现有用户:

    # usermod -s /bin/rbash localuser

有关这方面的更多详细信息,请查看 KBase 文章 8349

然后用户 localuser 被 chroot 并无法访问其主目录 /home/localuser 之外的链接

  1. 在/home/localuser/下创建一个目录,例如programs

    # mkdir /home/localuser/programs
    
  2. 现在,如果您检查,用户 localuser 可以访问他/她允许执行的所有命令。这些命令取自 /home/localuser/.bash_profile 中设置的环境 PATH 变量。修改如下。

    # cat /home/localuser/.bash_profile  
    # .bash_profile  
    
    # Get the aliases and functions  
    if [ -f ~/.bashrc ]; then  
    . ~/.bashrc  
    fi  
    # User specific environment and startup programs  
    PATH=$HOME/programs  
    export PATH
    

这里 PATH 变量设置为 ~/programs 目录,因为 /usr/local/bin 绑定到 /home/username/bin ,而 /bin 绑定到 /home/username/bin ,因此替换它。

  1. 现在,使用用户名 localuser 登录后,用户也无法运行简单的命令。输出将是这样的,

    [localuser@example ~]$ ls  
    -rbash: ls: command not found  
    [localuser@example ~]$ less file1  
    -rbash: less: command not found  
    [localuser@example ~]$ clear  
    -rbash: clear: command not found  
    [localuser@example ~]$ date  
    -rbash: date: command not found  
    [localuser@example ~]$ ping redhat.com  
    -rbash: ping: command not found
    
  2. 现在创建用户 localuser 在目录 /home/localuser/programs 中执行所需的命令的软链接

    # ln -s /bin/date /home/localuser/programs/  
    # ln -s /bin/ls /home/localuser/programs/  
    # ll /home/localuser/programs/  
    total 8  
    lrwxrwxrwx 1 root root 9 Oct 17 15:53 date -> /bin/date  
    lrwxrwxrwx 1 root root 7 Oct 17 15:43 ls -> /bin/ls
    

这里采用了 date 和 ls 命令的示例

  1. 再次使用用户 localuser 登录并尝试执行命令。

    [localuser@example ~]$ date  
    Mon Oct 17 15:55:45 IST 2011  
    [localuser@example ~]$ ls  
    file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 programs  
    [localuser@example ~]$ clear  
    -rbash: clear: command not found
    
  2. 还可以添加一个步骤来限制用户对其 .bash_profile 进行任何修改,因为用户可以更改它。

运行以下命令使用户 localuser 的 .bash_profile 文件不可变,以便 root/localuser 无法修改它,直到 root 从中删除不可变权限。

    # chattr +i /home/localuser/.bash_profile

要删除不可变标签,

    # chattr -i /home/localuser/.bash_profile

使文件 .bash_profile 不可变,以便用户 localuser 无法更改环境路径。

相关内容