1.13 单用户模式
案例:忘记了root密码。
centos7之后其实就已经没有单用户模式了,改为了救援模式,我们后一节再来介绍如何进入救援模式。
[root@localhost ~]# ls -l /usr/lib/systemd/system/runlevel*.target
lrwxrwxrwx. 1 root root 15 May 29 14:02 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 May 29 14:02 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 May 29 14:02 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 May 29 14:02 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 May 29 14:02 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 May 29 14:02 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 May 29 14:02 /usr/lib/systemd/system/runlevel6.target -> reboot.target
单用户模式就是系统处于最原始的状态,所有网络服务都未启动,文件系统都没有mount,只有最基础的系统module被加载,然后由kernel启动进入命令行状态。这样的状态我们称之为单用户模式。
centos6之前有7个用户模式,单用户模式是init 1,正常多用户是init 3,带图形的是init 5,重启是init 6。
使用单用户模式,类似于Windows的安全模式。(条件是必须能接触到物理机箱)
首先第一步重启操作系统
#重启命令
reboot
init 6
shutdown -r now
#关机命令
init 0
poweroff
如果只有一个用户且忘记了登录密码,可以用物理方法重启(长按电源键关机),如果使用的是VMware的虚拟机,则可以右键单击标签页,选择电源->重启。
按e进入编辑模式(grub界面)。
在linux16一行中,替换ro为rw init=/sysroot/bin/sh(按方向键移动光标)。/sysroot是系统所在目录。按Ctrl-X重启系统。
在/sysroot下的bin/是原来系统下的bin/,现在进入的就是一个类似安全模式的系统。
下一步我们要切换到我们的原来的系统。使用chage root命令
chroot /sysroot/
可以看一下两者个区别,对比红框查看的都是之前设置的aythorized_keys文件。
这个时候就可以用命令更改原来的root密码了。
passwd root
#如果显示乱码则需要改变语言支持,更改环境变量LANG即可
LANG=en
!!!如果你的系统正在使用selinux,那么一定要在根目录创建一个.autorelabel的文件
touch /.autorelabel
接下来就可以重启了,注意此时直接reboot是不能与init对话的,需要退出我们的系统,回到之前的单用户模式。
1.14 救援模式
centos7中的救援模式就对应之前版本的runlevel1.target 。
如果你的系统的grub被加密了你没有权限更改,那么可以使用安装光盘进入救援模式,更改root密码。
首先要做的是在BIOS更改第一启动项为你的iso源,下面仅介绍VMware虚拟机进入救援模式的方法。
编辑虚拟机设置,选中CD/DVD,勾选开机时启动,并使用ISO文件(如果你有安装光盘请选择使用光驱)。
然后开机进入BIOS
使用方向键选择到Boot,使用“+” 、“-”调整启动项的优先级。F10选择yes保存并退出。
然后我们就进入了光盘安装系统,选择Troubleshooting->Rescue a CentOS Linux system
之后会进入交互模式,输入1回车
之后我们原系统就被挂载到了/mnt/sysimage文件夹中。
之后按相同的方法设置root密码。
!!!最后记得将BIOS设置的启动顺序改回来,或者断开光驱。
进入单用户模式和救援模式都可以应对因为原始系统发生错误无法启动来更改配置文件达到重启原始系统的作用。
1.15 克隆虚拟机
有时候我们需要多个linux系统执行任务,每一个都用光盘装一次系统很麻烦。如果我们需求的系统要求差不多,简单的做法就是克隆虚拟机。
选择VM->Manage->Clone即可进入向导。
点击下一步,
选择虚拟机克隆源,可以链接一个克隆或者从一个已存在的快照里克隆,我们第一次选择第一个。
之后选择克隆类型,节省空间选择创建链接克隆,如果你需要两个虚拟机完全独立,那么就创建完整克隆。
输入克隆机的名字和存储位置,就完成了。
为了防止两台虚拟机启动后IP冲突,需要更改一下IP,特别注意的是linux中UUID是唯一的,需要注释掉。
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
#UUID cloned
#UUID=819298ca-098d-4380-8cb8-c96269c1f8b7
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.16.101
NETMASK=255.255.255.0
GATEWAY=192.168.16.2
DNS1=8.8.8.8
DNS2=210.77.72.1
更改后重启网络服务。
systemctl restart network.service
这个时候Xshell会断开连接,我们打开Xshell右键会话,选择SaveAs,即可复制一份新的会话,只需要更改新会话的主机和描述即可。
重新连接之后,我们可以更改一下系统的hostname以区分两个虚拟机。
[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# hostnamectl set-hostname lhy_clone
[root@localhost ~]# hostname
lhy_clone
#也可以直接更改/etc/hostname文件
[root@localhost ~]# cat /etc/hostname
lhy_clone
这样就可以在Xshell中登录两台虚拟机了
1.16 Linux机器相互登录
后续工作中会用到很多从一台linux复制或者上传文件的情况,这个时候就需要从一台linux主机连接到另一台主机上。我们使用的是ssh命令,连接之后使用w命令可以看到hostname改变。
[root@lhy ~]# ssh 192.168.16.101
The authenticity of host '192.168.16.101 (192.168.16.101)' can't be established.
ECDSA key fingerprint is SHA256:pDAF23nfe/78i1FxeNRfinATLdaS1kg3iaTR+DjdaT4.
ECDSA key fingerprint is MD5:f6:10:de:0a:34:28:17:fa:ef:4d:0c:8e:de:35:44:da.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.16.101' (ECDSA) to the list of known hosts.
\S
Kernel \r on an \m
root@192.168.16.101's password:
Last login: Thu May 31 15:56:26 2018 from 192.168.16.1
[root@lhy_clone ~]# w
16:20:51 up 1:01, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.16.1 15:56 24:19 0.01s 0.01s -bash
root pts/1 192.168.16.100 16:20 3.00s 0.02s 0.01s w
[root@lhy_clone ~]#
ssh的标准用法可以用man查看
ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
[-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file]
[-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option]
[-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
[user@]hostname [command]
下一步我们用密钥登录。
我们用ssh-keygen生成密钥对。
[root@lhy ~]# ssh-keygen
"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:dQ4yN5Mbkqoj0SaDQL8nDAyPfGe/sda9jrKc/1Cpsp8 root@lhy
The key's randomart image is:
+---[RSA 2048]----+
|.. |
|=o. . . |
|o+.o o = O . |
|..+.+ .. * O. |
|. ++o..oS .o. |
| =o. = + |
| . o = + . |
| . .o.+ + . |
| ==Eo+ |
+----[SHA256]-----+
"
[root@lhy ~]# ls /root/.ssh/
authorized_keys id_rsa id_rsa.pub known_hosts
[root@lhy ~]#
之后我们把公钥复制到第二台机器的.authorized_keys文件中。
[root@lhy ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1Y7OxnXgrN4cGZ0Ovl/oU0LgxIrxmh4a+ReOd1iNs21Z+gS+ZNawXLfsdxXBcMXIdC7MlBqlxNLiSUfqkikNJnORjM6gxTNH5SaeV6I0fCwM1V8lJkCDEKUCZrBBp9BJ5W6MN3rCcokUmV0CXmO2KMSJB6apjk3m/sckLI4HwokaldG4/iBDyxdi7NMFRGZdwyKBz6qXBrIS9T8S2r0DMN/jSRBD6iUuJXNCCyD0Viqs8144096qKWKKugOeQ4eCreaal6blZ8ov7/8wjTEoZhJhJQXljBt3rRmgMky+xHClw8RWDkExxGXuy1FpVX7ZcBW8aeOMF8S29A/s7o9FF root@lhy
临时关闭selinux
[root@lhy ~]# getenforce
Enforcing
[root@lhy ~]# setenforce 0
[root@lhy ~]# getenforce
Permissive
再次连接就会发现不需要输入密码了
[root@lhy ~]# ssh -p 22 root@192.168.16.101
\S
Kernel \r on an \m
Last login: Thu May 31 16:20:14 2018 from 192.168.16.100
[root@lhy_clone ~]# exit
logout
Connection to 192.168.16.101 closed.
以上。