文章目录
chroot 与 jail
chroot是内核中的一个系统调用,软件可以通过调用库函数chroot,来更改某个 进程所能见到的根目录。例如nsd安装在 /etc/nsd 路径下,以root用户(权限相同用户)启动nsd的服务,nsd会派生出多个以nobody权限运行的子进程,父进程监听端口53,然后将请求分配给子进程进行处理,此时子进程继承自父进程,因此可访问目录也是/etc/nsd.
因为权限设置失误,若nsd的某个子进程遭到攻击,则其可访问的范围可以从/etc/nsd 直至根目录,从而访问到整个服务器,因此需要将nsd相关的访问目录限制在/etc/nsd下,构成
jail。创建chroot“监牢”的作用就是将进程权限限制在文件系统目录树中的某一子树中。
chroot jail技术与虚拟机制有什么不同?
Chroot Jail是操作系统级别(Operating-system-level)的虚拟化技术,通常被用于在主机系统上创建多个相互独立的实例( instances)。和工作在应用层的虚拟机(Virtual Machines)相比,它是内核级别的虚拟化,几乎不占用的系统开销,所以在相同的硬件上,它比用虚拟机来创建多个独立实例(isolated instances)要好得多。虚拟机(VM)则是机器的软件实现,它们经常利用所谓的硬件虚拟化来呈现正在工作的操作系统的虚拟映像。
linux命令
查看进程 ps -ef | grep nsd
查看nsd进程的运行情况
UID PID PPID C STIME TTY TIME CMD
zzw 14124 13991 0 00:38 pts/0 00:00:00 grep --color=auto dae
- UID: 程序被该 UID(用户)所拥有
- PID: 就是这个程序的 ID
- PPID: 则是其上级父程序的ID
- C: CPU使用的资源百分比
- STIME: 系统启动时间
- TTY: 登入者的终端机位置
- TIME: 使用掉的CPU时间
- CMD: 所下达的是什么指令
包管理
- rpm -qa : 查询一个包是否被安装 q-query a-all
文件查看
- cat: 查看文件内容,内容整个显示在页面
- more: more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能。
- less: less [参数] 文件 查看文件内容,一页页显示,可以pagedw,pageup
下载命令
curl: curl是基于URL语法在命令行方式下工作的文件传输工具
curl "http://cmccyum.4ggogo.com/yum/cmcc.repo" -o /etc/yum.repos.d/cmcc.repo
下载cmcc.repo 并将输出写到 /etc/yum.repos.d/cmcc.repo
scp: 可以进行远程拷贝
不同的Linux之间copy文件常用有3种方法:
第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的copy。
第二种方法就是采用samba服务,类似Windows文件copy 的方式来操作,比较简洁方便。
第三种就是利用scp命令来进行文件复制。scp是有Security的文件copy,基于ssh登录。相比于CP命令,主要就是在source跟dest之前加上remote_username@remote_ip:,通过加的位置的不同区分出到底从远程到本地还是本地到远程。本地到远程:scp local_file remote_username@remote_ip:remote_folder
。
tailf /var/log/nsd/nsd.log 文件跟踪命令 tailf
Linux 目录
-
/: 根目录 从任何位置执行
cd /
都会进入根目录,所有用户共享 -
/home: 家目录
cd /home
显示当前用户目录列表 -
~: 当前用户的家目录 在root用户下
cd ~
等价于cd /root
; 在 zyp 用户下等价于cd /home/zyp
-
pwd: print working directory 绝对路径方式显示当前用户的工作路径
/opt/目录和/usr/local/的区别
opt: 第三方软件放置的目录(非原本distribution提供的软件)
/opt目录用来安装附加软件包,是用户级的程序目录,可以理解为D:/Software。安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。
/usr/local目录
- /usr:Unix Software Resource 系统级的目录,可以理解为C:/Windows/。 Linux目录配置标准(FHS)建议所有开发者将数据合理的分别放置在 /usr/ 这个目录的子目录下,而不要自行新建该软件自己的独立目录。
- /usr/lib:理解为C:/Windows/System32。
- /usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。
这里主要存放那些手动安装的软件,即不是通过“新立得”或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面。
其实安装软件程序并不是非要在指定的目录下完成,安装java、tomcat等也可以安装在opt目录下,但是安装程序的扩展性和管理性来说,方便使用才是最好的。总结opt目录和usr/local目录就是/usr/local下一般是你安装软件的目录,这个目录就相当于在windows下的programefiles这个目录。/opt这个目录是一些大型软件的安装目录,或者是一些服务程序的安装目录 。
源码放哪里
/usr/src:系统级的源码目录。
/usr/local/src:用户级的源码目录。
Linux 查找命令
- which: 在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果
- whereis: 只能用于程序名的搜索
- whatis: 用于查询一个命令执行什么功能,并将查询结果打印到终端上
- locate: 用来查找文件或目录,locate命令其实是find -name的另一种写法,但是locate要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息, 有时候运行locate命令会出现错误,显示没有这个文件或文件夹,这时候需要用
updatedb
来更新数据库,因为该数据库每天更新一次。 - find: 在指定目录下查找文件。 find <指定目录><指定条件><指定动作>
- grep: 全目录全文搜索
安装软件命令
grep: grep [-achinv] [–color=auto] ‘搜寻字符串’ filename 分析一行信息,若该行有搜寻的字符串,则拿出该行,搜寻字符串可以是正则表达式
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 ‘搜寻字符串’ 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行
–color=auto :可以将找到的关键词部分加上颜色的显示喔
使用教程: https://www.cnblogs.com/tlnshuju/p/7106790.html
Linux环境下安装nginx
https://blog.csdn.net/qq_30038111/article/details/79410354
当前已安装并且设置了环境变量
Linux 磁盘映射
ref: https://blog.csdn.net/XiaoMu_Mu/article/details/80972863
文件共享功能是通过samba协议完成的,Windows系统一般都默认打开了samba,Linux则需要自己安装
- 在linux下使用
whereis samba
搜索查看是否安装了samba - 打开samba的conf
vim /etc/samba/smb.conf
文件来告诉系统需要共享哪些文件 - 修改 smb.conf
6 [global]
7 workgroup = SAMBA
8 security = user
9
10 passdb backend = tdbsam
11
12 printing = cups
13 printcap name = cups
14 load printers = yes
15 cups options = raw
16
17 [homes]
18 comment = Home Directories
19 valid users = %S, %D%w%S
20 browseable = No
21 read only = No
22 inherit acls = Yes
23
24 [printers]
25 comment = All Printers
26 path = /var/tmp
27 printable = Yes
28 create mask = 0600
29 browseable = No
30
31 [print$]
32 comment = Printer Drivers
33 path = /var/lib/samba/drivers
34 write list = @printadmin root
35 force group = @printadmin
36 create mask = 0664
37 directory mask = 0775
38 [zhangyangping]
39 comment = dir for zyp
40 path = /root/zhangyangping
41 write list = root
42 create mask = 0664
43 directory mask = 0775
- 启动脚本启动服务
/etc/init.d/nmbd restart
/etc/init.d/smbd restart
公钥和私钥
https://www.cnblogs.com/tlnshuju/p/7106790.html
比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob, 应该是Alice 和Bob都有一对公钥和私钥,那么加密解密的过程如下:
- Bob将他的公开密钥传送给Alice,Alice将自己的公钥给Bob
- Alice用Bob的公开密钥加密她的消息,并且加上自己的私钥(数字签名),然后传送给Bob。 3. Bob用他的私人密钥和Alice的公钥解密Alice的消息。 Bob用Alice的公钥解密证明是Alice发的,用自己的私钥解开肯定是自己的公钥加密的。
公钥和私钥是成对的,它们互相解密。 - 2中Alice私钥加密的内容最好是MD5签名后的明文,这样可以验证明文是否被动过
公钥加密,私钥解密。
私钥数字签名,公钥验证。
信息经公钥加密以后,在公共信道上传输,大家都可以截取到加密后的内容,但是只有拥有私钥的人才能将加密后的内容解密回复为原始信息,保证了通信过程的安全性。
IO模式
https://www.cnblogs.com/zingp/p/6863170.html
阻塞IO、非阻塞IO、异步IO
一次IO访问(以read为例),用户首先发起read请求,内核会接收这一请求然后去磁盘读取数据,数据首先 从磁盘读入内核缓冲区,接着从内核缓冲区拷贝到 应用程序缓冲区,最后从应用程序缓冲区给入 进程。因此一个read操作会经历两个过程:
- 等待数据准备 (磁盘->内核)
- 等待数据拷贝 (内核->应用程序)
这两个过程都会由于等待数据而产生阻塞,由此而产生三种IO模式:
- 阻塞IO:用户进程发起IO请求后就阻塞进程,进入阻塞态,等待用户数据,直到数据拷贝到用户空间,解除阻塞。
- 非阻塞IO:发起IO请求,若内核返回error,表明数据未准备好,则继续发请求,直到得到OK
- 异步IO:发起IO请求后,继续执行其他流程,内核收到请求后立刻返回数据未准备好,然后内核会等待数据准备,并拷贝到用户内存后,发出signal,提醒进程read完成。
IO多路复用机制
用select, poll, epoll监听多个io对象,当io对象有变化(有数据)的时候就通知用户进程。
select/epoll的优势并不是对于单个连接能处理得更快,而是在于能处理更多的连接。
I/O多路复用的本质就是用select/poll/epoll, 去监听多个socket对象,如果其中的socket对象有变化,只要有变化,用户进程就知道了
- select是不断轮询去监听的socket,socket个数有限制,一般为1024个;
- poll还是采用轮询方式监听,只不过没有个数限制;
- epoll并不是采用轮询方式去监听了,而是当socket有变化时通过回调的方式主动告知用户进程
select select收到通知有数据ready,程序无差别轮询所有流
同时观察许多流的I/O事件,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有I/O事件时,就从阻塞态中醒来,于是我们的程序就会轮询一遍所有的流。
- 当用户进程调用了select,那么整个进程会被block;
- 而同时,kernel会“监视”所有select负责的socket;
- 当任何一个socket中的数据准备好了,select就会返回;
- 这个时候用户进程再调用read操作,将数据从kernel拷贝到用户进程。
优势:一个进程同时等待多个IO,任何一个数据准备好即可返回
pool 与select相同,只是没有监听的流的个数限制
epoll event poll事件驱动,会把哪个流发生了怎样的I/O事件通知我们,可以有目的性的操作流
Linux下的IO复用与epoll: https://www.cnblogs.com/lojunren/p/3856290.html
epoll是通过内核与用户空间mmap同一块内存实现的。mmap将用户空间的一块地址和内核空间的一块地址同时映射到相同的一块物理内存地址(不管是用户空间还是内核空间都是虚拟地址,最终要通过地址映射映射到物理地址),使得这块物理内存对内核和对用户均可见,减少用户态和内核态之间的数据交换。内核可以直接看到epoll监听的句柄,效率高。