如何限制用户对Linux系统的访问权限

时间:2020-03-21 11:44:43  来源:igfitidea点击:

使用受限制的shell,我们可以轻松限制用户对Linux系统的访问权限。
将用户放在受限制的shell模式下,允许它们仅执行有限的命令集。
在这篇简短的教程中,我们将讨论如何在Linux中执行此操作。
我在CentOS 7最小服务器上测试了本教程。
但是,它将适用于大多数unix的分布。

什么是受限制的shell ?

首先,让我澄清完全限制的shell是什么。
它不是像Bash,Korn shell等的单独shell 。
如果我们使用"rbash"启动任何现有shell,"--recrestics","-r"选项,那么它将变为受限制的shell。
例如,可以使用命令BSH -R和具有命令KSH -R的korn shell启动Bourne shell。

受限制的shell将限制用户执行大多数命令并从更改当前工作目录。
受限制的shell将对用户施加以下限制:

  • 它不会允许我们执行CD命令。所以你不能去任何地方。我们只需留在当前的工作目录中。
  • 它不会允许我们修改$path,$shell,$bash_env或者$env环境变量的值。
  • 它不允许我们执行包含一个/(斜线)字符的程序。例如,我们无法运行/usr/bin/uname或者./uname命令。但是,我们可以执行uname命令。换句话说,我们允许我们仅在当前路径中运行命令。
  • 我们无法使用'>','> |','<>','>&','&>'和'>>'重定向运算符来重定向输出。
  • 它不会让我们在脚本中退出受限制的shell模式。
  • 它不允许我们关闭"设置+ R"或者"设置+ O限制"的受限Shell模式。

当大量用户使用共享系统时,这可能非常有用。
因此,如果要允许用户仅执行特定命令,则受限制的shell是一种方法来执行此操作。

使用受限制的shell限制用户对Linux系统的访问

首先,使用Bash创建名为RBASH的符号链接,如下所示。
以下命令应以root用户身份运行。

# ln -s /bin/bash /bin/rbash

接下来,使用RBASH创建名为"OniToro"的用户作为他/她的默认登录shell。

# useradd theitroad -s /bin/rbash

将密码设置为新用户。

# passwd theitroad

在新用户的主文件夹中创建一个bin目录。

# mkdir /home/theitroad/bin

现在,我们需要指定用户可以运行的命令。

其中我将让用户仅运行"LS","MKDIR"和"ping"命令。
我们可以分配我们选择的任何命令。

为此,请运行以下命令:

# ln -s /bin/ls /home/theitroad/bin/ls
# ln -s /bin/mkdir /home/theitroad/bin/mkdir
# ln -s /bin/ping /home/theitroad/bin/ping

现在,我们了解为什么我们在较早的步骤中创建了"bin"目录。
除了上述三个命令之外,用户无法运行任何命令。

接下来,防止用户修改.bash_profile。

# chown root. /home/theitroad/.bash_profile
# chmod 755 /home/theitroad/.bash_profile

编辑/home/theitroad/.bash_profile文件:

# vi /home/theitroad/.bash_profile

修改如下所示的路径变量。

[...]
PATH=$HOME/bin
[...]

按ESC键和类型:WQ保存并关闭文件。

现在,当用户登录时,受限制的shell(rbash)将作为默认登录shell运行并读取.bash_profile,它将设置为$home/bin的路径,以便用户只能运行LS,MKDIR和ping命令。
受限制的shell将不允许用户更改路径,并且对.bash_profile的权限将不允许用户更改环境以绕过下一个登录会话期间的限制。

验证rbash.

现在,从root用户注销并使用新创建的用户登录,例如:在我们的情况下onatroad。

然后,运行一些命令以检查它是否有效。
例如,我想清除终端。

为此,我运行了:

$clear

示例输出:

-rbash: clear: command not found

我们无法使用CD命令更改为不同的目录。

$cd /root

示例输出:

-rbash: cd: restricted

我们也无法使用>运算符重定向输出。

$cat > file.txt

示例输出:

-rbash: file.txt: restricted: cannot redirect output

允许用户"theitroad"仅使用我们分配的命令(当然是系统管理员)。
在我们的情况下,用户可以执行LS,MKDIR和Ping命令。

$ls
$mkdir theitroad
$ping -c 3 google.com

除了这三个命令之外,用户无法执行任何内容。
他/他完全在你的控制下。

允许向用户提供新命令

如果要为用户分配更多命令,请从当前用户注销并再次退回到root用户,并分配如下所示的命令。

例如,要允许用户(IniToroad)执行RM命令,请将以下命令用作root用户。

# ln -s /bin/rm /home/theitroad/bin/rm

现在用户可以使用"rm"命令。