当前位置: 首页 > news >正文

自己做钓鱼网站要加强县门户网站的建设管理办法

自己做钓鱼网站,要加强县门户网站的建设管理办法,站酷网素材图库排版,百度公司地址​ 前言 从《initrdinit进程》可知#xff0c;我们通过ssh连接linux服务器#xff0c;其实主是linux启动一shell进程与我们做交互。而Linux又是多租户的#xff0c;这使用得用户与用户间产生了#xff0c;资源的争抢。 如何隔离资源#xff0c;且让用户都无法察觉init进程》可知我们通过ssh连接linux服务器其实主是linux启动一shell进程与我们做交互。而Linux又是多租户的这使用得用户与用户间产生了资源的争抢。 如何隔离资源且让用户都无法察觉 Linux Namespace 是什么 Namespace 是 Linux 内核中实现的特性本质上是一种资源隔离方案. 其提供了一种抽象机制将原本全局共享的资源隔离成不同的集合集合中的成员独享其原本全局共享的资源。 举个例子进程 A 和进程 B 分别属于两个不同的 Namespace那么进程 A 将可以使用 Linux 内核提供的所有 Namespace 资源如独立的主机名独立的文件系统独立的进程编号等等。同样地进程 B 也可以使用同类资源但其资源与进程 A 使用的资源相互隔离彼此无法感知。 ​ 从用户的角度来看每一个命名空间应该像一台单独的 Linux计算机一样有自己的 init进程 PID为 I其他进程的PID依次递增 A和B空间都有PID为l的init进程 子命名空间的进程映 射到父命名空间的进程上父命名空间可以知道每一个子命名空间的运行状态而子命名空间 与子命名空间之间是隔离的 当前 Linux一共实现了 7 种不同类型的 Namespace User Namespace User namespace 用于隔离安全相关的资源包括 user IDs and group IDs(keys和 capabilities)。同样一个用户的 user ID 和 group ID 在不同的 user namespace 中可以不一样权限。换句话说一个用户可以在一个 user namespace 中是普通用户但在另一个 user namespace 中是超级用户。 打开两个终端 ## 终端1## 使用unshare命令进行 namespace unshare --user /bin/bash## 使用id命令查看id uid65534(nobody) gid65534(nogroups) groups65534(nogroup)## 在新的 user namespace 中当前用户变成了 nobody并且 ID 也变成了 65534。 ## 这是因为我们还没有映射父 user namespace 的 user ID 和 group ID 到子 user namespace 中来 ## 如果没有映射当在新的 user namespace 中用 getuid() 和 getgid() 获取 user ID 和 group ID 时系统将返回文件 /proc/sys/kernel/overflowuid 中定义的 user ID 以及 proc/sys/kernel/overflowgid 中定义的 group ID它们的默认值都是 65534。也就是说如果没有指定映射关系的话会默认会把 ID 映射到 65534。 cat /proc/sys/kernel/overflowuid 65534cat /proc/sys/kernel/overflowgid 65534## 下面我们来完成 nick (外部用户)在新的 user namespace 中的映射。 ## 映射ID的方法就是添加映射信息到 /proc/PID/uid_map 和 /proc/PID/gid_map (这里的 PID 是新 user namespace 中的进程 ID刚开始时这两个文件都是空的)文件中。## 查询当前namespace进程id echo $$ 16471## 终端2## 使用ll命令查询uid_mapgid_map文件的归属ll /proc/16471/uid_map /proc/16471/gid_map## 查看容器外用户IDid uid1000(nick) gid1000(nick) groups1000(nick)## 对 uid_map 和 gid_map 文件的写入操作有着严格的权限控制简单点说就是这两个文件的拥有者是创建新的 user namespace 的用户 ## 所以和这个用户在一个 user namespace 中的 root 账号可以写这个用户自己是否有写 map 文件的权限还要看它有没有 CAP_SETUID 和 CAP_SETGID 的 capability权限## 给nick 用户设置权限sudo setcap cap_setgid,cap_setuidep /bin/bashexec bash## 查询权限getcap /bin/bash /bin/bash cap_setgid,cap_setuidep## uid_map 和 gid_map 的配置信息的格式如下(每个文件中可以有多条配置信息) ## ID-inside-ns容器内用户ID ID-outside-ns容器外用户ID length ## 比如 0 1000 500 这条配置就表示父 user namespace 中的 1000~1500 映射到新 user namespace 中的 0~500。、 ## 容器内 0 为root 对应容器外 1000 nike用户 echo 0 1000 500 /proc/16471/uid_mapecho 0 1000 500 /proc/16471/gid_map## 终端1 exec bashid uid0(root) gid0(root) groups65534(nogroup)## 查看root目录仍没有权限比如这里 root 对应父 user namespace 的用户是 nickll / grep root dxwx---- 4 nobody nogroup 4096 root/ 当然也可以使用“-r” 来将当前用户自动映射root unshare --user -r /bin/bash 或者在使用其它namespace时使用sudo命令直接将root映射到root sudo unshare -m 命令解释 $$ :Shell本身的PIDProcessID即当前进程的PID。setcap 设置进程特权的Linux命令。它允许普通用户运行某些需要特权的服务而无需以root身份运行整个服务uid(用户ID)、gid(初始组ID), groups是用户所在组(这里既可以看到初始组如果有附加组则也能看到附加组) User namespace 与其它 namespace 的关系 . Linux 下的每个 namespace都有一个 user namespace 与之关联这个 user namespace 就是创建相应 namespace 时进程所属的 user namespace相当于每个 namespace 都有一个 owner(user namespace)这样保证对任何 namespace 的操作都受到 user namespace 权限的控制。 NetWork Namespace Network Namespace 是用来隔离网络设备、 IP地址端口 等网络械的 Namespace。 Network Namespace 可以让每个容器拥有自己独立的(虚拟的)网络设备而且容器内的应用可以绑定 到自己的端口每个 Namespace 内的端口都不会互相冲突。在宿主机上搭建网桥后就能很方 便地实现容器之间的通信而且不同容器上的应用可以使用相同的端口 。 同样的打开两个终端 ## 终端1## 查看ipifconfig ens33: 192.168.3.34 lo: 127.0.0.1## 使用 root映射的身份进入并net 隔离unshare --net --user -r /bin/bash## 再次查询发现为空net 隔离成功ifconfig## 查看进程echo $$ 16894## 终端2## Linux上创建一对veth设备sudo ip link add veth0 type veth peer name veth1ip a | grep veth 3: veth1veth0: BROADCAST,MULTICAST,M-DOWN mtu 1500 qdisc noop state DOWN group default qlen 1000 4: veth0veth1: BROADCAST,MULTICAST,M-DOWN mtu 1500 qdisc noop state DOWN group default qlen 100## 为veth0设置IP地址并启动sudo ip a add dev veth0 192.168.10.10/24sudo ip link set veth0 upifconfig ens33: 192.168.3.34 lo: 127.0.0.1 veth0: 192.168.10.10## 将veth1移动到刚才新建的network namespace 中 sudo ip link set veth1 netns 16894## 终端1## 在ns1中启动veth1并设置IP地址ip link set dev veth1 upip a add dev veth1 192.168.10.20/24ifcofing veth1: 192.168.10.20## 使用ping测试连通ping 192.168.10.10 PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data. 64 bytes from 192.168.10.10: icmp_seq1 ttl64 time0.076 ms现在ns1还不能和公网通信。解决这个问题也很简单在root network namespace中开启转发并设置SNAT在ns1中添加默认路由即可。 veth是一种Linux内核网络设备它通常用于在不同的网络命名空间之间创建虚拟网络接口。veth可以分为成对出现的两个设备一个位于主机上另一个则与容器相关联。 在容器技术中veth设备通常用于将主机上的网络连接和容器内部的网络连接隔离开来。SNATSource Network Address Translation是一种将源IP地址和端口从一个网络地址转换为另一个网络地址的技术 UTS Namespace uts(UNIX Time-Sharing System) namespace可隔离hostname(主机名)和NIS Domain name域名,例如cn,edu资源使得一个宿主机可拥有多个主机名或Domain Name。换句话说可让不同namespace中的进程看到不同的主机名. 同样的打开两个终端 ## 终端1## 使用 root映射的身份进入并uts 隔离unshare --uts --user -r /bin/bash## 查看hostnamehostname ubuntu## 修改hostname 并重新加载shellhostname ns1exec /bin/bash hostname ns1# namespace中修改的主机名不会直接修改主机名配置文件(如/etc/hostname)而是修改内核属性/proc/sys/kernel/hostname cat /etc/hostname ubuntucat /proc/sys/kernel/hostname ns1## 终端2 cat /proc/sys/kernel/hostname ubuntuMount Namespace Mount namespace 为进程提供独立的文件系统视图。简单点说就是mount namespace 用来隔离文件系统的挂载点这样进程就只能看到自己的 mount namespace 中的文件系统挂载点。 进程的 mount namespace 中的挂载点信息可以在 /proc/[pid]/mounts、/proc/[pid]/mountinfo 和 /proc/[pid]/mountstats 这三个文件中找到。 同样的打开两个终端 ## 终端1## 制作 iso 文件mkdir demo cd demomkdir -p iso1/subdir1mkdir -p iso2/subdir2mkisofs -o 1.iso ./iso1mkisofs -o 2.iso ./iso2## 准备2个挂载点 sudo mkdir /mnt/iso1 /mnt/iso2## 挂载 sudo mount 1.iso /mnt/iso1## 查看挂载情况mount | grep 1.iso /home/sa/demo/1.iso on /mnt/iso1 type iso9660 (ro,relatime,nojoliet,checks,mapn,blocksize2048,iocharsetutf8)## 终端2## 以root身分进入nssudo unshare -m## 查看挂载情况 发现挂载情况一样mount | grep iso /home/sa/demo/1.iso on /mnt/iso1 type iso9660 (ro,relatime,nojoliet,checks,mapn,blocksize2048,iocharsetutf8)## 挂载2卸载1mount 2.iso /mnt/iso2umount /mnt/iso1## 查看挂载情况 发现变了mount | grep iso /home/sa/demo/2.iso on /mnt/iso1 type iso9660 (ro,relatime,nojoliet,checks,mapn,blocksize2048,iocharsetutf8)## 终端1## 与终端2不一样了mount | grep iso /home/sa/demo/1.iso on /mnt/iso1 type iso9660 (ro,relatime,nojoliet,checks,mapn,blocksize2048,iocharsetutf8) Mount namespace 实现了挂载点的隔离但对于某些应用场景会让我们用起来很不爽。比如系统新添加了一个磁盘设备我们打算让所有的 mount namespace 都挂载它。过去的做法只能是在每个 mount namespace 中都挂载一遍很显然这太不方便了。于是在 Linux 内核 2.6.15 引入了 shared subtree 的概念来解决这个问题。Shared subtree 的核心是允许在 mount namespace 之间自动地或者是受控地传播 mount 和 umount 事件。 PID Namespace PID namespace 用来隔离进程的 PID 空间使得不同 PID namespace 里的进程 PID 可以重复且互不影响。PID namesapce 对容器类应用特别重要 可以实现容器内进程的暂停/恢复等功能还可以支持容器在跨主机的迁移前后保持内部进程的 PID 不发生变化。 Linux下的每个进程都有一个对应的 /proc/PID 目录该目录包含了大量的有关当前进程的信息。 对一个 PID namespace 而言/proc 目录只包含当前 namespace 和它所有子孙后代 namespace 里的进程的信息。创建一个新的 PID namespace 后如果想让子进程中的 top、ps 等依赖 /proc 文件系统的命令工作还需要挂载 /proc 文件系统。 ## 终端1## 进入ns, 有pid的一定要加--forksudo unshare --pid --mount --fork ## 查看进程IDecho $$ 1## 使用ps查看进程信息依旧是原始pid编号不是1psPID TTY TIME CMD2475 pts/1 00:00:00 sudo2476 pts/1 00:00:00 unshare2477 pts/1 00:00:00 bash2492 pts/1 00:00:00 ps## 使用mount 挂载/proc,并查看mount -t proc proc /procpsPID TTY TIME CMD1 pts/1 00:00:00 bash12 pts/1 00:00:00 ps## 其实 unshare 命令提供了一个专门的选项 --mount-proc 来配合 PID namespce 的创建sudo unshare --pid --mount-proc --fork PID namespace 可以嵌套也就是说有父子关系除了系统初始化时创建的根 PID namespace 之外其它的 PID namespace 都有一个父 PID namespace。一个 PID namespace 的父是指通过 clone 或 unshare 方法创建 PID namespace 的进程所在的 PID namespace。 在当前 namespace 里面创建的所有新的 namespace 都是当前 namespace 的子 namespace。父 namespace 里面可以看到所有子孙后代 namespace 里的进程信息而子 namespace 里看不到祖先或者兄弟 namespace 里的进程信息。一个进程在 PID namespace 的嵌套结构中的每一个可以被看到的层中都有一个 PID。 ## 终端1## 查看当前进程echo $$ 2351## 连续创建3个子进程sudo unshare --pid --mount-proc --forksudo unshare --pid --mount-proc --forksudo unshare --pid --mount-proc --fork## 终端2## 用pstree查看进程树pstree -p 2351 bash(2351) ───sudo(2727)───unshare(2728)───bash(2729) ───sudo(2737)───unshare(2738)───bash(2739) ───sudo(2749)───unshare(2750)───bash(2751)## 通过 /proc/[pid]/status 看看 2751 号进程在不同 PID namespace 中的 PIDgrep pid /proc/2751/status NSpid: 2751 21 11 1## 作用enter命令进入sudo nsenter --mount --pid -t 2739 /bin/bashpstree -p bash(1) ───sudo(9)───unshare(10)───bash(11)PID namespace 中的 init 进程 在一个新的 PID namespace 中创建的第一个进程的 PID 为 1该进程被称为这个 PID namespace 中的 init 进程。 在 Linux 系统中进程的 PID 从 1 开始往后不断增加并且不能重复当然进程退出后PID 会被回收再利用进程的 PID 为 1 的进程是内核启动的第一个应用层进程被称为 init 进程(不同的 init 系统的进程名称可能不太一样)。这个进程具有特殊意义当 init 进程退出时系统也将退出。所以除了在 init 进程里指定了 handler 的信号外内核会帮 init 进程屏蔽掉其他任何信号这样可以防止其他进程不小心 kill 掉 init 进程导致系统挂掉。不过有了 PID namespace 后可以通过在父 PID namespace 中发送 SIGKILL 或者 SIGSTOP 信号来终止子 PID namespace 中的 PID 为 1 的进程。由于 PID 为 1 的进程的特殊性当这个进程停止后内核将会给这个 PID namespace 里的所有其他进程发送 SIGKILL 信号致使其他所有进程都停止最终 PID namespace 被销毁掉。当一个进程的父进程退出后该进程就变成了孤儿进程。孤儿进程会被当前 PID namespace 中 PID 为 1 的进程接管而不是被最外层的系统级别的 init 进程接管。 主要参考 《linux unshare 命令,详解Linux Namespace之User》 《Linux namespace之network namespace》 《Linux Namespace : Mount》 《Linux Namespace : PID 》 《Linux Namespace : IPC 》
http://www.hkea.cn/news/14325069/

相关文章:

  • 建设网站对于电商的作用是?做推广的都是怎么推
  • 做网站切图尺寸网络推广外包代理
  • 开源网站模板江西手机网站建设
  • 湖南的商城网站建设河南省建设行业证书查询网站
  • 为什么中国人都跑去泰国做网站网站中国建筑集团有限公司电话
  • 西宁网站建设报价壹君博贴心免费软件库下载
  • 超市网站建设费用牛人网站建设
  • 高端品牌网站制作wordpress中英文版如何
  • 河间建设网站更新php wordpress
  • 网站建设ftp软件苏州网址
  • 网站建设 图标德阳公司做网站
  • 拼多多网店怎么开asp网站做seo
  • 做机械设计的要知道哪些网站沈阳模板建站
  • 深圳网站建设公司地址网站制作软件有哪些
  • 网站开发代理商wordpress前台注册登陆
  • 做家常菜的网站哪个好珠海网站建设网络有限公司
  • 建行网站网址wordpress禁止主题更新
  • 什么网站容易做流量大航母网站建设在哪里
  • 以美食为主的网站栏目怎么做建设工程人员押证在哪个网站查
  • 公司网站首页如何做福建外贸网站
  • 大名网站建设费用石家庄seo全网营销
  • ps案例教程网站公司网站百度搜不到
  • 一等一网站成都做网络推广的公司有哪些
  • 企业网站建设费属于办公费吗新人做网站不懂设计版面怎么办
  • 精品建设课程网站龙华做网站联系电话
  • 公司响应式网站个人博客页面设计图
  • iis网站压缩什么叫做电商
  • h5做网站用什么框架网站建设代理商电话
  • 提供网站建设优势四川手机网站开发
  • 苏州地产网站建设网站后台管理增加功能