让 history 命令显示日期和时间
运行 history 命令时,它会检查一个叫做 HISTTIMEFORMAT 的环境变量,这个环境变量指明了如何格式化输出 history 命令中记录的这个时间。
若该值为 null 或者根本没有设置,则它跟大多数系统默认显示的一样,不会显示日期和时间。
HISTTIMEFORMAT 使用 strftime 来格式化显示时间(strftime - 将日期和时间转换为字符串)。history 命令输出日期和时间能够帮你更容易地追踪问题。
-
%T: 替换为时间(%H:%M:%S)。
-
%F: 等同于 %Y-%m-%d (ISO 8601:2000 标准日期格式)。
编辑 .bashrc,添加:HISTTIMEFORMAT='%F %T '
使配置生效:source .bashrc
update 和 upgrade 的区别
Ubuntu系统
apt update 就是访问服务器,更新可获取软件及其版本信息,但仅仅给出一个可更新的list,具体更新需要通过apt upgrade。
这个命令,会访问源列表里的每个网址,并读取软件列表,然后保存在本地电脑。我们在新立得软件包管理器里看到的软件列表,都是通过update命令更新的。
不建议一次性全部更新
Ubuntu总是认为:最新的软件就是最好的软件,建议用户安装使用。
直接使用apt update && apt -y upgrade,就会将本机已安装的软件全部更新到最新!
但是在实际工作中并不总是这样,K8S v1.6.6版本只支持Docker v1.12.3版本,即K8S依赖于某一特定版本的Docker,不支持最新版本的Docker。
可以先通过update获取软件最新信息,然后只更新所需要的包:
apt update
apt upgrade 包名
注意
Ubuntu和CentOS的update含义不一样,Ubuntu上update是检查更新,CentOS上是更新,CentOS上检查更新的命令是 yum check-update。
开启 SSH
1、检查SSH服务是否已安装。
rpm -qa |grep ssh
2、如果没有安装SSH软件包,可以通过yum 或 rpm 安装包 进行安装。
yum install ssh
3、启动ssh服务
安装好了之后,就开启ssh服务。ssh服务一般叫做 sshd。
命令行输入
service sshd start
可以启动 或者输入
systemctl start sshd
亦可启动。
4、查看ssh服务启动状态
service sshd status
或
systemctl status sshd
5、查看或编辑ssh服务配置文件
vi /etc/ssh/sshd_config
6、查看ssh服务的网络连接情况
netstat -ntlp
如果能看到类似以下显示
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1193/sshd
这说明sshd已经能够正常工作了,如果利用客户端(SecurCRT,putty等)连接不上,尝试关闭防火墙试试。
service iptables stop
7、开机自启动sshd服务
如果需要开机自启动某些服务,可以使用`chkconfig 服务名 on`即可,若想关闭,将on改为off。
方法二:
vi /etc/rc.local
加入
service sshd start
或
/etc/init.d/sshd start
查看某个包是否安装
rpm包安装的,可以用 `rpm -qa` 看到。
如果要查找某软件包是否安装,用 ` rpm -qa | grep 包名` ,或者 ` rpm -q 包名` 。
使用 ` rpm -qi 包名`,可以获取更多所查询包的信息。
查看已安装的包的数量 ` rpm -qa | wc -l`。
以deb包安装的,可以用 `dpkg -l` 能看到。如果是查找指定软件包,用 `dpkg -l | grep 包名`。
yum方法安装的,可以用 `yum list installed` 查找,如果是查找指定包,命令后加` | grep 包名`。
如果是以源码包自己编译安装的,例如.tar.gz或者tar.bz2形式的,这个只能看可执行文件是否存在了。
如果是以root用户安装的,可执行程序通常都在/sbin/usr/bin目录下。
服务
开启服务
service 服务 start
或
systemctl start 服务
查看服务状态
service 服务 status
或
systemctl status 服务
设置服务自启动
chkconfig 服务 on
若想关闭,on改为off。
查看网关
以下几种方法都可以
-
cat /etc/resolv.conf
-
netstat -rn
-
route -n
-
cat /etc/sysconfig/network
-
cat /etc/sysconfig/network-scripts/ifcfg-eth0
-
traceroute 第一行就是网关
-
ip route show
用户
用户信息和密码
Linux系统中用户信息放在 /etc/passwd 文件中。
这是一个包含每个用户基本信息的文本文件。当我们在系统中创建一个用户,新用户的详细信息就会被添加到这个文件中。
文件的一行代表一个单独的用户,一行中包含 7 个字段。该文件将用户的信息分为 3 个部分。
-
第一部分是 root 账户,这代表管理员账户,对系统的每个方面都有完全的权力。
-
第二部分是系统定义的群组和账户,这些群组和账号是正确安装和更新系统软件所必需的。
-
第三部分在最后,代表一个使用系统的真实用户。
在创建新用户时,将修改以下 4 个文件。
-
/etc/passwd: 用户账户的详细信息在此文件中更新。
-
/etc/shadow: 用户账户密码在此文件中更新。
-
/etc/group: 新用户群组的详细信息在此文件中更新。
-
/etc/gshadow: 新用户群组密码在此文件中更新。
# cat /etcpasswd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
2gadmin:x:500:10::/home/viadmin:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin
zabbix:x:498:499:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
mysql:x:497:502::/home/mysql:/bin/bash
zend:x:502:503::/u01/zend/zend/gui/lighttpd:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
2daygeek:x:503:504::/home/2daygeek:/bin/bash
named:x:25:25:Named:/var/named:/sbin/nologin
fengshiwei:x:1000:1000:fengshiwei,,,:/home/fengshiwei:/bin/bash
7 个字段的详细信息如下:
-
用户名 (fengshiwei):已创建用户的用户名,字符长度 1 个到 12 个字符。
-
密码(x):代表加密密码保存在 /etc/shadow 文件中。
-
用户 ID(506):代表用户的 ID 号,每个用户都要有一个唯一的 ID 。UID 号为 0 的是为 root 用户保留的,UID 号 1 到 99 是为系统用户保留的,UID 号 100-999 是为系统账户和群组保留的。
-
群组 ID (507):代表群组的 ID 号,每个群组都要有一个唯一的 GID ,保存在 /etc/group 文件中。
-
用户信息(fengshiwei,,,):该用户的信息说明,没有很重要的用途,仅仅是一个说明而已。
-
家目录(/home/fengshiwei):代表用户的家目录。
-
Shell(/bin/bash):代表用户使用的 shell 类型。
使用以下命令过滤
cat /etc/passwd | cut -d : -f 1
或者
cut -d : -f 1 /etc/passwd
那些除了我自己知道的用户之外的记录是什么?
使用相应服务的时候,是启动的相应的用户,例如:你要启动mail服务,那么启动mail服务进程的就是mail用户(好处:当可使用其中一个服务的用户出现问题之后对其他的用户是不会产生影响的,这样能够保证其他用户的安全性)
/etc/shadow文件破解
/etc/shadow 是linux存放用户密码的位置。
文件的格式为:
{用户名}:{加密后的口令密码}:{口令最后修改时间距原点(1970-1-1)的天数}:{口令最小修改间隔(防止修改口令,如果时限未到,将恢复至旧口令):{口令最大修改间隔}:{口令失效前的警告天数}:{账户不活动天数}:{账号失效天数}:{保留}
其中{加密后的口令密码}的格式为 \$id\$salt\$encrypted
id为1时,采用md5算法加密
id为5时,采用SHA256算法加密
id为6时,采用SHA512算法加密
salt为盐值,是对密码进行hash的一个干扰值
encrypted为散列值
John the Ripper是一个流行的口令破解工具,它支持Windows和Linux平台,是一个开源软件。
官方地址:http://www.openwall.com/john 可以复制下载链接使用wget下载。
安装John the Ripper
wget https://www.openwall.com/john/k/john-1.9.0.tar.gz #下载安装包
tar -xvf john-1.9.0.tar.gz
cd john-1.9.0/src/
make linux-x86-64
破解
cd ../run/
cp /etc/shadow passwd.txt
./john passwd.txt #对散列值进行破解
cat john.pot #查看破解结果
Ubuntu root用户图形界面无法登陆
强烈不建议修改root密码和用root用户登录
Ubuntu 17.10版本后很多人使用旧方法无法开启root用户登录gnome图形界面
首先激活root用户,通过命令
sudo passwd root
为root用户设置密码,会首先要求输入当前用户的密码,然后设置root用户的密码,已激活则忽略该步骤。
接下来修改三个文件:
修改/etc/pam.d/gdm-autologin:
注释掉 `auth required pam_succeed_if.so user != root quiet_success` 一行(行前加 #)
修改/etc/pam.d/gdm-password:
同样注释掉 `auth required pam_succeed_if.so user != root quiet_success` 一行(行前加 #)
修改/root/.profile:
找到mesg n,在前面加上tty -s&&(大概在最后一行)
保存退出,重启系统就可以用root账户登录图形界面了。
切换用户
1. 切换用户的命令为:su username,如果不加username,默认为su root。
2. 普通用户切换到root用户:sudo su
3. 在终端输入exit或logout或使用快捷方式ctrl+d,可以退回到原来用户,其实ctrl+d也是执行的exit命令
4. 在切换用户时,如果想在切换用户之后使用新用户的工作环境,可以在su和username之间加-,例如:su - root 或 su -l root
5. $表示普通用户,#表示超级用户,也就是root用户
sudo,su 和 sudo su 的区别
sudo和su的区别
1. su为switch user,即切换用户的简写。su是最简单的身份切换名,用su我们能够进行不论什么用户的切换,一般都是su - username,然后输入password就ok了,可是root用su切换到其它身份的时候是不须要输入password的。
2. sudo是一种权限管理机制,依赖于/etc/sudoers,其定义了授权给哪个用户可以以管理员的身份能够执行什么样的管理命令。
3. su格式为两种:su -l USERNAME(-l为login,即登陆的简写)、su USERNAME。
sudo格式:sudo -u USERNAME COMMAND。
4. su默认情况下如果不指定USERNAME(用户名),默认即为root,所以切换到root的身份的命令即为:su -root或su -,su root 或su。
sudo默认情况下,系统只有root用户可以执行sudo命令。需要root用户通过使用visudo命令编辑sudo的配置文件/etc/sudoers,才可以授权其他普通用户执行sudo命令。
5. sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码。
6. sudo 命令比 su 命令灵活很多,因为甚至可以限制 sudo 用户可以访问哪些命令。换句话说,用户通过 sudo 命令只能访问他们工作需要的命令。而 su 命令让用户有权限做任何事情。
sudo su和su的区别
1. su是申请切换root用户,需要申请root用户密码。有些Linux发行版,例如ubuntu,默认没有设置root用户的密码,所以需要我们先使用sudo passwd root(root可以省略。在普通用户下设置时,需要先输入普通用户的密码)设置root用户密码。
2. 而sudo su是当前用户暂时申请root权限,所以输入的不是root用户密码,而是当前用户的密码。sudo是用户申请管理员权限执行一个操作,而此处的操作就是变成管理员。PS:个人理解就是sudo su相当于Windows上的以管理员权限打开命令行,但是可执行的管理员权限命令和以管理员用户登陆相比,是有限制的。
3. sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。使用su的缺点之一在于必须要先告知超级用户的密码。
su切换到root用户后,ifconfig命令找不到,sudo su切换到root用户后,可以使用ifconfig。
原因就是因为su切换后,当前用户环境未改变。虽然两者切换后的命令行提示都是root@kali:/home/kali#,但是后者环境变了。
前者不会读取root用户的私有设置文件!PATH变量还是当前用户自己的,因此环境变量PATH不会包含/sbin /usr/sbin这样的目录。因此你直接输入这些目录下的命令时,就会提示找不到该命令。
如果想使用su切换到root后可以使用ifconfig,使用su - root 或 su -l root,此时前者的命令提示符会变成root@kali:~#
Linux上traceroute只显示一行
其中出现了些零散的'',这是由于中间的router的CPU太忙或者中间路由器不回送TTL-expired包产生的。
但是Windows上的tracert就可以正常显示。为什么?
原因:linux虚拟机在traceroute时,默认使用UDP报文,而不是使用ICMP报文;而防火墙为了方便网络调试是放行了ICMP报文,但没有放行UDP报文,这就导致了linux虚拟机的traceroute报文(UDP)被防火墙拦截了,windows虚拟机的traceroute报文(ICMP)正常通行。
伪解决方法:
traceroute -I baidu.com
加上 -I 参数,traceroute 将使用ICMP报文。可以在traceroute --help中看到。但这样还是不行的,不信可以试试看。具体原因[参考文章](https://blog.youkuaiyun.com/dog250/article/details/52194975),在NAT模式下,是没办法做到的,该问题无法解决,VMWare官方给的回复是使用Bridge模式。
防火墙
firewalld 和 iptables 区别
在RHEL7里有几种防火墙共存:firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。
FirewallD 即Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器,是 iptables 的前端控制器,用于实现持久的网络流量规则。
它提供命令行和图形界面,在大多数 Linux 发行版的仓库中都有。与直接控制 iptables 相比,使用 FirewallD 有两个主要区别:
-
FirewallD 使用区域和服务而不是链式规则。
-
FirewallD可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效。
firewalld跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制。
firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。
firewalld 的区域管理
通过将网络划分成不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流。例如,互联网是不可信任的区域,而内部网络是高度信任的区域。
网络安全模型可以在安装,初次启动和首次建立网络连接时选择初始化。该模型描述了主机所连接的整个网络环境的可信级别,并定义了新连接的处理方式。
有如下几种不同的初始化区域:
-
阻塞区域(block):任何传入的网络数据包都将被阻止。
-
工作区域(work):相信网络上的其他计算机,不会损害你的计算机。
-
家庭区域(home):相信网络上的其他计算机,不会损害你的计算机。
-
公共区域(public):不相信网络上的任何计算机,只有选择接受传入的网络连接。
-
隔离区域(DMZ):隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。
-
信任区域(trusted):所有的网络连接都可以接受。
-
丢弃区域(drop):任何传入的网络连接都被拒绝。
-
内部区域(internal):信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
-
外部区域(external):不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
注:
FirewallD的默认区域是public。
firewalld默认提供了九个zone配置文件:
block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml。
他们都保存在“/usr/lib/firewalld/zones/”目录下。
使用 iptables
基本操作
查看防火墙状态
service iptables status
停止防火墙
service iptables stop
启动防火墙
service iptables start
重启防火墙
service iptables restart
永久关闭防火墙
chkconfig iptables off
永久关闭后重启
chkconfig iptables on
开启80端口
修改配置文件
vim /etc/sysconfig/iptables
加入如下代码
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
保存退出后重启防火墙
service iptables restart
使用 firewalld
firwall-cmd:是Linux提供的操作firewall的一个工具
基本操作
查看防火墙状态
systemctl status firewalld
或
firewall-cmd --state
停止防火墙
systemctl stop firewalld
启动防火墙
systemctl start firewalld
重启防火墙
systemctl restart firewalld
或
firewall-cmd --reload
防火墙规则
每次修改后都要重启防火墙
查看防火墙规则
firewall-cmd --list-all
查询端口是否开放
firewall-cmd --query-port=8080/tcp
开放80端口
firewall-cmd --permanent --add-port=80/tcp
移除端口
firewall-cmd --permanent --remove-port=8080/tcp
ufw
ufw 是Ubunt上默认安装的防火墙。
-
sudo ufw enable|disable|reload 开启/关闭/重启
-
sudo ufw default deny 设置自启动
-
sudo ufw allow|deny [service] 开启/禁用
如:
-
sudo ufw allow smtp 允许所有的外部IP访问本机的25/tcp (smtp)端口
-
sudo ufw allow 22/tcp 允许所有的外部IP访问本机的22/tcp (ssh)端口
-
sudo ufw allow ssh 设置允许ssh访问
-
sudo ufw status 查看防火墙状态
安装文件位置
apt
-
下载的软件的存放位置:/var/cache/apt/archives
-
安装后软件的默认位置:/usr/share
-
可执行文件位置:/usr/bin
-
配置文件位置:/etc
-
lib文件位置:/usr/lib
桌面文件位置
/usr/share/applications
查看和修改目前默认的启动模式
查看启动模式
-
multi-user.target 为命令行模式
-
graphical.target 为图形界面模式
systemctl get-default
设置为图形界面模式
systemctl set-default graphical.target
设置为命令行模式
systemctl set-default multi-user.target
重启 验证