Category: linux

  • docker 启动容器

    • docker 生成本地image

      docker commit -a ephuizi -m “myapp 4.1.5 version” 993448234d20 myrep/myapp:4.1.5

    • 创建网桥,划分子网

      docker network create –subnet=172.18.0.0/16 mynetwork

    • 启动容器

      指定网络,特权,共享主机device,退出时删除
      docker run –name hui3 –network=mynetwork –ip 172.18.0.12 –cap-add SYS_ADMIN –device /dev/fuse –security-opt apparmor=unconfined -it –rm myrep/myapp:4.1.5 /bin/bash

    • 连接容器

      docker -exec -it 862f428a014c /bin/bash

  • 常见LInux Capabilities

    Capabilities is a concept provided by a security system that allows root privileges to be “divided up” into different values. These values can be assigned independently to processes so that to perform a privileged operation, this process may only contain the privilege necessary, without the need to assume the identity of superuser.

    • CAP_CHOWN:修改文件属主的权限
    • CAP_DAC_OVERRIDE:忽略文件的DAC访问限制
    • CAP_DAC_READ_SEARCH:忽略文件读及目录搜索的DAC访问限制
    • CAP_FOWNER:忽略文件属主ID必须和进程用户ID相匹配的限制
    • CAP_FSETID:允许设置文件的setuid位
    • CAP_KILL:允许对不属于自己的进程发送信号
    • CAP_SETGID:允许改变进程的组ID
    • CAP_SETUID:允许改变进程的用户ID
    • CAP_SETPCAP:允许向其他进程转移能力以及删除其他进程的能力
    • CAP_LINUX_IMMUTABLE:允许修改文件的IMMUTABLE和APPEND属性标志
    • CAP_NET_BIND_SERVICE:允许绑定到小于1024的端口
    • CAP_NET_BROADCAST:允许网络广播和多播访问
    • CAP_NET_ADMIN:允许执行网络管理任务
    • CAP_NET_RAW:允许使用原始套接字
    • CAP_IPC_LOCK:允许锁定共享内存片段
    • CAP_IPC_OWNER:忽略IPC所有权检查
    • CAP_SYS_MODULE:允许插入和删除内核模块
    • CAP_SYS_RAWIO:允许直接访问/devport,/dev/mem,/dev/kmem及原始块设备
    • CAP_SYS_CHROOT:允许使用chroot()系统调用
    • CAP_SYS_PTRACE:允许跟踪任何进程
    • CAP_SYS_PACCT:允许执行进程的BSD式审计
    • CAP_SYS_ADMIN:允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等
    • CAP_SYS_BOOT:允许重新启动系统
    • CAP_SYS_NICE:允许提升优先级及设置其他进程的优先级
    • CAP_SYS_RESOURCE:忽略资源限制
    • CAP_SYS_TIME:允许改变系统时钟
    • CAP_SYS_TTY_CONFIG:允许配置TTY设备
    • CAP_MKNOD:允许使用mknod()系统调用
    • CAP_LEASE:允许修改文件锁的FL_LEASE标志

    [linux capabilities](https://www.jianshu.com/p/069bb123bb50 "linux capabilities")

  • 使用lvm

    创建pv

    pvcreate /dev/sda3
    pvcreate /dev/sda7
    

    创建vg

    vgcreate dbf2_vg /dev/sda3 /dev/sda7
    

    创建lv

    • -i 指定跨PV的个数为2
    • -I 指定条带单元的大小,对应于I/O中数据单元块的大小;数值必须为2的幂,单位KB
    • -n 制定卷的名称
    • -L 卷的大小
    #指定大小
    lvcreate -n var_lv -L 10G dbf2_vg
    
    #使用剩余所有空间
    lvcreate -l +100%FREE   -n meta_lv dbf2_vg
    
    #创建条带卷
    lvcreate -L 2G -i2 -I 64   -n meta_lv dbf2_vg
    

    (more…)

  • Security-Enhanced Linux (SELinux)

    Linux Security Mode

    Linux系统先做DAC检查.如果没有通过DAC权限检查,则操作直接失败.通过DAC检查之后,再做MAC权限检查.

    DAC

    SELinux出现之前,Linux上的安全模型叫DAC,全称是Discretionary Access Control,翻译为自主访问控制.

    核心思想:
    进程理论上所拥有的权限与执行它的用户的权限相同.比如,以root用户启动Browser,那么Browser就有root用户的权限,在Linux系统上能干任何事情.

    MAC

    SELinux在DAC之外,设计了一个新的安全模型,叫MAC(Mandatory Access Control),翻译为强制访问控制.

    核心思想:
    任何进程想在SELinux系统中干任何事情,都必须先在安全策略配置文件中赋予权限.凡是没有出现在安全策略配置文件中的权限,进程就没有该权限.

    Security-Enhanced Linux (SELinux)

    SELinux则是由美国NSA(国安局)和一些公司(RedHat、Tresys)设计的一个针对Linux的安全加强系统.

    所有DAC机制都有一个共同的弱点,就是它们不能识别自然人与计算机程序之间最基本的区别.
    简单点说就是,如果一个用户被授权允许访问,意味着程序也被授权访问,如果程序被授权访问,那么恶意程序也将有同样的访问权.

    SELinux带给Linux的主要价值是:提供了一个灵活的,可配置的MAC机制.由以下两部分组成:
    1. Kernel SELinux模块(/kernel/security/selinux)
    2. 用户态工具

    (more…)

  • 交换机在网络中到的作用

    来自知乎的答案整理

    报文

    数据经IP协议封装后称为报文,经MAC层封装后叫做以太网帧。通常不做严格区分,都叫报文。

    主机通信

    主机A向主机B发报文,知道B的IP地址,但不知道B的MAC地址。

    1. 主机A首先会发ARP报文,
      ARP报文最终在MAC层被封装成以太网帧,其源MAC地址是主机A自己,目的MAC地址是广播地址,就是向外广播询问,请求主机B回答。
      交换机接收到主机A的包含ARP广播报文的Frame,会解析该Frame,发现目的MAC地址是广播地址,就是向自己的所有端口广播该Frame,
      源MAC地址依然是主机A,目的MAC地址依然是广播地址。
      同时如果源MAC地址,交换机之前没有学习过,就会添加到自己的MAC地址表中,也就是交换机学习到主机A的MAC地址。
      经交换机广播后,ARP报文被主机B接收到,
      主机B发现被请求的IP是自己,就会发一个回应报文,同样在MAC层被封装成以太网帧,源MAC地址是主机B,目的MAC地址是主机A,
      告诉主机A你请求的IP就是我,这是一个单播报文。
      交换机接收到主机B发送的回应报文后,解析到源MAC地址是主机B,从而添加到自己的MAC地址表中,学习到主机B。
      目的地址是主机A,之前学习到了,就直接将报文转发到主机A对应的端口,源和目的MAC地址不变。
      主机A接收到主机B的回应后,就知道主机B的MAC,添加到自己的ARP表中,下次再和B通信就不需要再发ARP报文了。

    整个过程可以看出,
    一是没有出现交换机的MAC地址,
    二是报文的源MAC地址和目的MAC地址都不变。
    交换机的网络端口对应一个MAC,但通常不需要MAC地址,因为转发不需要。
    如果交换机有管理功能,通常有一个管理MAC地址,对应交换机的管理单元,例如CPU。
    交换机解析到某个端口接收的报文的目的地址是自己,就会把报文发给自己的CPU或管理模块。
    交换机解析到主机A发送的报文的目的MAC地址,是单播地址,但是自己的MAC地址表中没有,那交换机不知道向那个端口转发,就会向自己所有的端口转发该报文,源MAC地址和目的MAC地址都不变。这样交换机所有端口下的的设备都会收到该报文,设备是交换机会继续转发,这样可能引起广播风暴,引起网络崩溃,现在交换机都有广播风暴抑制功能。如果是主机,发现目的MAC不是自己,就会丢弃该报文。
    最后,如果有主机发现目的MAC地址是自己,就会按报文要求处理,只要最后发报文到交换机,交换机就会学习到它的MAC地址。
    如果最终,没有主机是目的MAC地址,那就是网络不通。