selinux 设置的彻底理解 并要 熟练经常的使用

只需要参考这篇文章就好了: http://www.jishux.com/plus/view-631994-1.html

  1. 注意 在linux中 两个术语 的严格区分和使用:
    改变: change; 改变时间 : ctime (when file status/ label last changed ) , 在ls中使用的话, 就是使用 -c这个选项.
    修改: modify ; 修改时间 mtime (when file's data(content) lat changed). 但是在ls中显示modify时间的话, 就不是-m(-m是用逗号来分隔 list of entries)
    ls命令, 列出的是, 文件的内容被 最后修改的时间, 是: mtime.

  2. linux中的几种时间
    atime 是文件被最近一次 读取的时间, 但是在使用时, 使用的不是-a, 而是-u.
    change 和 modify, 是看 你修改的是 文件的 标签 (类似 meta数据), 还是 文件 的 内容. 如果是 修改 的文件的属性(标签) , 则是 change, 如果修改的是文件的内容, 则是modify.

必须 彻底掌握 ls命令的所有 常用 选项! 同时 掌握ls中的时间 , 最重要的是 要搞清楚 关于时间的 几个选项:

  1. 凡是-t: = -time, 表示的是: 按时间排序(这个不是 显示时间 的选项! 是 _按 时间排序 _的选项) , 注意, 如果没有指明是什么时间, 则默认就是 按 mtime 进行排序!
  2. -l: 才是显示详细信息, 包括 _显示时间_的选项.
  3. 然后是 显示时间的类别 -c: -change(标签/属性)改变时间; -m(内容改变时间)
  4. 所以 , 如果是 ll -t -c/-u: 则是 sort by, and show change-time/access-time(u: 可以认为是use, use是使用即 读取的意思), 即即显示又按atime/ctime时间排序;
    如果只是-l, 没有-t, 则只是显示 atime/ctime, 但是还是 按照 名称来派序;
    不用 -l, 使用的是 ls -c 则不显示时间, 但是按atime/ctime时间来排序.
  5. **要牢固的掌握ls显示命令: 就要 :一是, 记住从 -a, -A , .... 一直到 -Z 的 所有常用的 /重要的 选项; 二是, 要经常使用不同的选项, 进行 不同的 排序输出. 而不是总是 只是 一个 ll了事! , 对于 比较重要的命令 选项, 要经常使用, 比如 -d, 显示目录本身, 而不是its contents 这样在查看当前目录本身的时候, 就不必再回到它的上一级, 再使用ll命令了, 又比如: 要将目录和 文件进行 分组 显示, 就可以使用 --group-directoris-first 选项, 可以将它做成 alias使用更方便, 比如: lg /lgr 两个别名命令... **
  6. 必须掌握ls命令的排序选项, 在命令help的第一行就说了: 有: -ctuvUSX , 倒序是 -r 选项, -R 才是 --recursive. -x是 按行排列显示, 最注意的是, -m 不是按mtime来排序显示, 而是用逗号分隔list of entries.
  7. 另外就是 如果 要在 在shell命令 中, 使用 PATTERN 模式的话, 都应该使用 '' 单引号转义 避免shell 过早地 转义! 否则 shell会将* 等特殊符号expanded, 从而引起错误, 或逻辑失败, 比如:
  • 要显示 foo开头的文件是: ll foo*
  • 相反的: 要禁止 显示 所有 以foo开头的文件: ll -I (--ignore) 'foo*' 如果不加引号, 则* 扩展后 将是 屏蔽不显示 仅仅是 第一个 foo文件, 然后 其他 以foo开头的文件 却被 只显示出来.

所以 要显示 文件 的mtime 修改 时间, 直接就是使用 ll foo.txt 就可以了, 因为这个默认的就要显示 mtime. 当然加上 -t 也没有错, 但是没有什么意义!

注意 : 虽然rm命令, 不支持 多个参数, 但是 它支持/ 可以使用 通配符*, 所以 如果要删除 可以使用 *等匹配的多个文件, 可以一次性的删除, 而不必使用 xargs, xargs: 通常使用在 不能使用 通配符的 场合 要用 其他 命令 作 管道 的 场合 ....


selinux权限?

linux里分两种东西,一种是死的inactive, 一种是active活的. 进程就是 active, 而文件是inactive
**不管对文件设置什么东西: 权限/属性等等, 都是 "死的", 只要你 不对文件(对资源) 进行操作, 那么系统就是安全的! **
0 day 漏洞, 就是软件在发布初期就发现了的漏洞.
selinux的目的: 内核模块; 最小权限原则,就是 最大限度地减小 系统中的 进程 对机器中的资源的访问权限.
selinux 主要是针对 进程 而言的.

selinux的对象所属, 包括两个: 一个是文件/资源, 一个是进程, 只有当进程的 selinux属性和 文件的selinux属性相对(相符, 不一定是相同)时, 这个程序才能访问这个资源.

**我首先设置/ 规定 一下, 资源(就是文件)的 selinux (就是一种安全属性, 类似于 rwx 访问属性的一种 属性而已, 也可以叫做 selinux权限)属性 , 那么此时, 是不是 就只有 具有 跟文件的selinux属性相 符合(相对, 不是说 相同...) 的 进程 才能 使用 这个文件呢? **

注意, 在 selinux中, 是没有 root这个 用户的, 即seilunx 不理会 用户的概念, 它是由管理员作出 规定的, 任何人, 包括root都不能 绕过它

进程具有权限吗? 如何理解 进程的权限?

  1. 其实进程是没有 权限的!
  2. 进程只是一个工具, 不同的人/不同的用户 来使用同一个进程/工具, 他的结果就是不一样的.比如 同样是一个工具/进程 vi, 你以普通用户foo去 运行这个工具 : vi /etc/passwd, 就会报错permission denied. 但是 你以root 用户去执行的话, 就可以执行
  3. 所以, 进程的权限 实际上就是 它背后的 用户的权限, 就是 启动这个进程的 用户(对资源)的 权限

disc: 重音在 di后面, s跟后面的部分连读.
di'scrte 分离的, di' scretionary : 自主的, 自己决定的.
DAC: discretionary access control: 自主访问控制, 就是对资源的访问权限 以及 授予他人访问的权限 是由 资源的 owner所有者来决定的.
MAC: mandatory 强制访问控制,
DAC : 是基于 用户的 . 而MAC 是 基于 "类型的" "文件和 进程的 类型 " 的访问控制.

在输入 密码等 不会 回显 的 地方的时候, linux 仍然支持 backspace和del删除 已经输入的字符! 其实 输入的字符 跟其他地方输入的 是一样的 , 只是不回显 , 你看不到 而已!

targeted: 定向的, 把...作为目标的, 定为... 把...定位目标
we haven't spe'cifically (特意的/ 有意的, 专门的) targeted school students. The company has targeted adults as its primary customers.
SELINUX=enforcing(ing表示正在生效的) SELINUXTYPE=targeted: /etc/selinux/config, ( linux中的注释只需要一个 # 就可以了, 注释也需要缩进) targeted表示: targeted processes are protected. 意思是: 对目标进程(主要是 大多数 网络 服务进程)进行保护.

在 selinux中的 词语 : confined: 受限制的 , 引申为 "进程或文件 受管制的", unconfined : "不受管制的"

术语: 进程叫作: "主体,subject", 资源(文件/目录/端口等) 叫做: object 对象.
selinux的安全上下文, 又叫 "安全文本"
分 文件 的安全上下文, 和进程的安全上下文, 只有当 进程的context和文件的context 相对(相适应??, 不一定是一样的)的情况下, 进程才能访问该资源.
要查看文件或进程的上下文, 在绝大多数的地方, 都是使用 这个 "specifically" 专用的选项: -Z --context.


sql文件的写法/语法

实际上sql文件, 就是 对数据库/表 等 进行 创建/操作等的sql语句组成的. 是文本化 的文件, 告诉数据库服务器如何进行创建 数据库/表, 以及插入 相应的数据的文本化 文件, 其实你完全可以自己写sql文件.
*使用sql文件的最大好处就是 : 不需要你自己再手动输入 表 数据了,直接导入就可以了, 这对于 包含大量 实际数据/生产数据的 数据库/表的倒入导出 是非常重要的. 省事的. **
语法规则是: 注释用 --, 或 /
..*/ ; 每个语句以 分号结束: 比如:

-- 首先创建表
drop table if exists `foo_table` ;   /* drop table 和后面的内容 共用一个宾语 , 数据库/表/字段,  建议都加上反引号*/  
create table `foo` (...);

-- 先要锁定表进行插入操作,  因为可以同时锁定 多个表,所以用tables 复数??
lock talbes `foo` write;  

insert into `foo` values(...), (...), (...);

unlock tables;

.....

多态的两种方式: 重载和重写的区别.

  1. override和overloading
    两者都是 多态的表现形式
    overloading是重载, load: 是负载, 负重的意思,所以,overloading是针对同一个类而言的, 是在同一个类的内部。 是同一个类的同名函数,只是函数的参数个数、类型、顺序不同。 重载函数的返回类型可以不同
    override是重写,覆盖。 ride是骑在...上面。override就是撤销、否决、反对/推翻等含义. 它是父类和子类之间的一种多态形式,是子类方法对父类同名方法的一种"重写/改写,覆盖". override的要求是: 父类和子类同名方法的声明要完全一致,相同,包括函数的返回类型; 其次, 被重写的方法必须是父类的非私有方法(可以是public/protected), 如果父类的同名方法是私有的, 那么子类根本就看不到 父类的该方法,自然也就无法重写了, 此时,子类的该方法只能看作是子类的一个普通方法, 跟父类完全无关; 再次是, 子类的重写方法的访问限制不能比父类更严格!

  2. php不能直接实现方法的重载, 是用_ _call魔术方法来模拟重载的.
    类的内部: 就是在类定义的时候, 在类的大括号之间的区域 就是类的内部
    类与类之间, 虽然可以继承, 但是 类的名称 是不能一样的, 所以, 子类调用父类的public/protected方法时, 可以使用两种方式: 即 parent::method, father::method

  3. 当子类没有重写、覆盖父类的方法时 , 默认的就是调用的 继承的方法, 即父类的方法; 当子类重写了父类的方法时, 就调用子类
    自己的方法。

如何理解目录的 -x权限?

-x是执行权限, 对于目录而言, -x是指 是否具有 在 该目录下执行shell命令的权限。注意是指该目录下, 而不是针对该目录 本身。
而-r是读 权限, 是指读取目录里面的内容权限.
一定是 先有 -x权限, 然后才有 -r权限, -x权限是目录最基本/最根本的权限
如果没有-x权限, 那么 就没有在该目录下执行 命令(包括ls命令, 甚至cd命令)的权限 , 既然没有执行ls 命令 的权限 , 因此 ,即使对该目录具有 -r读的权限, 那同样你也不能查看它里面的内容. 因为你连ls的权限都没有, 那自然你不能查看了...

因为sql是所有数据库 的共有名称, 所以, mysql的配置文件,就省略了sql, 是: /etc/my.cnf 和 my.cnf.d

mysql的另一个开源数据库mariadb, 使用上只有极其微小的 两个差异 : 一是: 安装时的名称是 mariadb, maridb-server; 二是, 启动 的服务名称是 : mariadb.service. 其他使用方法 和 对数据库/表的 操作命令 完全一样!

no和not的区别?
no可以作: 副词; 形容词;名词:
no作副词: yes/no回答; 放在形容词的比较级前面表示 对比较级的否定, 即: "并不比..." It is no better than it was before.
no 作形容词, 修饰名词,表示 没有, 具有强调意味, 等于not any的意思(但是要比not any等要简洁些, 语气更强烈一些, 所以 推荐使用 no!! ), 后面要直接跟名词, 此时, 名词前不能有: a/an/the, his, much, any等词, 但是可以有其他并列 修饰 形容词.
除此之外, 其他地方用not . 比如: there is no air or water on moon. 或者: there is not any water or air on the Moon.
no 还可以作名词, 表示: "否定; 反对; 反对票; 否决票" two noes make a yes.


phpmyadmin的使用登陆

  1. 在phpmyadmin的配置文件: 就是 /etc/phpMyAdmin/config.inc.php中 配置: 整个文件就配置了 一个变量: $cfg: $cfg['Servers'][$i]['AllowNoPassword'] = true 即可实现 无密码登录

  2. 登录地址是: localhost/phpmyadmin, 跟 localhost的配置 DocumentRoot地址目录 具体在哪里 无关.

  3. 应该在设计表的时候, 给一个 "comment" "注释" 字段, 对字段作必要的 解释/注释!

  4. 可以在一个表中, 创建多个索引. 可以是一个字段的索引, 也可以多个字段联合 作一个索引.

  5. **在临时切换 用户的时候, 比如: 使用 su -c '...' 的时候, 并不会 去执行 该用户的 .bashrc文件, 只有 在使用 su 命令 完全切换 用户的时候, 才会去执行: .bashrc文件. 所以如果要使用 root的环境变量, 就应该去编辑/root/.bashrc文件! **

**make sure umask sane: [sein] 合理的, 明智的: umask 022 **
/etc/init.d/functions 文件, 顾名思义, 就是规定/定义了 很多 系统全局性的 函数! 和一些 系统全局性的 变量等: 如: PATH: (set up a default search path) export

更好的配置 gnome-terminal,更方便更 高效的使用 !

  1. 首先要分清: gnome-terminal 和 terminal的不同: gnome-terminal仅仅只是一个软件, 或者说是一个 模拟器, 他本身并不是 一个 terminal终端! 它只是 虚拟终端的 承载器, 容器.
    只有它里面运行的连接控制台才是终端, 而且这些终端都不是真正的终端, 是 虚拟终端, 所以叫 pts. (pseudo terminals 简称: pts : s表示复数). 每次创建一个终端(通过快捷键ctrl+shift_t)就会使 pts的终端号 增加1, 依次是: pts/0, pts/1, pts/2...

  2. 重新合理地设置g-terminal的快捷键 使用起来更方便:


注意, bash中的特殊符号是很多的, 并不只是 前面提到的那些(一个原则: 基本上, 除了字母和数字外, 其他的符号都是 shell的特殊符号...) 包括: 参考: http://www.cnblogs.com/balaamwe/archive/2012/03/15/2397998.html

#   ;   ;;      .      ,       /              'string'|       !   $   ${}   $?      $$   $*  "string"*     **   ?   :   ^   $#   $@    `command`{}  []   [[]]   ()    (())  ||   &&       {xx,yy,zz,...}~   ~+   ~-    &   <...>   +       -        %=   ==   != 

;; 连续分号, 是 case的 terminator
反引号, 也叫 倒引号
! 叫做 "反逻辑"
: 冒号表示 空命令, 表示 "什么都不做, 但是返回值 是0 , 表示 成功!"
$...和!$如何区分: 表示值 的符号 是 以$开头的, 如: $0, $1, ..$n, 两位数字的用${11}, ,$*, $@, $#, $?, 而表示 上一次命令 相关的, 则是以感叹号开头! 的: 如 :!! !$

~: 的读音: ~ : 波浪号, tilde[tild2] 西班牙语的鼻音,鄂化音


关于selinux的操作 主要有 种:

  1. 显示selinux: ls -Z, ps -auxZ | grep 'httpd'
    如果只是显示 httpd, 连grep的都要过滤掉, 就使用 : ps -aux | grep -v 'grep' | grep - w 'httpd', 其中, -v就是 反过来的, grep通常是显示匹配的, 而-v 则是显示不匹配的.

  2. 修改: chcon: change context
    修改context的时候, 还是要注意 文件的权限问题. selinux可以认为是linux系统的第二道 安全关卡: 第一道是DAC, 是根据文件权限来控制安全的; 第二道是selinux. 虽然selinux中没有root, 是系统管理员规定的, 任何人都不能绕过去. 但是 在 可以访问设置 selinux之前的时候, 还是在DAC管理控制的范围内. 所以 chcon的时候, 同样要考虑修改文件/进程的context时的权限问题. 比如普通用户, 就不能修改/etc/passwd, /etc/group文件的context, 必须要使用root用户才能修改...

  3. chcon 的语法根chmod chown等一样类似, 都是 直接在 后面跟上要设置的目标 context, 如: chcon -u system_u -r object_r -t user_home_t foo.txt

  4. context 的设置, 是以 se 来代替, 比如 seinfo, selinux的类型, 其实就是 一些 关于 文件的位置/功能/权限等的 一些 描述性的/直观的描述.如: passwd_file_t, user_home_t, httpd_t等等.

  5. selinux有一个"虚拟 文件系统", 如同 /proc系统一样, 也有相应的文件, 它包括一个 selinux 安全服务器+ selinux的数据库.


  1. 关于linux的操作的熟悉程度, 区别就是关于这个命令的 选项的不同使用: 熟练者, 更高级的操纵着就是 对 选项 有更深入 更透彻理解和使用的人, 初级者就是 只知道有这个命令的人.
    比如对于 grep这个命令:
    -w 是 仅匹配完整单词, 这个就不需要 相vi中的搜索一样: < >
    -x是仅匹配整行
    -i则是 --ignore-case 忽略大小写
    -r则是 对目录进行递归遍历,
    -v 则是 显示 non-matching line 不匹配的行. 即 跟默认的显示 匹配的行 相反的...

  2. **对linux命名的 长选项? ** 使用 两个短线--, 也可以不需要 指定值(本身该单词, 就能 表达意思了...). 比如: -i, --ignore-case , 但是如果还不能确定的话, 就要指定值, 此时就要注意了: 用短选项的时候, 指定值 是直接写在后面的, 中间不能 用 等号,如: ls -w 200 mysql -uroot -p , 而用 长选项使用完整的单词来 表示 选项值的时候, 就要 加等号了: grep --directories='recurse'

原文地址:https://www.cnblogs.com/bkylee/p/7741114.html