0X00 firewalld 守护进程 firewall-cmd命令需要firewalld进程处于运行状态。我们可以使用systemctl status/start/stop/restart firewalld来控制这个守护进程。firewalld进程为防火墙提供服务。 当我们修改了某些配置之后(尤其是配置文件的修改),firewall并不会立即生效。可以通过两种方式来激活最新配置systemctl restart firewalld和firewall-cmd --reload两种方式,前一种是重启firewalld服务,建议使用后一种“重载配置文件”。重载配置文件之后不会断掉正在连接的tcp会话,而重启服务则会断开tcp会话。 0X01 控制端口/服务…
0X00 文件 ‘文件’是进程创建的逻辑单元。 《现代操作系统(原书第三版)》 文件我们再熟悉不过了,电脑磁盘上存的都是文件。在Windows里和Unix系列系统里,表面看上去文件之间还是有一点点小的区别。比如,在Windows里主要还是以文件的后缀名来标识文件具体是什么类型的,图片还是视频;在Unix系列里文件的后缀名就没那么重要,主要后缀名是用来帮助人们识别文件类型的,操作系统并不很关心。 真正的文件类型 是文件的本质类型,不是我们常说的exe类型、doc类型、更不是什么图片类型和视频类型。在Windows下有常见的普通文件和目录。 _没错,目录其实是文件的_ 。在Unix里,还有一些叫字符特殊文件和块特殊文件的。 0X01 文件的元数据 文件里最重要的东西肯定是文件内容了,但是文件存在磁盘里是还有一些其他的相关数据也被存进去了的,那些数据被称之为元数据 。想一下文件的相关信息,在Windows里右键一个文件选择属性或者在Linux里使用ls…
0X00 Linux中的计划任务 我们使用Linux更多的时候是在服务器上,然而我们有的时候就需要让计算机在固定的某个时间做一些事情。比如我们就可能有有如下需求: 1. 临时有事需要离开电脑,但是一个小时后需要备份某个目录里的文件 2. 写了个爬虫去抓取某网站的新闻,每隔十分钟就去爬取一次 3. 周期性的执行某脚本,但放在后台的话退出ssh就会被自动关掉 4. 其实还有好多这种可能............ 在Linux中有两种常见的任务管理,一个是at也就是在某时做某事,另一个是crontab也就是周期性任务表。使用at可以方便地给Linux设置一个在什么时候做什么事的计划,用crontab可以方便地给Linux设置我要做某事,多久做一次。 0X01 使用at命令 检查atd服务是否开启 atd就是at命令的守护进程,系统默认是打开着的,但是也有可能被关掉,在RHEL系中可以使用systemctl status atd来查看服务是否已经开启,没有开启的话可以用systemctl restart atd来打开服务 创建一个计划任务…
0X00 ACL是什么 ACL的全称是Access Control List访问控制列表。在Linux中可以给文件设置权限,-rwx-rw-rw这样,但是这里并不能细分,只能分到用户、组、其他用户。如果我想给某个单独的用户设置权限的话是做不到的。所以有了ACL的出现。通过ACL可以给Linux下的文件提供详细的访问控制,比如我们在设置了基本的rwx权限之后,可以通过ACL在细分用户对文件的权限。 0X01 查看文件的ACL 使用getfacl命令可以查看文件的ACL和详细的权限设置。 这里显示了文件名、所属用户、所属组、还有相对应的权限。 0X02 创建测试用户/组/文件…
0X00 查看网络配置文件 在CentOS中网络是以配置文件的形式存在系统里的,在/etc/sysconfig/network-scripts/目录下,一般情况下网卡的配置文件都在这里了,以ifcfg-就是配置文件了,打开配置文件看一下。下面注释一下关键的配置项 但是一般不建议直接使用编辑器修改网络配置文件,因为这样容易出现一些语法错误和逻辑错误,所以建议使用命令行来管理配置网络,虽然本质上都是去修改配置文件。但是使用命令行去管理网络,命令都是确保配置没有问题才会写入到文件,所以会更加安全。包括下面介绍的ip和nmcli命令,都是通过修改配置文件来完成功能的。 0X01 ifconfig 命令 这个命令在CentOS7中已经不建议使用了,不过由于之前的版本都是在用这个命令,还是说一下。ifconfig是interface configuration的缩写,也就是接口配置。 查看网络 直接输入这个命令就可以看到现在启动着的所有网络。也可以接上某个特定的网卡来查看单独的信息ifconfig enp0s3 如果想查看包括已经关闭了的网络时,使用ifconfig -a就可以了…
0X00 什么是异常 程序在运行出错的时候就会抛出异常,异常时在正确的代码里发生的,不是代码出现了错误。下面就是一个异常 运行这个程序就会报出下面的错误,错误提示说在hello.py这个文件的第6行,出现了一个错误integer division or modulo by zero也就是说Python解释器发现你试图除以0或者试图用0取模。 这里提示的ZeroDivisionError就是一个异常,我们可以在后面捕获这个异常,然后进行一些处理。如果不捕获这个异常的话,程序运行到这里,异常就会直接抛出到用户界面,中断程序的运行。 0X01 自己放出一个异常 我们可以用raise抛出一个自己的异常,这样我们可以在调试程序的时候判断到底出了什么错误,通过抛出的异常信息就可以判断。 上面这段代码只是简单地输入name和age两个变量,合法的话就输出出来。我们这里运行一下试试 我们可以用这种方式在自己的代码中抛出异常,用来做中间值检测,防止中间的数据出现意外导致一些不可思议的后果。 0X02 捕获异常…
0X00 安装OpenSSH 一般情况下我们的系统中都是自带SSH服务端和客户端的,万一没有的话就需要我们手动安装这个服务。 yum install -y openssh 然后重启OpenSSH服务 systemctl restart sshd 0X01 两行简单的配置 OpenSSH的配置文件在/etc/ssh/目录下,有两个配置文件,一个是针对服务端的一个是针对客户端的,我们只需要修改针对服务端的sshd_config即可。 配置文件里比较重要的两行是PermitRootLogin和PasswordAuthentication。 * PermitRootLogin 当这个值为yes时,才允许root用户使用ssh登陆 * PasswordAuthentication 当这个值为yes时,允许使用密码登陆,反之则拒绝密码登陆(只能使用密钥)。 这里的配置就允许使用root用户登陆,也允许输入密码登陆 0X02 私钥和公钥————非对称加密 在ssh中可以使用用户名密码的形式登陆,也可以使用密钥的形式登陆。 非对称加密 就是说加密和解密用的密码不同。非对称加密里有公钥 和私钥…
0X00 hello,world 从一本 _The C Programming Language_ 开始,我们就开始了几十年的'hello,world'之路。从那以后,机会所有的教程都从输出一句'hello,world'开始,这次也不例外。 这里的第一行是注释,这个注释是很特殊的,他会告诉系统我们使用哪个解释器来运行下面的代码,这里我们用的是/bin/bash,当然Python的代码就要加上#!/usr/bin/python。 第二行就是输出一句'hello,world'。echo就是输出语句。 运行脚本 执行之前要给脚本一个x权限,也就是执行权限。然后直接运行就行了。还有一种运行方式是/bin/bash test.sh 这样就是执行bash这个命令,将test.sh作为参数传进去,这样就可以不必写第一行的解释器声明。但是建议使用第一种方式执行脚本。 0X01 使用变量 既然是编程,那一定会有变量。Shell编程里的变量和C、Java不同,我们不需要声明一个变量就能直接赋值,想下面这样。 这里需要注意一点,我们在写一些代码的时候,可能习惯了像这样使用操作符str =…
0X00 创建一个类 Python也是一个和C++、Java一样的面向对象编程语言,所以Python里也有类和对象。 在类中创建的方法使用def关键字定义,每个方法有一个或以上的参数,selft就是实例化的对象自己。需要返回值就return一个,不需要就可以不写return Python的类和Java的类还是有点区别,Java的类里主要写的是属性和方法,Python里不写属性,因为Java的变量需要定义而Python的变量并不需要定义,最多也就是在前面个各个属性一个变量名并赋初值 0X01 实例化一个对象 类是一个很抽象的概念,可以由类实例化好多个对象出来。Java中我们习惯说成 new一个对象,而Python中并不需要new 此段代码接着上面的类声明 0X02 Python的私有 Java和其他好多面向对象编程语言中会有一个private关键字,将属性和方法约束为私有的。然而Python并不能直接支持private,间接地支持也不是真正的private。在Python中的private由一种诡异的方式模拟,在方法前加上连续的两个下划线…
0X00 什么是字典 字典,顾名思义就是通过一个条件可以找到相应的值,字典由Key-Value组成。像是下面这样创建一个字典 字典中的数据是没有顺序的,不像列表一样有顺序,在字典中是没有固定顺序的 下文说的Key就是键, Value就是值 Key-Value 就是键值对,一个键对应着一个值 Key的值是可以随意改变的,但是Key的类型是固定的不能改变 如果为一个不存在的键赋值,那么会自动添加这个K-V 0X01 字典操作 len 测量长度 测量这个字典中有多少 d[k] 调用字典 根据已知的Key来查找Key所对应的Value d[k] = v 字典赋值 为某个特定的Key赋值,如果这个Key在字典中不存在则创建这个Key del d[k] 删除Key-Value 删除相应的Key和Value k in d 成员检查 检查某字典中是否存在某Key,成员检查时用的是Key而不是Value 0X02 字典的递归 字典中是Key-Value,然而字典的Value是可以是字典的,也就是Key-Value的Value是字典,也就是递归。…