2018.7.31 课堂笔记
今天是一周一次的测验,时间相对比较紧张!考完以后感觉还可以,不过还是有一些知识点需要继续复习的。错题主要是这几个知识点:find 目录的深度 lsattr 属性 三个time的用法(atime ctime mtime).
今天后半断是由我们的师兄高学武代课,整体感觉可能知识串讲讲的比较细,时间把握有点不够!
1.1首先是chattr 和lsattr两个隐藏权限:
a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。
i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件
------查看时需要使用lsattr命令------
让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:
# chattr +a /var/log/messages
1.2第二个我们讲到了文件特殊权限:SUID/SGID/StickyBit
创建s与t权限,是为了让一般用户在执行某些程序的时候,能够暂时具有该程序拥有者的权限。
例如,账号和密码的存放文件其实是/etc/passwd与/etc/shadow,它们的拥有者是root。
在这个权限中,仅有root可以强制写入。一个普通用户webgod去更新自己的密码时,
使用的就是/usr/bin/passwd程序,却可以更新成功,而/usr/bin/passwd的拥有者是root。
那么,就是说webgod这个普通用户可以访问/etc/shadow密码文件这既是因为有s权限的帮助。
当s权限在user的x时(注意下图的/usr/bin/passwd的相关属性),此处是-rwsr-xr-x,称为Set UID,
简称SUID,这个UID表示User的ID,而User表示这个程序(/usr/bin/passwd)的拥有者(root)。
所以,当webgod用户执行/sur/bin/passwd时,他就暂时获取文件拥有者root的权限
注:SUID仅可用在二进制文件(binary file),而且对目录无效。
这里讲到一个二进制文件与普通文件的区别:
计算机能识别的都是二进制代码,不论是文本文件还是音频视频类的多媒体文件都需要转换成二进制文件,
计算机才能识别,这就需要有个转换过程:高级语言→汇编语言→机器语言,
计算机只能识别的语言--机器语言。就讲二进制文件和文本文件的区别的话,二进制文件全都是0和1组成的,
而文本文件是由字母、数字、符号等组成。。。。。。
1.2.1特殊权限set_gid
可以应用在文件上同样可以作用在目录上。设置在文件上和set_uid类似,
前提这个文件必须是可执行的二进制文件。设置set_gid后,
执行该文件的用户会临时以该文件所属组的身份执行。若目录被设置这个权限后,
任何用户在此目录下创建的文件或者目录都具有和该目录所属组相同的组。
如果s的权限是在用户组,那么就是Set GID,简称SGID。SGID可以用在两个方面:
1 文件:如果SGID设置在二进制文件上,无论用户是谁,在执行该程序的时候,它的有效用户组将会变成该程序的用户组所有者;
2 目录:如果SGID是设置在A目录上,则在该A目录内所建立的文件或目录的用户组,将会是此A目录的用户组。
1.2.2 Sticky Bit
SBit一般用于目录上,对文件的意义不大。SBit对目录的作用是:在具有SBit的目录下,
用户若在该目录下具有w及x权限,则当用户在该目录下建立文件或目录时,
只有文件拥有者与root才有权利删除。SBit可以理解为防删除位。
如果希望用户能够添加文件但同时不能删除文件,则可以对文件使用SBit位。
设置该位后,就算用户对该文件的父目录具有写权限,也不能删除文件。
这个老师在纠结一段时间找个好例子讲解,其实我是这样理解为在这个目录下user用户建立的文件和目录只允许自已的root用户去删除,而不允许其它用户去删除。
1.3 第三个知识点软链接与硬链接
1.3.1 首先们要讲到是一个inode的概念:
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,
即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,
最常见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,
比如文件的创建者、文件的创建日期、文件的大小等等。
这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
那inode里面到底存储什么东西呢:
* 文件的字节数
* 文件拥有者的User ID
* 文件的Group ID
* 文件的读、写、执行权限
* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
* 链接数,即有多少文件名指向这个inode
* 文件数据block的位置
1.3.2 inode的大小
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。
1.3.3 inode号码
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
1.3.4 硬链接与软链接
关于这两个概念我们需要搞清楚以下几点:
其中每个dentry都有一个唯一的inode,而每个inode则可能有多个dentry,这种情况是由ln硬链接产生的。
硬链接:其实就是同一个文件具有多个别名,具有相同inode,而dentry不同。
1. 文件具有相同的inode和data block;
2. 只能对已存在的文件进行创建;
3. 不能交叉文件系统进行硬链接的创建
4. 不能对目录进行创建,只能对文件创建硬链接
5. 删除一个硬链接并不影响其他具有相同inode号的文件;
软链接:软链接具有自己的inode,即具有自己的文件,只是这个文件中存放的内容是另一个文件的路径名。因此软链接具有自己的inode号以及用户数据块。
1. 软链接有自己的文件属性及权限等;
2. 软链接可以对不存在的文件或目录创建;
3. 软链接可以交叉文件系统;
4. 软链接可以对文件或目录创建;
5. 创建软链接时,链接计数i_nlink不会增加;
6. 删除软链接不会影响被指向的文件,但若指向的原文件被删除,则成死链接,但重新创建指向 的路径即可恢复为正常的软链接,只是源文件的内容可能变了。
1.4 Linux四剑客之一find.
这个命令非常重要也是必须要掌握的一个命令,这个在我的预习笔记里面有详细的介绍,这里我们也可以看一下这个介绍:
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
#-print 将查找到的文件输出到标准输出
#-exec command {} \; —–将查到的文件执行command操作,{} 和 \;之间有空格
option 选项:
-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查GIN: 0px">
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio %; #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune #忽略某个目录
1.5 Linux下的文件及文件后缀名
1.使用扩展名的背景意义:
一谈到文件类型,大家就能想到Windows的文件类型,比如file.txt、file.doc、file.sys、file.mp3、file.exe等,根据
文件的后缀就能判断文件的类型。但在Linux一个文件是否能被执行,和后缀名没有太大的关系,主要看文件的属性有关。但我们了解一下Linux文件的后缀名还是有必要的,
特别是我们自己创建一些文件,最好还是加后缀名,这样做的目的是仅仅是为了我们的在应用时方便。 现在的Linux桌面环境和Windows一样智能化,文件的类型是和相应的程序关联的。在我们打开某个文件时,系统会自动判断用哪个应用程序打开。
如果从这方面来说,Linux桌面环境和Windows桌面没有太大的区别。 在Linux中,带有扩展名的文件,只能代表程序的关联,并不能说明文件是可以执行,从这方面来说,Linux的扩展名没有太大的意义。
2.linux的文件类型:
Linux文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等;这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件)。
1.6 linux和window文件系统文件互传rz、sz、xftp、 winscp
首先简单的 介绍一下 这两个sz/rz工具,实现Linux下和Windows之间的文件传输(发送和接收),速度大概为10KB/s,适合中小文件。rz/sz 通过Zmodem协议传输数据。
一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地;
rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)
rz,sz是便是Linux/Unix同Windows进行ZModem文件传输的命令行工具
windows端需要支持ZModem的telnet/ssh客户端(比如SecureCRT)
运行命令rz,即是接收文件,SecureCRT就会弹出文件选择对话框,选好文件之后关闭对话框,文件就会上传到当前目录 。
3.1用户配置文件和密码配置文件
3.2 用户组管理
3.3用户管理
3.4usermod命令
3.5用户密码管理
3.6mkpasswd管理
3.7su命令
3.8sudo命令
3.9限制root远程登录
3.1用户配置文件和密码配置文件
这两个文件非常重要,关乎安全。
/etc/passwd 这个也是7段内容
/etc/shadow
3.2用户组管理
用法:groupadd[-g GID ] gruoupname,例如:
Groupdel groupname 删除用户组
3.3用户管理
用法:useradd [-u UID][-g GID][-d HOME][-M][-s]
-u表示自定义uid
-g表示新增用户属于哪个组,后面可以跟组id,也可以跟组名
-d 指定家目录
-M表示不建立家目录
-s表示自定义shell
userdel [-r]username 表示删除用户时,一并删除用户的家目录
3.4usermod命令
usermod - 修改用户帐户信息 modify a user account
- a | -- append ##把用户追加到某些组中,仅与-G选项一起使用
- c | -- comment ##修改/etc/passwd文件第五段comment
- d | -- home ##修改用户的家目录通常和-m选项一起使用
- e | -- expiredate ##指定用户帐号禁用的日期,格式YY-MM-DD
- f | -- inactive ##用户密码过期多少天后采用就禁用该帐号,0表示密码已过期就禁用帐号,-1表示禁用此功能,默认值是-1
- g | -- gid ##修改用户的gid,改组一定存在
- G | -- groups ##把用户追加到某些组中,仅与-a选项一起使用
- l | -- login ##修改用户的登录名称
- L | -- lock ##锁定用户的密码
- m | -- move - home ##修改用户的家目录通常和-d选项一起使用
- s | -- shell ##修改用户的shell
- u | -- uid ##修改用户的uid,该uid必须唯一
- U | -- unlock ##解锁用户的密码
3.5用户密码管理
现在密码对于我们日常用户是非常重要的,也是管理员非常重要的一个任务。
命令:passwd 创建密码有以下几个规则尽量复杂
a 长度大于10个字符
b密码中包含大小写字母、数字以及特殊字符*、&、%等;
c不规则性(不要出现一些非常容易的“1111111”“123456789”“abcdef”)
d密码中不要带自已的名字、电话、生日以及公司名字等。
只有root才能修改其它账号的密码,用户只能修改自已的密码
3.6 mkpasswd管理
这个命令用于生成密码,需要安装一个expect软件包
用法:mkpasswd –l 指定长度 -s指定特殊字符个数 -d指定数字个数
3.7su命令
用法: su [-] username
加上“-”相当于初始化当前用户的各种环境变量
su -c command:变更账号为USER的使用者,并执行指令(command)后再变回原来使用者。
例:su -c ls root 变更帐号为 root 并在执行 ls 指令后退出变回原使用者。
普通用户 su- 就是切换到root用户
下面我们来看一下实际操作中加“-”和不加“-”
[root@localhost /]# su - user1
[user1@localhost ~]$ pwd
/home/user1
[user1@localhost ~]$ id
uid=1001(user1) gid=1001(user1) groups=1001(user1) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
下面我们不加“-”
[root@localhost ~]# su user1
[user1@localhost root]$ pwd
/root
[user1@localhost root]$ id
uid=1001(user1) gid=1001(user1) groups=1001(user1) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
3.8sudo命令
为了防止我们泄露root密码报露安全问题,就有sudo这个命令。默认情况下,只有root用户才能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的。
需要对这个配置文件进行编辑:/etc/sudoers
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
主要是看这行配置:只要是wheel这个组的所有用户都拥有了sudo的权利。
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
3.9限制root远程登录
在实际生产环境中,可能一台服务 器很多人员都需要去远程登录使用它,有时候为了安全起见我们会限制root用户远程登录。
这里需要更改这个配置文件:/etc/ssh/sshd_config
改为以后需要重启服务:
Sysstemctl restart sshd.service
这里只是限制从ssh这种登录方式。