CentOS 默认只有一个 root 用户,但是 root 用户的权限过大,而且不利于多人协作,基于权限管理和安全的原因,我们为系统新建一个用户,并且使能其 SSH 登录,同时禁止 root 用户的登录;

基于CentOS Linux release 7.6.1810 (Core)实践;

新建用户

在 CentOS 中,adduser和useradd没有区别:

[root@centos_7_6_1810 ~]# ll /usr/sbin/ | grep userlrwxrwxrwx 1 root root   7 Jun 24 10:14 adduser -> useradd-rwxr-xr-x. 1 root root  33104 Aug 3 2017 fuser-rwxr-xr-x. 1 root root  15832 Apr 13 2018 lnewusers-rwxr-xr-x. 1 root root  15752 Apr 13 2018 luseradd-rwxr-xr-x. 1 root root  11576 Apr 13 2018 luserdel-rwxr-xr-x. 1 root root  19896 Apr 13 2018 lusermod-rwxr-xr-x 1 root root  76232 Mar 14 2019 newusers-rwxr-xr-x 1 root root  33072 Mar 14 2019 runuser-rwxr-xr-x. 1 root root  19720 Apr 11 2018 sasldblistusers2-rwxr-x--- 1 root root  118224 Mar 14 2019 useradd-rwxr-x--- 1 root root  80400 Mar 14 2019 userdel-rwxr-x--- 1 root root  113856 Mar 14 2019 usermod-rwsr-xr-x. 1 root root  11376 Oct 31 2018 usernetctl

从上面的命令中可以看出:adduser只不过是useradd命令的一个软连接;

关于软连接,你可以暂时把它理解成 Windows 系统中的快捷方式;

使用useradd命令创建新用户:

[root@centos_7_6_1810 ~]# useradd luizyao[root@centos_7_6_1810 ~]# ls /home/luizyao

在大多数 Linux 的发行版本中,useradd命令并不会在/home/下创建对应的用户目录,如果想要创建,需要在命令中添加-m (--create-home)选项;但是,CentOS 会为我们自动创建这个用户目录;

如果我们想要以这个用户名登录系统,必须为其设置一个密码:

[root@centos_7_6_1810 ~]# passwd luizyaoChanging password for user luizyao.New password:Retype new password:passwd: all authentication tokens updated successfully.

然后,我们就可以用这个用户登录系统:

[luizyao@centos_7_6_1810 ~]$ whoamiluizyao

为新用户授权

通常情况下,新用户在自己的用户目录(/home/luizyao/)下拥有完整的权限,其它目录需要他人授权;而我们最常用的就是 root 用户的权限,这时候sudo命令就可以帮助到我们:它允许信任的用户以其他用户的身份去执行命令,默认使用的是 root 用户;

新用户并不在信任名单中,所以我们无法借用 root 用户身份去执行命令:

注意:此时,以新用户的身份登录系统的;

[luizyao@centos_7_6_1810 /]$ sudo whoami[sudo] password for luizyao:luizyao is not in the sudoers file. This incident will be reported.

在 CentOS 中,我们有两种方法把新用户添加到 Sudoers 列表中:

注意:此时,以 root 的身份登录系统;

方法一:把新用户添加到wheel用户组中

基于 RedHat 分发版本的系统,如 CentOS 和 Fedora,用户组wheel已经被授予 sudo 的权限;所以,我们可以通过把新用户添加到wheel用户组中,来获取 sudo 的权限:

[root@centos_7_6_1810 ~]# groups luizyaoluizyao : luizyao[root@centos_7_6_1810 ~]# usermod -aG wheel luizyao[root@centos_7_6_1810 ~]# groups luizyaoluizyao : luizyao wheel


我们通过usermod命令把新用户添加到wheel用户组中,可以使用groups命令查看用户所属的用户组;

这个时候,新用户就可以借助 root 的权限执行命令了:

[luizyao@centos_7_6_1810 root]$ sudo whoami[sudo] password for luizyao:root

注意:

这种方法下,执行sudo命令需要输入新用户的密码,因为这是wheel用户组的默认配置,如下所示:

# /etc/sudoers106 ## Allows people in group wheel to run all commands107 %wheel ALL=(ALL)  ALL108109 ## Same thing without a password110 # %wheel  ALL=(ALL)  NOPASSWD: ALL

从用户组中删除用户。可以使用如下命令:

[root@centos_7_6_1810 ~]# gpasswd -d luizyao wheelRemoving user luizyao from group wheel[root@centos_7_6_1810 ~]# groups luizyaoluizyao : luizyao

方法二:把新用户添加到sudoers列表中

在/etc/sudoers文件中,可以配置用户和用户组的 sudo 权限,这种方式更加灵活一点;并且,有两种方法为新用户配置权限:

1.你可以直接在/etc/sudoers文件中配置新用户的权限,但是要注意这个文件的默认权限是只读的,所以你要先添加写入权限,编辑完以后,再恢复为只读;

请使用visodu命令修改/etc/sudoers文件,因为它会帮你检查语法错误;

2.你也可以在/etc/sudoers.d目录下,为新用户添加一个专门的配置文件(推荐):

bash [root@centos_7_6_1810 ~]# echo "luizyao ALL=(ALL) NOPASSWD:ALL" | tee /etc/sudoers.d/luizyao luizyao ALL=(ALL) NOPASSWD:ALL [root@centos_7_6_1810 ~]# ll /etc/sudoers.d/luizyao -rw-r--r-- 1 root root 32 Sep 17 17:51 /etc/sudoers.d/luizyao

上述命令表示:luizyao 可以在任何主机上(第一个ALL)以任何用户的身份(第二个ALL,默认为 root)执行任何命令(第三个ALL),并且不需要密码:

[luizyao@centos_7_6_1810 root]$ sudo whoamiroot

注意:文件的名字可以是任意的,只是通常我们会配置成用户名;

新用户使能 SSH 密钥登录

此时,以新用户的身份登录系统;

创建密钥对:

[luizyao@centos_7_6_1810 ~]$ ssh-keygen -t ecdsa # 椭圆曲线数字签名算法Generating public/private ecdsa key pair.Enter file in which to save the key (/home/luizyao/.ssh/id_ecdsa): # 选择密钥对存放的文件夹 Created directory '/home/luizyao/.ssh'.Enter passphrase (empty for no passphrase): # 私钥的密码Enter same passphrase again: # 确认私钥密码Your identification has been saved in /home/luizyao/.ssh/id_ecdsa.Your public key has been saved in /home/luizyao/.ssh/id_ecdsa.pub.The key fingerprint is:SHA256:FljQN9JFxB/C83Mv7N3rFNLCxXICRxaKzKDb+Tzsgwo luizyao@centos_7_6_1810The key's randomart image is:+---[ECDSA 256]---+|  .+.. B==. ||  .o* = X o ||  .. .* o B = ||  o .. . X .||  . oS = =.||  .+  = o|| E .= . +.|| . .... o o||  .. .. .o.|+----[SHA256]-----+

下载私钥到本地:

基于 Mac OS 的实践;

使用scp命令下载私钥:

yaomengdeMacBook-Air:~ yaomeng$ scp luizyao@:/home/luizyao/.ssh/id_ecdsa ~/.ssh/

此时,我们仍然需要密码登录:

yaomengdeMacBook-Air:~ yaomeng$ ssh luizyao@Enter passphrase for key "/Users/yaomeng/.ssh/id_ecdsa": # 输入私钥密码,登录失败luizyao@www.luizyao.com password: # luizyao 的用户密码Last login: Tue Sep 17 22:50:22 2019

SSH 免密登录

重命名公钥为 authorized_keys:

[luizyao@centos_7_6_1810 ~]$ mv ~/.ssh/id_ecdsa.pub ~/.ssh/authorized_keys[luizyao@centos_7_6_1810 ~]$ ll ~/.ssh/total 8-rw-r--r-- 1 luizyao luizyao 185 Sep 17 22:58 authorized_keys-rw------- 1 luizyao luizyao 314 Sep 17 22:58 id_ecdsa

注意:

因为我之前并没有 authorized_keys 文件,所以这里我直接重命名;如果之前已经有 authorized_keys 文件,可以使用以下命令,把公钥添加到文件末尾:

cat >> ~/.ssh/authorized_keys < ~/.ssh/id_ecdsa.pub

注意 authorized_keys 文件、~/.ssh/ 目录、或者 用户的 home 目录(/home/luizyao/)对其他用户赋予了写入的权限,那么sshd判断此文件已经不安全,将不会使用这个文件,除非你已经设置 StrictModes 为 no;