受限的shell是什么?
受限制的shell将限制用户执行大多数命令和更改当前工作目录,受限制的shell将对用户施加以下限制:只能停留在当前工作目录中它不允许你修改$PATH,$SHELL,$BASH_ENV或者$ENV环境变量
它不允许你执行包含/(斜线)字符的程序,例如,不能运行/usr/bin/uname或./uname命令,但是,可以执行uname命令,换句话说,只允许在当前路径中运行命令
不能使用重定向输出'>'',''> |'',''< >'',''> &'',''& >'>和>'> >'>重定向操作符
它不允许你在脚本中退出受限制的shell模式
它不允许使用shell或'set +r'来关闭受限制的'set +o restricted'模式
这在大量用户使用共享系统时非常有用,如果想允许用户只执行特定的命令,受限的shell是实现此目的的一种方法。
使用受限制的Linux系统限制用户访问shell
首先,从Bash创建一个rbash的符号链接,如下所示,以下命令应作为root用户运行。# ln -s /bin/bash /bin/rbash
接下来,使用rbash创建一个名为"helplib"的用户作为他/她的默认登录Shell。# useradd helplib -s /bin/rbash
设置新用户的密码。# passwd helplib
在新用户的主文件夹中创建一个bin目录。# mkdir /home/helplib/bin
现在,我们需要指定用户可以运行的命令。
在这里,我将让用户只运行"ls","mkdir"和"ping"命令,当然,你可以指定命令。
为此,请运行以下命令:# ln -s /bin/ls /home/helplib/bin/ls# ln -s /bin/mkdir /home/helplib/bin/mkdir# ln -s /bin/ping /home/helplib/bin/ping
现在,你明白了为什么我们在前面的步骤中创建了"bin"目录,除以上三个命令外,用户不能运行命令。
接下来,防止用户修改,bash_profile,# chown root. /home/helplib/.bash_profile# chmod 755 /home/helplib/.bash_profile
编辑/home/helplib/. bash_profile文件:# vi /home/helplib/.bash_profile
修改PATH变量,如下所示。[...]
PATH=$HOME/bin
[...]
按ESC键并键入 :wq保存并关闭文件。
现在,当用户登录时,restricted shell ( rbash )将作为默认登录shell运行并读取.bash_profile文件,它将PATH设置为$HOME/bin,这样用户将只能运行ls 、 mkdir和ping命令。
验证Rbash
现在,从root用户注销,并使用新创建的用户重新登录
然后,运行一些命令来检查它是否有效,例如,想清除终端。
为此,我运行了:$ clear
示例输出:-rbash: clear: command not found
不能使用cd命令切换到不同的目录。$ cd /root
示例输出:-rbash: cd: restricted
不能使用>运算符重定向输出。$ cat > file.txt
示例输出:-rbash: file.txt: restricted: cannot redirect output
用户"helplib"只允许使用(系统管理员当然)分配的命令,在例子中,用户可以执行ls,mkdir和ping命令。$ ls$ mkdir helplib$ ping -c 3 google.com
除了这三个命令,用户无法执行任何操作,用户完全在你的控制之下。
允许用户使用新命令
如果要为用户分配更多命令,请从当前用户注销,然后再次返回到root用户,并按如下所示分配命令。
例如,允许用户(即helplib )要执行rm命令,请以root user身份运行以下命令。# ln -s /bin/rm /home/helplib/bin/rm
现在用户可以使用"rm"命令。
有关详细信息,请参阅下面的链接中的手册页。