Skip to content

Latest commit

 

History

History
423 lines (254 loc) · 18.7 KB

1.3_20170116文件的操作和用户管理.md

File metadata and controls

423 lines (254 loc) · 18.7 KB

文件操作和用户管理

本节涵盖了linux的文件类型,时间戳,bash的命令别名特性,文本文件的查看和用户和组的创建修改和删除

linux文件类型

一块硬盘就像一个大的仓库,如果没有一个行之有效的管理方法的话,仓库就会混乱,效率低下,硬盘也是一样的,操作系统通过格式化硬盘建立起文件系统以便文件的管理。文件系统将硬盘分为两个部分,一部分是文件元数据区,另一部分是文件内容的存储。文件的元数据一般有文件时间戳,权限,大小,类型和位置等。

在linux中有一切皆文件的理念,必然有不同的文件类型,常见的有普通文件,目录文件,链接文件,设备文件和命令管道,套接字文件。

普通文件以-或者f表示,是linux中最常见的文件类型,需要和windows区别的是:win是以文件后缀名来识别文件类型的,而linux中可以使用file 文件来查看文件内容类型。

目录文件是一种特殊的文件,实际上路径的映射,使用d表示,需要注意的是在linux中文件名和目录名不能相同

链接文件与windows中的快捷方式相似,符号链接使用l表示,除了符号链接还有硬链接

设备文件分为块设备文件和字符设备文件,字符设备使用c表示,块设备使用b表示

套接字文件在网络通信中常使用,使用s表示

命名管道文件以p表示

文件时间戳

文件时间戳是文件元数据之一,文件时间戳有三种时间:访问时间,修改时间和改变时间。

访问时间是对文件访问时的时间,如打开文件

修改时间是对文件内容的编辑包括新增,修改,删除等操作

改变时间是文件元数据的更改时间。改变时间可以随着修改时间的改变而改变

ls和echo命令

ls用以列出目录中的文件,直接使用ls命令可以列出当前所在目录的文件

选项 作用
-l 长选项
-h 以人类可读的文件大小显示
-a 显示全部文件
-d 显示目录自身属性
-r 逆序显示
--color 显示颜色
-i 显示innode number

用长选项列出的目录显示如下:

drwxr-xr-x. 2 simon simon 6 Oct 8 13:28 Documents

其中d代表文件类型,此例中是目录,后面的rwxr-xr-x表示文件权限,2表示硬链接数,后面的simon分别表示文件的属主和属组,时间是最后一次的修改时间,如果是链接文件还会有链接文件指向原始文件的表示

此外还可以安装tree命令,树型显示目录

[simon@localhost ~]$ tree . ├── Desktop ├── Documents ├── Downloads │   └── VNC-6.0.1-Linux-x64-RPM.tar.gz ├── ProjectA │   └── HelloWorld.py ├── Public ├── redirect │   ├── errors.log │   └── students.txt └── Videos

echo可以输出字符提示,使用-e选项可以支持控制符

常见的控制符

控制符 作用
\n 换行
\t 水平制表符
\v 垂直制表符
\b 退格,删除一个字符,可以多个使用
\ONNN 常用的是\033控制终端文本的显示颜色 echo -e "\033[31mAAAAAA\033[0m"

echo -e "\033[31mAAAAAA\033[0m"中[31数字3表示前景色,4表示背景色,第二个数字用来控制颜色,有1-7可选,后面的\033[0m是颜色结束的控制

-n选项不自动换行,echo默认输出完成后会自动换行

bash命令别名

命令别名是bash的特性之一,可以通过命令别名来设定特定命令和选项组合,使用命令别名可以提高效率。常见的ls就是命令别名,ls执行的实际是ls --color=auto

使用alias命令可以查看当前shell中已经定义的命令别名

创建别名使用alias 别名=‘实际命令’,取消别名使用unalias 别名

需要注意的是,如果是在当前shell中新定义的别名,会随着当前进程的结束而失去定义,想要持续生效需要写入配置文件中

在命令别名前加上\则使用命令本身,而不是别名

文本文件的查看

文本文件查看常用的命令有cat,tac,more,less,head,tail

cat是连接并显示的意思,可以显示一个或多个文件并输出到标准输出上(显示器)

在显示的过程中,可以根据一些控制符来对输出的样式进行更改,比如最简单的换行

选项 作用
-E 显示行结束符$
-v 显示非打印字符
-e 等同于-Ev
-n 显示每行
-s 将多个连续的空白行合并显示为一行

tac则是逆序显示文件

more和less也是文本查看的常用命令,区别在于more命令在翻页至文档尾部会自动退出,less可以随意翻页,使用q退出文本查看

head和tail用来查看文本文件的头几行和最后几行,默认显示为10行,可以使用选项-n 数字来自定义显示行数

tail还有一个选项是-f,执行后会持续监测文件如果文档尾部有新的内容,则会向屏幕输出

##文件的创建移动复制和删除

文件的复制

文件的复制使用的是cp命令,是copy的意思,cp命令默认是cp -i的命令别名,简单的使用方法是cp 源文件 目标

  • 当复制单个文件时:

如果目标/a/b/c中,如果c不存在,则将复制的源文件重命名为c;

​ 如果c存在,且是文件,则将c文件覆盖;

​ 如果c存在,且是目录,则将文件拷贝到c目录下,并保持原文件名

  • 当复制多个文件时:

如果目标/a/b/c中,如果c不存在,无法复制

​ 如果c存在,且是文件,无法复制

​ 如果c存在,且是目录,则将多个文件复制到目标目录下,并保持原文件名

  • 当复制一个目录时:

如果目标/a/b/c中,如果c不存在,创建新目录

​ 如果c存在,且是文件,无法复制

​ 如果c存在,且是目录,则将多个文件复制到目标目录下,并保持原文件名

cp命令默认不复制目录,需要使用-r选项递归复制

选项 作用
-r 递归
-i 交互式操作
-a -dr并且保留源文件的文件信息
-d 当源文件是链接文件时,复制链接文件本身,而非指向的源文件
-p 保持原有属性 只有管理员可以操作
-f 强制执行,cp是命令别名 cp -i,当与-f合用时-f无效

文件的移动和删除

mv移动文件,用法和cp相近,mv可以直接移动目录,不需要递归选项,同一目录下操作是文件名更改的操作

rm移除文件,也是命令别名rm -i,不能删除非空目录,-r递归删除当-rf一起使用时,f强制生效

空文件的创建

使用touch可以创建一个新的空文件,touch的实际用处是修改文件的时间戳,使用-c选项不创建新文件

选项 作用
-c 不创建空文件,只修改时间戳
-t STAMP 指定时间戳YYYYMMDDHHMM.SS,但改变时间会改为执行touch的时间,不加时间,改为当前时间
-a 修改访问时间
-m 修改修改时间

stat用来显示文件的元数据信息和详细信息,stat 文件

bash的文件名通配globbing

*:匹配任意长度的任意字符

?:匹配任意单个字符

[]:集合通配符,匹配指定字符范围内的任意单个字符,通配符并不区分大小写

​ 常见的字符范围

​ [[:upper:]]大写字母

​ [[:lower:]]小写字母

​ [[:alpha:]]所有字母

​ [[:digit:]]数字

​ [[:alnum:]]数字和字母

​ [[:space:]]空格

​ [[:punct:]]标点符号和特殊符号

​ 使用^可以匹配指定字符范围外的任意字符

文本编辑器nano的使用

nano是一个简单的全屏幕文本编辑器,全屏幕编辑器还有vi和vim等,全屏幕编辑器都是交互性的,如果要在脚本中使用,就只能使用行编辑器如sed,使用nano或者nano 文件来使用

nano中^ 是ctrl键

用户和组管理

用户是资源获取的标识符,是安全权限模型的核心要素之一,没有用户系统是可以正常运行的,用户密码就是用来实现用户认证的

在操作系统中有一个信息库,存放用户名和加密的密码,计算机对数字敏感,而人对字符串更敏感,所以就有名称解析对用户名和用户ID(UID)进行互相解析

一些情况下,不同的用户需要访问相同的资源时,就有一个容器将一些用户放在一起,赋予相同的权限,这就是组,也称为角色,在linux中称为用户组,组也是安全权限模型的核心要素之一,一个用户总是要归属为一个组,一个用户所在的组只有用户自己,这个组是用户的私有组,用户组也有组名,也需要组ID,同样需要解析将组名和组ID相互转换

解析是在数据库中按搜索码查找到对应的条目,并找到与之对应的额外其他的数据过程

数据库可以是文本文件(古老),SQL数据库,ldap数据库等,不同的数据库查询的方法不一样

在linux中的确是使用文本文件来保存用户相关数据的,文件的位置在/etc/passwd

加密方法

加密分为对称加密和非对称加密以及单向加密

算法不保证加密的安全,通过密钥结合算法来进行加密

加密和解密使用相同的密码叫做对称加密,如DES(已经失效),3DES,AES

加密和解密使用成对的密码,公钥和私钥,使用公钥加密,用私钥解密,叫做非对称加密,如DSA(只认证,不加密),RSA

单向加密具有雪崩效应,定长输出,并且是不可逆的三个特性,MD5信息摘要的第五个版本,是128bits定长输出,16个字符还有SHA1是安全的hash算法,160bits,还有SHA256和SHA512

用户密码的加密

用户的密码数据库在/etc/shadow

用户的密码数据库是进行单向加密的,当用户登录系统输入密码时,系统会将输入的密码进行单向加密,和密码数据库中的密码单向加密结果进行比对,但是如果两个用户的密码相同,那单向加密计算出来的值也就是相同的,这样就会一定程度上产生密码泄露的风险

所以用户在设置密码时,系统还会默认的加上8位随机生成的字符然后进行单向加密,用户登录时,系统也会默认把随机生成的字符加上去然后进行单向加密,然后进行对比

在shadow中密码的保存方式是**$6$Gys4je$xcvbnm,.defghjkl;ertyuiocvbn**,6代表加密的方式表示SHA512,1表示MD5第二个部分就是系统随机生成的字符,第三部分是单向加密后的值

md5sum可以对文件进行md5校验码,校验码是16进制的数字,也可以使用sha512sum进行计算,同样是16进制的输出,每一位数值表示4bit

sslpasswd可以指定加密算法,然后实现密钥信息输出,使用md5的方式加密并进行输出密钥openssl passwd -1 -salt ,输出的密钥信息是ASCII字符(?)

用户组

组在/etc/group存放数据库,组实际上也需要密码,用户可以更改自己组,前提是用户知道切换后的组密码,组密码在/etc/gshadow中

安全上下文

进程是人操作计算机的代理,运行中的进程也有属主和属组,一个进程能否访问一个特定的资源,取决于启动这个进程的属主和属组是否有权限访问这个资源

用户和组的创建修改和删除

用户的创建

useradd username,只有管理员才可以添加用户,添加到/etc/passwd,也在/etc/shadow中添加了一条,但此时没有设置密码,shadow中的密码位置是两个感叹号,是锁定的意思,无法登陆

passwd文件是使用冒号隔开的7个字段,分别代表用户名:密码占位符X:UID:GUID(基本组id私有组id):备注信息(多个以逗号隔开):家目录:默认shell

在/etc/shells中有系统中所有可用安全的shell,可以使用cat命令查看

添加用户时一些默认值使用在/etc/default/useradd中已经定义的值,家目录是复制/etc/skel然后改成用户名得到的

用户id默认是passwd中最后一个用户的用户id加1得到的

选项 作用
-u UID 指定UID
-g GID 指定GID,即指定用户的基本组看,但GID要事先存在
-G GID 指定用户的额外组,组要事先存在
-d /Pathtosomewhere 指定用户的家目录,目录不能存在
-c “注释” 备注
-s /pathtoshell 指定默认shell,应该指定在/etc/shells出现的shell
-m 创建用户时,强制给用户创建家目录
-M 创建用户,但不创建家目录
-D 改变默认值,为useradd命令创建的用户指定新的默认值,通常是-d和-s

用户有管理员和普通用户两种,普通用户分为系统用户和登录用户,管理员的UID是0,系统用户是1-499,登录用户的uid是500+

-r选项可以创建系统用户,id号在1-499之间,不会给用户添加用户家目录,默认shell为/sbin/nologin

组的创建

groupadd groupname,组id默认是passwd中最后一个用户的组id加1得到的,

用户组分为管理员组和普通组,站在用户的角度上组分为基本组或者私有组,和额外组或者附加组

显示在/etc/passwd中GID字段为用户的基本组,附加组在/etc/group中显示

使用id命令可以查看用户的各种id

/etc/group的格式组名:密码占位符:组id:以此组为附加组的用户,多个用户用逗号隔开

-g GID 创建组并为其指定GID

删除用户和用户组

删除用户命令的一般格式userdel 用户名,默认会保留家目录,-r选项一并删除家目录

删除组使用groupdel 组名

设定用户密码

普通用户使用passwd,只能改自己的密码,管理员可以更改其他用户的密码,passwd Username,普通用户的密码要符合密码安全策略

选项 作用
-l 锁用户,在shadow中表现为用户的密码前有两个叹号
-u 解锁

密码安全策略

密码要足够复杂,密码长度要够长;数字,大写字母,小写字母和特殊符号至少使用三种;避免使用易猜测的密码;定期更换

/etc/shadow中各字段的含义

登录名:加密后的密码:最近一次修改密码的日期(距1970-1-1的天数):密码最短使用期限:密码最长的使用期限:(提前)警告区间:非活动区间(登录就要修改密码):账号过期期限:预留段

设定组密码

gpasswd GroupName

修改用户属性

修改用户的默认shell:chsh Username

修改用户的注释:chfn Username

批量修改使用usermod命令,使用方法和useradd相近

选项 作用
-u UID 指定UID
-g GID 指定GID
-G GID 默认会覆盖原有的附加组,如果是添加则要同时使用-a选项
-c string 修改注释
-d newhome 修改家目录,默认不会迁移用户的家目录,如果要迁移家目录要使用-m选项
-s newshell 指定新的默认shell
-l New login name 修改用户的登录名,不修改基本组
-L 锁定用户
-U 解锁用户

修改组的属性

使用groupmod修改组的属性

选项 作用
-g GID 修改GID
-n New Group name 修改组名

修改账号的日期属性

使用chage修改用户的日期属性

选项 作用
-E 距离1970-1-1日的时间天数,过了这个时间账号不可访问
-I 设置活动天数
-m 修改密码最小使用时间
-M 修改密码最长使用时间
-W 修改警告时间

查看用户的相关信息

使用id查看用户相关的信息 id [option] [username]

选项 作用
-n 显示名称
-u 显示UID
-g 显示基本组ID,和-n组合使用显示基本组名
-G 显示所有组ID,和-n组合使用显示所有组名

who显示当前登录的用户

whoami显示当前终端登录的用户

su切换用户,su 用户

选项 作用
-l 登录式切换
-c 不切换用户,直接执行目录,执行的命令需要用引号

练习

1.创建一个用户Mandriva,ID号为2002,基本组为distro(组id为3003),附加组为linux

# groupadd -g 3003 distro

# groupadd linux

# useradd -u 2002 -g 3003 -G linux Mandriva

2.创建一个用户Fedora,其全名为Fedora Community,默认shell为tcshell

# useradd -c "Fedora Community" -s /etc/tcshell Fedora

3.修改Mandriva的id为4004,基本组为linux,附加组为distro和Fedora

# usermod -u 4004 -g linux -G -a distro Fedora,Mandriva

4.给Fedora加密码,并设定其密码最短使用期限为2天,最长为50天

# passwd Fedora

# 密码

# chage -m 2 -M 50

5.将Mandriva的默认shell改为/bin/bash

# chsh /bin/bash Mandriva