对于电脑而言,特别是公司里给大家分配的公共电脑,经常会出现一台电脑多个人共同使用的场景。但是电脑里的数据都是公司里的无形财富,万一数据遭遇破坏,可能会引起很多不必要的麻烦。如何保证电脑里重要数据的安全,限制电脑使用者的一些权力?
在 Linux系统下,我们可以使用 Restricted Shell
这个神器来限制某个用户的使用权,从而保证系统里的数据安全。
什么是Restricted Shell?
首先,来先给大家解释一下什么是 Restricted Shell
。这玩意它不是一个独立的 Shell (比如 Bash 、zsh 等),它是相当于所使用的 Shell 的一种限制级模式。如果你想将你所使用的 Shell 切换为 rbash 模式,那么可以在 Shell 启动的时候加上 -restricted
,或 –r
选项,这样处理之后它就会以 Restricted Shell 模式启动。
例如,你现在的是 Bash ,那么你可以使用 bsh -r
命令将 Bourne Shell 以 Restricted Shell 模式启动;如果你使用的是 ksh,那么就可以使用 ksh -r
命令将 kour shell 作为 Restricted Shell 启动。
当你使用 Restricted Shell 时,大多数的命令将被限制,甚至连当前工作目录都无法更改。具体的限制有如下:
- 不能执行 cd 命令。所以我们只能在当前目录下工作,其它目录都无法进入;
- 不能修改 $PATH,$ENV,$HOME 或 $SHELL 等环境变量的值。
- 不能执行包含
/
字符的程序。例如,我们无法执行 /usr/bin/uname 或 ./uname 命令或程序。但是,我们依然可以运行 uname 命令。也就是说,当前目录以外的程序或命令是无法被执行的。 - 也不能使用
>
、>|
、、
>&
、&>
和>>
重定向运算符进行重定向输出。 - 也不能我们在脚本中或其它方式关闭 Restricted Shell 模式。
- 也不能允许使用
set+r
或set+o restricted
等方式退出 Restricted Shell 模式。
通过使用Restricted Shell限制用户使用系统
首先,在 bash 所在位置创建一个名为 rbash 的符号链接,命令如下。以下命令需以 root 用户身份运行。
# ln -s /bin/bash /bin/rbash
接下来,创建一个新用户,比如: harry,并将默认 Shell 设置为 rbash 模式:
# useradd harry -s /bin/rbash
然后设置新用户密码。
# passwd harry
在新用户的文件夹内创建一个bin目录。
# mkdir /home/harry/bin
现在,我们把允许用户运行的命令放在 bin 目录里。
比如,我们允许用户仅运行 ls 、 mkdir 、和 ping 这三个命令。当然,你还可以添加其它你允许用户运行的命令。
添加命令,其实就是给这个命令创建一个软件链接:
# ln -s /bin/ls /home/harry/bin/ls
# ln -s /bin/mkdir /home/harry/bin/mkdir
# ln -s /bin/ping /home/harry/bin/ping
这时大家应该明白了在前面的步骤中创建了 bin 目录的意图。除了 bin 目录里的命令之外,用户是无法运行其它任何命令的。
接下来,让我们来保护 .bash_profile 文件,防止用户修改。
# chown root /home/harry/.bash_profile
# chmod 755 /home/harry/.bash_profile
再接下来,编辑 /home/harry/.bash_profile 文件,将 bin 目录添加进去:
# vi /home/harry/.bash_profile
修改PATH变量。
[...]
PATH=$HOME/bin
[...]
按 ESC 键,然后键入 :wq
保存并关闭 .bash_profile 文件。
现在,当用户登录时,默认 Shell 就是 Restricted Shell(rbash)模式,它在刚运行的时候就会读取 .bash_profile 文件,将系统 PATH 环境变量设置为文件中 $HOME/bin ,这样用户只能运行 ls,mkdir 和 ping 这三个命令。
在 Restricted Shell 模式下用户不允许更改 PATH 值,同时 .bash_profile 文件的权限也不允许修改,这样用户就不能通过更改环境来绕过限制。
确认新用户是否受限
现在,我们注销当前用户,然后以新创建的用户(即harry)的身份重新登陆。
现在我们随便运行一些命令,看看命令是否可以被执行。
例如我们想要清除屏幕,可以运行以下命令:
$ clear
这时终端会输出以下信息:
-rbash: clear: command not found
好家伙,真的不能运行!那我们再来试试看能不能切换到其它目录。
$ cd /root
这时终端会输出以下信息:
-rbash: cd: restricted
不出意料,依然受到限制!不灰心,再试一下,看看能不能使用 > 运算符重定向输出。
$ cat > file.txt
终端输出:
-rbash: file.txt: restricted: cannot redirect output
看来其它的命令真的是没办法使用了。那我们设置的允许新用户使用的三个命令,是否真的允许被运行?我们再来试试确认一下。
$ ls
$ mkdir harry
$ ping -c 3 baidu.com
一切正如我们所期待的一样!现在除了我们所设置的几个命令,新用户 harry 无法执行其它任何命令,系统完全在我们自己的掌控之下!
添加其它允许使用的命令
假如之前所设置的允许新用户使用的命令太少了满足不了需求,那要如何再设置一些新的命令?我们可以重新登录到 root 用户,再按下面的方法添加新命令。
例如,想要添加 rm 命令,就以 root 用户身份运行以下命令:
# ln -s /bin/rm /home/harry/bin/rm
添加成功之后,用户就被允许使用 rm命令。同样的方法,你可以添加任何你允许新用户使用的命令,这样,新用户能使用的命令都由你说了算啦!
小结
我们可以通过简单的几个步骤,就可以限制一个新用户的操作,使其在自己的家目录下工作,也只允许执行指定命令,保证Linux系统数据的安全。当然,这种方式不是最万能的,最保险的方式还是要把重要数据拷备出来保存,这样就可以降低数据出意外的概率。