(这是一篇面向零基础读者的教程)
在铺垫了端口号的预备知识之后,下面我们讲讲搭建Jupyter服务器的另外一个前置工作——如何创建Linux用户。
下面我们的实验环境默认为CentOS 7。事实上,即使你用的是Ubuntu,甚至Windows,影响也不甚大,配置的过程大同小异。如果有差异,请自行请教谷老师或必老师。
2.2.1 创建Linux用户(可选项)
为 Jupyter Notebook创建一个独立的Linux 账号,并非必需。但好处在于,我们可以在隔离的环境下操作 Jupyter应用,和其他用户的环境互不干扰。
现在假设你有个服务器,其IP地址为:192.168.31.176。显然,这是一个局域网的服务器地址。但无需担心,在云平台上公网的服务器配置流程,与下面的流程完全一样。
如果你能物理接触到这台服务器,自然善莫大焉,这样你就可以直接使用图形界面安装Anaconda、创建用户等操作就好了。
现在,我们假设,作为配置方的你,也是不能直接接触到这台服务器(比如说,如果你租了阿里云或微云的服务器,天各一方的你,是没有办法物理接触到这个服务器),通常的办法是,通过SSH(Secure Shell 之缩写)来远程登录,并操作访问服务器。
Windows用户更幸福一点,可使用界面更为友好的WinSCP/Xshell来访问。下面我们详细说说如何在Linux平台创建用户。
(1)远程登录服务器
首先,为了操作远程服务器,我们首先要做的事情,便是要登录到那个远程服务器。通常来说,作为配置服务器的你,会有超级管理员root账号的。于是,我们先以root身份远程SSH登录这个服务器:ssh root@192.168.31.176
然后,按照提示,输入用户root对应的密码。
这里有个细节,需要初学者注意:在Linux/Mac操作系统环境下,在终端输入密码,屏幕并没有任何提示,包括那个我们熟悉的隐藏密码的星号(*)也不会显示。这样一来,你可能会认为自己没有输入上,但实际上,Linux/Mac终端会默默记录你的每次键盘敲击。
在输入正确密码后,进入远程服务器终端。
(2)创建新用户
在终端,创建一个新用户的方法,很简单。假设我们要创建的用户名为jpnb(当然,对于这个用户名,你可以任意更改为自己喜欢的名字):# 可以把 jpnb替换为任意你想要的用户名,下同
adduser jpnb
如前所述,本讲中的操作,都是假定你是root身份。如果你不是root身份登录,需要借助sudo权限。那么上述命令就为:『sudo adduser jpnb』,然后输入相应的密码即可完成用户的创建。
我们可以用如下指令来显示这个用户jpnb的信息(如图3):[root@centos-7 ~]# cat /etc/passwd |grep jpnb
jpnb:x:1001:1001::/home/jpnb:/bin/bash图3 查看新建用户的信息
上述信息包含了该用户的基本信息,如用户名,密码(为了加密,有没有设置密码都会显示x),用户ID,用户所在组的ID,用户家目录(/home/jpnb)以及shell命令所在的目录。
(3)为新用户设置密码
下面的工作就是为这个用户配置一个密码,使用passwd指令即可完成:passwd jpnb # jpnb是你新建的用户名
然后在为新用户jpnb设置新密码,如果密码过于简单,Linux系统是不答应的。
(4)添加sudoer名单
在后期,jpnb这个账号需要在脱离root账号下独立工作,比如安装租入Python、TensorFlow、Keras等应用程序。有的安装流程,可能需要管理员权限,如果每次安装软件,都需要root亲自出马,未免过于繁琐。
因此,root可以做部分放权,即创建一个sudoers用户组,它的全称就是“super user doers”,顾名思义,就是“超级用户执行者(doer)”。
sudo命令是Linux提供的一个权限提升命令,它允许普通用户临时以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令,就好像是 root 亲自执行一样。
但是,一般用户是没有sudo执行权限的,如果想有这个权限,这个必须先把这个新建的用户添,加进sudoers的“白名单”,其所在路径为:/etc/sudoers。
由于这个白名单非常重要,因此,不能轻易修改它。通常,它的文件属性是对所有人(包括root)是只读(r)的。我们可以用ls -l命令查看这个文件的属性。
为了修改这个文件,我们首先要修改这个文件的属性,添加可写权限(w):chmod u+w /etc/sudoers
于是,下面的工作就是修改这个白名单。下面我们以root身份用vim来修改这个白名单:vim /etc/sudoers
然后进入如图4所示的界面。图4 sudoers添加白名单
在sudoers文件的第100行左右的有这么一行:root ALL=(ALL) ALL
复制改行(yy),然后粘贴之(p),然后将复制的第二行中的root,修改为我们前面创建的用户名jpnb 。jpnb ALL=(ALL) ALL
这样一来,jpnb 基本具备和root一样的权限。
然后,保存退出(wq)
接下来,不忘了一个重要的操作,撤销文件的写权限:chmod u-w /etc/sudoers
如果忘记撤销这个写权限,jpnb的在sudoers中的添加是无效的。原因并不复杂,这是因为,只有白名单sudoers是只读的,Linux系统才认为它是可信的,否则谁都能「填上一笔」,管理权限也未免太多随意。
由于我们已经给新用户jpnb添加进sudoer用户组,此后的工作(如安装诸如Python、TensorFlow等)都是以用户jpbn的身份进行的。
如果当前是root用户,不妨用“su jpnb”来切换用户。这里的命令“su”是“swich user(切换用户)”简写。
到此为此,我们把如何创建Linux用户的预备知识讲解完毕,下一讲,我们将聊聊如果在终端安装Python、TensorFlow等软件。
「人生没有白走的路,每一步都算数」,让我们慢慢进入配置Jupyter服务器的佳境。
本文部分节选自《深度学习之美:AI时代的数据处理与最佳实践》(张玉宏著,电子工业出版社,7月出版)。更多理论推导及实战环节,请参阅该书。