我们在使用linux系统的时候,有可能会有这样的需求,只允许某些用户执行指定的任务和指定的命令。这位用户在未经你同意时候,不能更改环境变量或者路径、不能访问除主目录以外的其他目录,同时也不能切换到其他用户。这位用户只能执行系统管理员分配指定的一些命令。这在多人共享使用的linux系统中非常有用。
如果你有这样的需求能实现么?当然!一个小兵经过实验,Restricted Shell可以很好的实现这个目的。使用Restricted Shell,我们可以很容易地限制其他用户对Linux系统的访问。一旦将某位用户设置为Restricted Shell的模式,则只允许他们执行有限的命令。在这篇简短的小文章中,一个小兵将讨论如何在Linux中实现这一点。
我上在CentOS7服务器上测试了这个功能,它在大多数linux版本上都可以正常使用。
什么是Restricted Shell ?
首先,我想需要知道什么是Restricted Shell。它不像Bash、Korn shell等一样是个单独的shell。需要使用“rbash”、“–restricted”、“-r”选项启动使之成为restricted shell。例如,Bourne shell可以用命令bsh-r作为restricted shell启动,Korn shell可以用命令ksh-r启动。
启用restricted shell模式后,除了限制该用户执行大多数命令和更改当前工作目录之外,还将对用户施加以下限制:
- 它不允许该用户执行cd命令。用户只能停留在当前工作目录中。
- 它不允许该用户修改$PATH、$SHELL、$BASH_E、$ENV等环境变量的值。
- 它不允许该用户执行包含/(斜杠)字符的程序。例如,不能运行/usr/bin/uname或./uname命令。但是,您可以执行uname命令。换句话说,只允许在当前路径中运行命令。
- 不能使用“>”、“>|”、“<>”、“>&”、“&>”和“>>”重定向运算符进行重定向输出。
- 它不允许该用户在脚本中脱离restricted shell模式。
- 它不允许该用户使用“set+r”或“set+o restricted”来关闭restricted shell模式。
使用Restricted ShellShell的具体步骤
首先,通过以下命令(有root权限才能使用)从Bash创建一个名为rbash的符号链接,如下所示。
# ln -s /bin/bash /bin/rbash
接下来,创建一个名为“yigexiaobing”的用户,将rbash作为其默认登录shell。
# useradd yigexiaobing -s /bin/rbash
为该新用户yigexiaobing设置好密码
# passwd yigexiaobing
在主文件夹(home)中为该新用户创建一个bin目录。
# mkdir /home/ yigexiaobing /bin
现在,我来设置该新用户(yigexiaobing)可以运行哪些命令。我将让该用户只能运行“ls”、“mkdir”和“ping”这些基本命令(是不是有点太苛刻了!)。当然,你可以指定任何你选择的命令。
按照如下的命令去设置:
# ln -s /bin/ls /home/ yigexiaobing /bin/ls
# ln -s /bin/mkdir /home/ yigexiaobing /bin/mkdir
# ln -s /bin/ping /home/ yigexiaobing /bin/ping
到这里,大家应该明白了为什么我在前面的步骤中创建了“bin”目录。除上述三个我指定的命令外,用户不能运行任何命令。
接下来,我还要通过以下设置防止用户修改.bash_配置文件。
# chown root. /home/ yigexiaobing /.bash_profile
# chmod 755 /home/ yigexiaobing /.bash_profile
通过vi工具编辑 /home/ yigexiaobing /.bash_profile 文件,按照如下图方式修改PATH 变量:
# vi /home/ yigexiaobing /.bash_profile
按下esc按键,然后打入:wq保存以上的修改。
现在,当该用户登录时,restricted shell(rbash)将作为默认登录shell运行,并读取.bash_profile文件,该配置文件将PATH设置为$HOME/bin,这样该登陆用户将只能运行ls、mkdir和ping命令。而且不允许该用户更改路径,同时不允许该用户更改配置环境以绕过限制。
这时候,当用户使用未经我们允许的命令进行操作时,系统会给出如下的警告:
-rbash: file.txt: restricted: cannot redirect output
好了,以上就是在Linux系统中限制其他用户的使用权限的具体步骤。