玩命加载中 . . .

Linux


1. Linux简单学习


1.1 Linux安装与VMware使用


1.1.1 Linux的不同界面
  • Ctrl+alt+F1~F6:切换不同的界面
  • 进入图形界面:startx(有时不加x)
  • 使用exit 注销账户,然后切换其他用户

1.2 Linux的命令规范:command [-option] parameter1 …

  • command [-option] parameter1 parameter2 …
  • 命令 选项 参数1 参数2
  • 一个“-”使用简写;两个“–”使用全名
  • 命令、选项、参数之间用空格分开(不管有多少空格都视为一个空格)
  • 命令太长时可以用转义字符 \t、\b等来转义回车键
  • 回车键代表命令执行
  • 命令的大小写不同,不是同一个命令

1.2.1 Linux基础命令操作
  • ls :显示列表
  • date :显示时间日期
  • cal :显示日历
  • bc :计算器(+加、-减、* 乘、/除、^指数、%取余)
  • which:查看命令所在路径
    1.2.2 几种经常使用的快捷键
    Ctrl+C:终止(中断当前程序)
    Ctrl+D:键盘输入结束、exit退出
    Tab(一次不行按两次):命令补全,文件补齐,参数补齐

Ctrl+u:光标处删除到首

Ctrl+k:光标处删除到尾

Ctrl+a:光标移动到首


1.3 系统帮助命令

1.3.1 --help :可用于查看命令
  • Usage:执行命令的语法
  • 后面是具体参数的介绍
1.3.2 man:可用于查看命令和文件格式

1).man命令中第一行DATE(1~9)的含义

代码 代表内容
1 用户在shell环境中可以操作的命令
2 系统内核可调用的函数与工具
3 一些常用的函数(function)与函数库(library),大部分为C的函数库
4 设备文件的说明,通常在/dev下的文件
5 配置文件或是某些文件的格式
6 游戏
7 惯例与协议
8 系统管理员可用的管理命令
9 跟内核有关的文件
2).命令的介绍(每个区域的意思)
代号 内容说明
NAME 简短的命令,数据名称的说明
SYNOPSIS 简短的命令语法(syntax)简介
DESCRIPTION 较为完整的说明
OPTIONS 针对SYNOPSIS部分中,有列举的所有选项的说明
COMMANDS 当这个程序在执行时,可以在此程序中执行的命令
FILES 这个程序或数据所使用或参考或链接到的某些文件
SEE ALSO 可以参考跟这个数据或命令有关的其他说明
EXAMPLES 一些可以参考的范例
* CONFIGURATION:配置
* ENVIRONMENT:与命令相关的环境参数说明
* AUTHOR:作者
* COPYRIGHT:版权
3). man命令常用的快捷键
按键 进行工作
空格键 向下翻一页
[page down] 向下翻一页
[page up] 向上翻一页
[home] 去到第一页
[end] 去到最后一页
/string 向下查找string这个字符串
?string 向上查找string这个字符串
n,N 利用/或?来查找字符串时,可以用n来继续下一个查找,利用N来进行反向查找
q 结束这次man page查找
上下左右 一行一行翻页
4).附man命令的使用选项:
  • man -f (命令) :等同于whatis,查找与命令相关的文件

  • man -k (关键词) :等同于apropos,搜索存在关键词的手册概述并显示所有匹配结果

  • whatis:查看命令帮助信息所在的路径

    5).<>:必选项

5).一些符号的使用说明:

  • <>:必选项
  • [] :可选项
  • … :可以使用多个参数
  • | :多选一
  • () :分组(没有实际意义)
1.3.3 info

将文件数据拆分成一个一个的段落,每个段落用自己的页面编写,并且在各个界面中还有类似网页的超链接来调到各不同的界面中,每个独立的界面也被成为一个节点(前提:该文件必须用info的格式写)

info命令常用的快捷键

按键 进行工作
空格键 向下翻一页
[page down] 向下翻一页
[page up] 向上翻一页
[Tab] 在节点之间移动(有节点的地方,通常以*显示)
[Enter] 当光标在节点上面时,按下enter可进入该节点
b 移动光标到该info界面当中的第一处
e 移动光标到该info界面的最后一个节点处
n 前往下一个节点处
p 前往上一个节点处
u 向上移动一层
s(/) 在info page中进行查找
h,? 显示帮助选项
q 退出info
##### 注:其他有用的说明文件放在/usr/share/doc/目录下。
1.3.4 type :查看命令是内部命令还是外部命令
1.3.5 help:用来查看内部命令的帮助信息

2. Linux的基础学习

2.1 文件权限与目录配置

2.1.1 文件属性、文件权限

使用 ls -al 列出文件及其属性

  • 属性(依次序):【权限】【链接】【拥有者】【用户组】【文件容量】【修改日期】【文件名】
  • 权限一共有10位(共4组)
  • 使用file 命令来查看这个文件的类型
权限位 代表的含义
第1位(d、-、l、b、c、s、p) d:目录;-:普通文件;l:链接文件;b:可存储设备;c:键盘鼠标;s:套接字文件;p:命名管道(使用file 命令来查看这个文件的类型
第2,3,4位 文件拥有者的权限
第5,6,7位 文件拥有者所在用户组的权限
第8,9,10位 非文件拥有者所在用户组的人的权限(陌生人的权限)
##### 2.1.2 文件权限rwx的代表数字
文件权限 代表数字
r 4
w 2
x 1
##### 2.1.3 文件权限的修改命令 chown、chgrp、chmod
  • chgrp [-R] :修改用户所属用户组
    • chgrp 用户组 文件/目录 : 修改用户组
  • chown [-R] :修改文件拥有者
    • chown –regerence=a.txt b.txt 复制a的权限到b上
    • chown [-R] 账号名称:用户组名称 文件或目录
    • chown [-R] 用户名 文件/目录 :修改属主【递归修改】
    • chown [-R] .用户组 :修改用户组
    • chown [-R] :用户组 :修改用户组
    • chown [-R] 用户名:用户组 :修改用户名和用户组
  • chmod [-R] :修改文件的权限(SUID、SGID、SBIT等)
    • chmod [augo] [+-=] [rwx] filename
    • 数字类型修改权限:chmod [-R] xyz 文件或目录 (xyz就是rwx属性数字的相加,例如 r+w=6 )
    • 符号类型修改权限:chmod [-R] a=rwx,u=rwx,g=rwx,o=rwx 文件名或目录
命令 身份 修改方式 权限 文件名
chmod a(所有人),u(用户拥有者),g(文件组),o(其他人) +,-,= r,w,x filename
##### 2.1.4 目录与文件的权限不同
  • Linux下一个文件到底能不能执行,跟后面的扩展名没有关系,而是具不具备x权限
组件 内容 r w x
文件 详细数据 读到文件内容 修改文件内容 执行文件内容
目录 文件名 读到文件名 修改文件名 进入该目录的权限

2.2 Linux目录介绍

2.2.1 简单区别
可分享 不可分享
不变(static) /usr(软件存放处) /etc(配置文件)
/opt(第三方辅助软件) /boot(启动与内核文件)
可变动(variable) /var/mail(用户邮箱) /var/run(程序相关)
/var/spool/news(新闻组) /var/lock(程序相关)
##### 2.2.2 具体目录

2.3 目录概念及相关讲解

2.3.1 目录与路径
  • 相对路径:相对于当前目录写起
  • 绝对路径:从根目录写起
    2.3.2 目录的相关操作
目录 代表
. 当前目录
.. 上一层目录
- 前一个工作目录
~ 目前使用者所在的家目录
~account 代表account这个使用者的家目录
2.3.3 执行文件路径的变量:$PATH

path 变量由一堆目录组成,每个目录用“:”隔开

  • 将一个目录加入系统环境变量:PARH = " ${PATH}:/目录名(绝对路径)"`
  • 不建议将本目录“.”加入路径(很危险)
    2.3.4 处理目录的命令
  • cd :切换目录 (配合上面的目录代表符号)
  • pwd [-p]:显示当前目录(-p显示真正的目录而不是链接)
  • mkdir [-m -p]:建立一个新目录(-m设置权限,-p进行递归创建)
  • rmdir [-p]:删除一个目录(-p递归删除)
  • basename:获取文件名
  • dirname:获取目录

    2.4 常用命令及介绍

ls、cp、rm、mv
  • ls -aAdfFhilnrRSt 文件名或目录
  • cp -adfilprsu 源文件 目标文件
  • rm -fir 文件或目录
  • mv -fiu source1 source2 source3 ... directory
  • file :显示文件类型(d - c s p l b )
命令 介绍 可带参数
ls 查看 -a:显示所有文件;-d:仅列出目录本身;-l:详细信息显示(可以使用alias转换别名)
cp 复制 -a:文件的权限信息都复制;-i:覆盖前进行询问;-p:连同属性(权限、用户、时间)一起复制(不使用默认的);-r:递归复制;-l:硬链接;-s:软连接;-b:新复制的文件名后加~
rm 删除 -f:强力删除文件;-I:删除前询问;-r:递归删除(很危险)
mv 移动(重命名) -f:强制移动;-i:询问是否覆盖;-u:更新文件;-b :先对原文件备份~;-t:将多个文件移动到一个目录(mv -t 目录 文件1 文件2)
file 查看类型 -b:显示结果时,不显示文件名;-c:显示file是如何判断文件类型的;-i:输出mime类型的字符串;-z:显示压缩文件的内容;-L:查看软连接对应的文件类型;-f:查看文件中文件名的类型
cat:查看文件内容 tac:逆向查看文件(从最后开始)
命令 可用参数 使用说明
cat -A = -vET 其他命令的集合
-b;-n 列出行号(仅列出有字的);列出行号(包含空白行)
-E;-v;-T 显示换行符$;显示特殊字符;用^I显示[tab]
cat > 文件名 <<EOF 输出重定向 将键盘输入的内容添加的文件中,以输入EOF为结束
cat >> 文件名 <<EOF 追加重定向 向文件中追加数据,以输入EOF为结束
cat 文件1 文件2 > 文件3 合并重定向 将文件1 文件2 的内容合并到文件3中
nl:添加行号打印
命令 可用参数 使用说明
nl -b a; -b t 全部列出行号;空行不列出行号
-n ln;-n rn;-n rz 行号在最左方显示;行号在最右方显示且不加0;行号在最右方显示且加0
-w 行号栏位占用的字符数
moreless :查看文件 (一页一页查看)(常在管道中使用)
命令 按键
more 空格键:向下翻页(屏);Ctrl+ f:向下翻一页(屏);enter:向下翻一行;/字符串:查找字符串;:f :显示文件名以及目前的行数;b:往回翻页;q:立即离开
v:调用vi编辑器;!command:调用shell命令(与在命令行一样)
+ number :从第几行显示文件
less 空格键:向下翻页;[page down ]:向下翻页;[page up]:向上翻页;/字符串:向下查找;?字符串:向上查找;n:重复前一个查找;N:反向重复前一个查找;g:前进到这个数据的第一行;G:前进到这个数据的最后一行;q:离开
head /tail :查看n行
命令 参数 说明
head(从前开始) -数字 number 文件名 显示(数字)行(默认是10行)
tail (反向) -数字 number 文件名 显示(数字)行
-f number 持续刷新文件的内容
od :查看非文本文件的的内容
  • -t a:默认字符;
  • -t c:ascii码; C(放在type中间进行数制的对比)
  • -t d[size]:利用十进制输出,每个整数用size bytes 例:od -t oCc 文件名
  • -t f[size]:浮点数制
  • -t o[size]:八进制
  • -t x[size]:、八进制、十六进制
mkdir :创建目录
  • -m:设置权限
  • -p :递归创建
  • -v :显示
  • mkdir -p a/{b,c,d} :递归创建a目录,在a目录下创建b,c,d同级目录(使用花括号的作用)
  • mkdir -p {a,b}-{c,d} :会创建a-c,b-c,a-d,b-d等4个目录
touch:创建新文件或修改文件时间:
  • -a : 修改访问时间
  • -c :不会创建文件,仅修改文件的时间
  • -d :用指定的日期创建/修改新文件的日期,不使用系统时间
  • -t :用指定格式的时间戳创建新文件,不使用系统时间
  • -m :修改mtime
tree :(= ls -R)查看目录树
which :查找命令所在路径
  • [-a]:找出所有的而不仅仅是第一个
whereis:查找命令所在路径、源代码文件、帮助信息文件所在的目录
  • -b :查找命令所在路径

  • -s :源代码文件

  • -m :只显示帮助信息所在的位置

locate/locatedb:建立数据库,方便快速查找
  • updatedb
  • locate [文件或命令]
find :查找文件
  • find [path] [option] [option]
  • -exec … ;

2.5 文件的隐藏属性

2.5.1 默认属性查看:umask
  • 里面的数字代表需要减掉的权限(默认是022)
  • umask 022 :代表只拿掉其他人的w权限

##### 2.5.2 隐藏属性的查看及修改 chattr

  • chattr 配置文件的默认属性

  • chattr [+-=] [ASacdistu] 文件或目录

第二参数介绍:

  • A:不修改atime
  • a:文件只能增加数据,不能删除数据【root】
  • i :不能增加、删除、改名、设置链接、写入【root】
  • s:删除时会彻底删除,不能恢复
    • u:与s相反
  • lsattr 显示文件隐藏属性

    • lsattr -[adR] 文件或目录
    • -a:将隐藏文件的隐藏属性也显示
    • -d:如果后面接目录,仅将目录的属性显示,不显示里面的文件的
    • -R:与-d相反,递归显示子目录的数据属性
  • /、 /dev/ 、 /tmp/ 、 /var/ 、 /etc/ 不受chattr保护

2.5.3 文件的特殊权限:SUID、SGID、SBIT

3. 磁盘与文件系统

3.1 磁盘

3.1.1 磁盘组成结构:
  • 盘片:存储时每个盘片平均存储(如有100k数据存储在4盘片的磁盘上,则每个盘片存储25k)
  • 磁头、轴、马达
3.1.2 磁盘逻辑结构
  • 磁道:盘片以轴为中心组成的同心圆
  • 扇区:磁道被分为多个扇区
  • 柱面:不同盘片上相同编号的磁道组成柱面
3.1.3 磁盘延时
  • 因磁头不能立刻到达目的位置,移动时会有延迟
  • 磁头悬浮在盘片上
3.1.4 磁盘分区格式化
  • 低级格式化:
  • 高级格式化:分区装入文件系统
  • MBR:主引导记录,位于0磁道0柱面1扇区,512字节,分为3部分
    • 446字节的boot loader(启动加载器,存放引导代码)
    • 64字节磁盘分区表
    • 2字节majic number(检查MBR是否有效)
  • 主分区(最多4个):主分区+扩展分区 <= 4
    • 扩展分区:16字节,只能有一个,扩展分区是一个指针,指向磁盘另外的位置,不能直接存储数据
    • 逻辑分区:多的只能是逻辑分区

3.2 文件系统

文件系统:一套软件(XFS、NTFS、FAT、EXT3、EXT4等),存储数据或文件的一种格式,文件系统不存在于分区上,位于磁盘的某一个位置;文件系统把分区分割成两部分,一部分存放元数据,另一部分存放真正的数据

3.2.1特性:
  • iNode:记录文件的属性,一个文件占用一个iNode,同时记录此文件的数据所在的区块号码

  • 超级区块:记录此文件系统的整体信息,包括iNode与数据区块的总量、使用量、剩余量,以及文件系统的格式与相关信息。

  • 数据区块:实际记录文件的内容,若文件过大时,会占用多个区块。

  • 读取规则:用户读取文件时,先找到文件的iNode,然后分析iNode所记录的权限与用户是否符合,若符合才能够读取文件内容

4.shell

  • shell启动后—>>进程:使用PID号进行区分,(在系统中,一个进程只认为自己存在)
  • 父shell与子shell相互独立(父子shell之间环境相互独立)
  • cat /etc/shells/:查看当前系统所支持的shell程序

4.1bash特性:

4.1.1命令历史:.bash_history
  • history:
    • -d:删除历史命令(history -d 第几行(开始) [连续几行]
    • -c:清空当前内存的命令历史
    • -w:将命令历史保存到某个文件中
    • 使用技巧:
      • !n:执行命令历史中的第n行命令
      • !-n:执行命令历史中的倒数第n行命令
      • !word:执行命令历史中最近一次的Word命令
      • !!:执行上一条命令
      • !$:引用运行的这个命令的之前所用过的最后一个参数
               ESC键(按完松开). 键(按完松开)
4.1.2 管道,IO重定向:|
  • 计算机体系结构:
    • 控制器:CPU
    • 运算器:CPU
    • 存储器:RAM:内存
    • 输入设备:(input):键盘、鼠标
    • 输出设备:(output):屏幕、打印机
  • 计算机总线:
    • 地址总线:负责内存寻址
    • 数据总线:负责传输数据
    • 控制总线:负责控制指令
  • 寄存器:CPU中内部临时存储空间
  • I/O设备:负责计算机内部存储设备和外部存储设备(硬盘、光盘)
  • 程序:指令+数据
    • 指令:有程序提供,负责加工数据
    • 数据:系统中数据可以有多个数据来源,比如来自变量、文件、输入设备
  • 标准输入输出设备:
    • 标准输入设备:键盘(stdin),文件描述符:0
    • 标准输出设备:显示器(stdout),文件描述符:1
    • 标准错误输出设备:显示器(stderr),文件描述符:2
  • 三种数据流:
    • 标准输入数据流 / 标准输出数据流 / 标准错误输出流
  • 当在Linux中打开一个文件时,内核会反复调用,对于文件标识就很重要,用文件描述符来标识文件,文件加载完用数字标识 :fd(file descriptor)

IO重定向:把默认输入输出来源,重新定向到其他的文件或设备:

  • 输出重定向:
    • >:覆盖输出重定向
    • >>:追加输出重定向
    • 2>:错误覆盖输出重定向
    • 2>>:错误追加输出重定向
    • &>:混合覆盖输出重定向
    • &>>:混合追加输出重定向
  • 输入重定向:
    • <:输入重定向
  • |(管道):连接多条命令,把前一条命令的输出结果作为后一条命令的输入条件
    • 格式:command1 | command2 | command3 | …..
    • 思路:北京 、河北保定、河北大学、 找 2018级 计算机系 3班 张三 (组合小程序,完成实现大功能)
    • tr命令:实现字符转换:tr ’a-z‘ ’A-Z‘
    • tee命令:把数据重定向到给定文件和屏幕上
    • 管道使用例子:cat /etc/passwd | tr ‘a-z’ ‘A-Z’
4.1.3 命令别名:(使用alias定义的别名只在当前shell中生效)
  • alias: alias ll=‘ls -l’(等号后不能有空格,等号后用英文单引号、双引号引起来)
  • unalias:unalias 命令别名
4.1.4 命令行编辑
  • Ctrl+a:光标快速跳转到命令行行首
  • Ctrl+e:光标快速跳转到命令行行尾
  • Ctrl+u:快速删除光标位置到命令行行首的字符
  • Ctrl+k:快速删除光标位置到命令行行尾的字符
  • Ctrl+l :清屏(clear)
4.1.5 命令行展开
  • 命令补齐:在path变量中搜索命令并补齐(不能补齐选项)

  • 路径和文件补齐:在系统路径中查找

  • 命令替换:(常用在编程中)

    • 将命令中的子命令替换成子命令执行结果的过程:$(command)、`commamd `(两边是反撇号)

    • " "(双引号):弱引用(可是实现变量的替换,把变量名替换为变量值)

    • ``(反撇号):命令引用

    • ‘’(单引号) :强引用,不会替换

##### 4.1.6 命令行通配

  • * :匹配任意长度的任意字符
  • ?:匹配任意单个字符
  • []:匹配指定范围内的任意字符:[ab][a-z][A-Z][0-9][a-zA-Z][a-zA-Z0-9 ]
  • [^]:匹配指定范围外的任意字符
  • [:space:]:代表空格
  • [:punct:]:表示所有标点字符
  • [:lower:]:表示所有小写字母
  • [:upper:]:表示所有大写字母
  • [:alpha:]:表示所有字母(包括大小写)
  • [:digit:]:表示所有数字
  • [:alnum:]:表示所有数字和大小写字母
4.1.7 变量
4.1.8 编程

5. Linux账号与用户组

5.1 用户管理重要文件的解释

5.1.1 用户标识符
  • 用户:UID

  • 组:GID(逻辑容器:包含用户,实现集中授权)

  • 用户分类

    • 管理员用户:root UID:0
    • 普通用户: 1000-65535
    • 程序(系统)用户:1-999
  • 组分类

    1.第一种分类方式(按照用户分类):

    • 管理员组:root

    • 基本组:Linux创建新用户时,如果没有指定隶属的组,则系统为用户建立一个同名的用户组

    • 附加组:一个用户可以有多个附加组(有效组)

    2.第二种分类:

    • 管理员组:root
    • 普通用户组:
    • 系统用户组:
5.1.2 UID/GID解析
  • 识别思路:字符–>解析–>UID/GID

  • /etc/passwd:存储用户基本信息

  • /etc/shadow:存储用户的影子口令

  • /etc/group:存储组的用户信息

5.1.3 /etc/passwd 解释
  • 第一列:用户名(name)
  • 第二列:加密密码(x表示密码占位符,密码保存在/etc/shadow中)
  • 第三列:UID
  • 第四列:GID
  • 第五列:描述信息
  • 第六列:用户的宿主目录
  • 第七列:用户默认使用的shell(/etc/shell)
5.1.4 /etc/shadow 解释
  • 第一列:用户的登录名
  • 第二列:用户加密后的密码
  • 第三列:最后一次更改密码的时间(时间戳)
  • 第四列:密码不可以修改的天数
  • 第五列:密码需要重新修改的天数
  • 第六列:密码需要修改前的警告天数
  • 第七列:密码过期后账号宽限时间
  • 第八列:账号失效日期
  • 第九列:保留 (暂时没用)
5.1.5 /etc/shadow 密码区域解释

三部分组成:用$隔开(格式:$id$salt$encrypted)

  • 第一部分:加密算法
    • 1:md5加密
    • 5:SHA-256加密
    • 6:SHA–512加密
  • 第二部分:随机序列号(salt)
  • 第三部分:随机序列号和设置密码共同加密后的字符串
5.1.6 /etc/group 解释
  • 第一列:组名字
  • 第二列:组的密码区域
  • 第三列:组的id号(GID)
  • 第四列:组的成员(不显示初始化成员)
5.1.7 /etc/gshadow 解释
  • 第一列:组的名字
  • 第二列:组的密码
  • 第三列:组的管理员
  • 第四列:组的成员列表

5.2 重要的文件

5.2.1 /etc/useradd目录(只对新用户有效):
# useradd defaults file  //注释行
GROUP=100        //可以创建普通组
HOME=/home       //普通用户宿主目录(在home下生成和用户同名的目录)
INACTIVE=-1      //是否启用用户过期停止使用权(若为数字,则代表过期宽限时间,-1代表不启用)
EXPIRE=          //设定过期时间
SHELL=/bin/bash  //设定用户默认使用的shell
SKEL=/etc/skel   //新用户宿主目录模板目录
CREATE_MAIL_SPOOL=yes   //是否为用户启用邮件通知
5.1.2 /etc/skel 目录(用户宿主目录模板目录,只对新建用户生效):
  • 新用户的目录下必须有这三个文件

  • .bash_logout:用户注销时执行的命令

  • .bash_profile:用户登录系统时执行的命令(用户变量)

  • .bashrc:用户登录一个新shell时执行的命令

5.1.3 /etc/login.defs 文件解释:(只对新建用户生效)
- MAIL_DIR                                     /var/spool/mail
- PASS_MAX_DAYS            99999            //密码最长使用时间
- PASS_MIN_DAYS            0                //密码最短使用时间,0代表不受限制
- PASS_MIN_LEN             5                //密码最小长度
- PASS_WARN_AGE            7                //密码过期警告时间
- UID_MIN                  1000             //普通用户最小UID号
- UID_MAX                  60000            //普通用户最大UID号
- SYS_UID_MIN              201              //系统用户最小的UID
- SYS_UID_MAX              999              //系统用户最大的UID 
- GID_MIN                  1000             //普通组最小GID
- GID_MAX                  60000            //普通组最大UID号
- SYS_GID_MIN              201              //系统组最小的UID
- SYS_GID_MAX              999              //系统组最大的UID 
- CREATE_HOME              YES              //是否创建宿主目录
- UMASK                    077              //关于权限的反掩码
- USERGROUPS_ENAB          YES              //删除用户时是否删除组
- ENCRYPY_METHOD           SHA512           //用户密码的加密方式

5.3 用户管理命令

5.3.1 useradd:添加新用户(更改/etc/passwd、/etc/group、/etc/shadow)
  • 语法:useradd [options] user_name
  • -c:新建用户时,为用户添加描述信息
  • -d:指定用户的宿主目录
  • -D:查看和修改默认配置(修改/etc/default/useradd文件中的默认值)
    • -g:修改默认的组
    • -b:修改默认宿主目录
    • -f:修改过期是否停用
    • -e:修改过期时间
    • -s:修改默认shell
  • -e:新建用户时,设置过期时间(格式:YYYY-MM-DD)
  • -g:指定用户的基本组(没有该选项时,Linux会建立一个同名组作为用户的基本组)
  • -G:新建用户时,指定用户的附加组,附加组可以有多个
  • -m:创建宿主目录(必须与 -k 一起使用)
  • -M:创建用户时,不为用户创建宿主目录
  • -p:创建用户时,为用户设置加密的密码(不推荐使用)
  • -r:创建系统用户
  • -s:指定默认的shell(系统支持的shell)
  • -u:指定用户的UID
  • 手动添加用户需要
    • 1.将数据写入/etc/passwd、/etc/shadow、/etc/group
    • 2.在/home/下建立相应文件夹
    • 3.将/etc/skel/下的文件复制到/home/用户 / 文件夹下
5.3.2 passwd :为用户设置密码、锁定解锁用户、查看用户状态
  • 语法:passwd [options] user_name

  • passwd user_name :直接设置密码

  • -l:锁定用户(暂时无法登陆)

  • -u:解锁用户

  • -S:查看用户状态,显示/etc/shadow文件中各个字段的内容

  • –stdin:标准输入,经常在shell脚本编程中为用户自动设置密码

  • -d:删除用户密码,允许普通用户以空密码登陆,仅root用户可以使用

  • -e:快速设置密码过期(用户再次登录时需要修改密码)

  • -n:设置密码最小使用期限

  • -x:设置密码最大使用期限

  • -w:设置密码过期前的警告时间

  • -i:修改密码过期后的宽限时间

  • 普通用户设置密码时,先验证当前密码,并且要求符合密码规范

  • root用户设置密码时,不需要验证密码,并且可以不符合密码规范

5.3.3 userdel:删除用户(passwd、shadow、group都修改删除)
  • 语法:userdel [options] user_name

  • -r :删除用户时,连同用户的宿主目录一块删除(如果不加,则不删除)

5.3.4 usermod :修改用户属性(root可以通过vim进行修改)
  • 语法:usermod [options] user_name
  • -c:更改用户的描述信息
  • -d:更改用户的宿主目录
  • -e:更改用户的过期时间
  • -f:修改/etc/shadow中第七列的内容
  • -g:修改用户的基本组
  • -G:修改用户的附加组
  • -l: 更改用户的登录名(重命名、不修改宿主目录)
  • -s:修改用户的shell
  • -L:锁定用户
  • -U:解锁用户
5.3.5 chsh :修改用户的shell
  • 语法:chsh [options] user_name
  • -s:后面跟shell,更改用户的shell
  • -l:显示系统当前支持的shell
  • 在/etc/目录下添加 nologin.txt 文件,则可以进行提示
5.3.6 finger :显示用户的基本信息(需要安装)
  • 语法:finger [options] user_name
  • -s、-l、
5.3.7 chfn :修改用户的基本信息
  • 语法:chfn [options] user_name
  • -o:修改办公室
  • -p:修改办公室电话
  • -h:修改家庭电话
5.3.8 id:显示用户和组的ID号
  • 语法:id [options] user_name
  • -a:忽略其他版本的区别
  • -Z:显示安全上下文的内容(内核)
  • -g: 显示有效组号
  • -G:显示所有组号(基本组、附加组)
  • -n:显示名字(与ugG连用)
  • -u :显示id
5.3.9 chage:修改用户密码的时间信息
  • 语法: chage [options] user_name
  • -l :列出用户的详细的密码参数
  • -d:修改/etc/shadow第三列的内容(后面日期格式:YYYY-MM-DD)
  • -E:修改/etc/shadow中第八列的信息,后面跟日期
  • -I:修改/etc/shadow中第七列的内容,后面跟天数
  • -m:修改/etc/shadow中第四列的内容,后面跟天数
  • -M:修改/etc/shadow中第五列的内容,后面跟天数
  • -w:修改/etc/shadow中第六列的内容,后面跟天数

5.4 组管理命令

5.4.1 groupadd:创建组
  • -g:指定组的id
  • -r:创建系统组
5.4.2 groupdel:删除组
  • 默认情况下不能删除用户的基本组,可以通过修改用户的基本组后删除组,可以删除用户的同时系统删除基本组(该组是一个用户的基本组)
5.4.3 groupmod :修改组的属性
  • -g:修改组的id号
  • -n:重命名
5.4.4 gpasswd:为组设置密码、管理员、添加成员
  • -A:设置组管理员
  • -M:批量添加成员
  • -r:移除组的密码
  • -R:让组的密码失效
  • -a:为组添加成员(组管理员的命令)
  • -d:删除组成员(组管理员的命令)
5.4.5 newgrp:为用户修改有效组(只在当前shell生效)
  • exit:退出newgroup
5.4.5 groupmems:为组添加成员,显示组成员列表

6. 认证

6.1 nsswitch:名称解析

  • 认证的中间桥梁,通过libnss库

  • 位置:/etc/nsswitch.conf

  • 查看so文件的命令:readelf 命令

  • getent hosts www.baidu.com :查找百度的解析地址

  • getent 文件 内容

6.2 PAM 验证

6.2.1 相关文件
  • 嵌入式认证模块,PAM 本身不会执行验证,必须执行策略和模块进行验证
  • ldd 命令 :查看与服务相关的模块
    • ldd service_path
  • /etc/pam.d/service_name (系统中支持pam认证的服务名称)
  • /etc/pam.d/other (当系统中支持pam认证的服务没有匹配到任何条目时,匹配other中的配置)
6.2.2 /etc/pam.d/service_name格式
  • 格式:type control modules [modules_args]

  • type :

    • auth(authentication):身份验证,匹配用户名密码
    • account :检查用户名和密码的有效性!有效性
    • password :检查修改密码时,密码是否符合标准
    • session :检查用户会话相关属性
  • control:

    • required:一票否决权,继续匹配下面的条目,最后不匹配(保护系统安全性)
    • requisite:一票否决权,不继续匹配下面的条目,直接给用户返回结果
    • sufficient:一票同意权,不匹配下面的条目,直接给用户返回结果(慎用)
    • optional:不影响最终的结果
    • include:引用其他的配置文件,把匹配权交给其他配置文件,(如果其他匹配跳出,则整个匹配结束)
    • substack:引用其他配置,把匹配权交给其他配置文件(如果其他配置跳出,则仅仅跳出子匹配)
  • modules:匹配认证模块 (value = action)

    • value:
      • success、open_err、symbol_err、service_err、 system_err、buf_err、perm_denied、auth_err、cred_insufficient、authinfo_unavail、user_unknown、maxtries、new_authtok_reqd、acct_expired、 session_err、cred_unavail、cred_expired、cred_err、no_module_data、conv_err、 authtok_err、authtok_recover_err、authtok_lock_busy、authtok_disable_aging、 try_again、ignore、abort、authtok_expired、module_unknown、bad_item和default.最后一个(default)能够用来设置上面的返回值无法表达的行为.
    • action值:
      • ignore:忽略执行结果
      • bad:如果失败,结果被用于整个执行栈,后续栈继续执行
      • die:和bad相似,但是失败直接返回结果,后续栈不执行
      • ok:如果PAM_SUCCESS覆盖之前值
      • done:和ok 相似,但是栈直接返回结果
      • reset:重置栈当前状态
    • 部分语法:
      • required [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
      • requisite [success=ok new_authtok_reqd=ok ignore=ignore default=die]
      • sufficient [success=done new_authtok_reqd=done default=ignore]
      • optional [success=ok new_authtok_reqd=ok default=ignore]
    • modules:PAM认证模块相关文件:
      • /etc/pam.d/*:每一个应用程序PAM配置文件
      • /usr/lib64/security/*:PAM认证模块文件的实际存放位置
      • /etc/security/*:其他PAM环境的配置文件,比如 access.conf
      • /usr/share/doc/pam-x:存放详细的PAM的说明文件
  • 查看应用程序是否支持PAM认证:

    • ldd app_path
    • 如: ldd /usr/sbin/vsftpd | grep libpam
    • 如:ldd `which httpd` | grep libpam
  • linux-pam 官方文档下载地址: http://www.linux-pam.org/

  • 部分pam-*.so文件解释:

    • pam_env.so:设置环境变量的模块,如果需要额外的环境变量,可以使用
    • pam_env.so进行设置,配置文件/etc/security/pam_env.conf
    • pam_unix.so:提供验证阶段的验证功能,也可以提供授权管理
    • pam_secruetty.so:限制系统管理员只能够从安全的终端登录,安全终端:/etc/securetty
    • pam_nologin.so:限制普通使用者能否登录主机进行使用,当/etc/nologin文件存在时,所有的普通用户都无法登录
    • pam_cracklib.so:可是限制恶意攻击,检查密码强度
    • pam_pwquality.so:完全兼容pam_cracklib.so,检查密码强度,包括设置的密码是否在字典
    • pam_limits.so:限制使用者打开文件数量,单个文件大小
    • pam_rootok.so:如果UID为0,直接通过,如root用户su到普通用户使用此模
    • pam_listfile.so:验证使用其他的文件
    • pam_access.so:控制访问的模块,默认配置/etc/security/access.conf: ALL EXCEPT gooann:ALL

文章作者: kylin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 kylin !
  目录