Linux(二)-文件/目录权限管理
参考文献
- 鸟哥的Linux私房菜基础学习篇(第四版)
权限的概念
- 文件拥有者
- 用户组
- 每个账号都可以有多个用户组的支持
- 其他人
- 在Linux中,任何一个文件都具有用户(User),所属群组(Group)以及其他人(Others);
- Linux用户身份与用户组记录
- 默认情况下,所有的系统上的账号与一般身份用户的相关信息都记录在
/etc/passwd
这个文件内,个人密码则是记录在/etc/shadow
这个文件中,Linux所有的组名都记录在/etc/group
中
- 默认情况下,所有的系统上的账号与一般身份用户的相关信息都记录在
Linux
文件属性
-
使用
ls -al
显示的文件列表信息1
2
3
4
5
6
7
8
9
10
11
12[root@holelin holelin]# ls -al
total 32
drwx------ 3 holelin holelin 4096 May 25 23:34 .
drwxr-xr-x. 5 root root 4096 Mar 4 11:09 ..
-rw------- 1 holelin holelin 783 May 24 23:33 .bash_history
-rw-r--r-- 1 holelin holelin 18 Apr 1 2020 .bash_logout
-rw-r--r-- 1 holelin holelin 193 Apr 1 2020 .bash_profile
-rw-r--r-- 1 holelin holelin 231 Apr 1 2020 .bashrc
drwxrwxr-x 2 holelin holelin 4096 Jul 7 2020 packages
-rw------- 1 holelin holelin 810 May 24 23:33 .viminfo
[ 1 ][2][ 3 ] [ 4 ][ 5 ][ 6 ] [ 7 ]
[ 权限 ][链接][拥有者][用户组][文件容量 ][修改日期] [ 文件名 ]-
第一栏代表这个文件的类型与权限(permission)
1
drwxrwxr-x
-
从左向右,第一个字符代表这个文件是目录,文件或者链接文件等
d
为目录文件-
为普通文件l
则表示为符号链接文件(symbolic link file)b
则表示为设备文件里面的可供存储的周边设备(可按块随机读写的设备)c
则表示为设备文件里面的串行端口设备,例如键盘,鼠标(一次性读取设备)p
表示命令管道文件(pipe)s
表示套接字文件(socket)
-
接下来以三个为一组
r
代表可读(read) 4w
代表可写(write) 2x
代表可执行(execute) 1- 若没有权限,则是
-
;
-
第一组为文件拥有者可具备的权限;
-
第二组为加入此用户组的账号的权限;
-
第三组为非本人且没有加入本用户组的其他账号的权限;
-
十进制权限改变法
二进制 | 十进制 | 权限(rwx ) |
---|---|---|
000 | 0 | --- |
001 | 1 | --x |
010 | 2 | -w- |
011 | 3 | -wx |
100 | 4 | r-- |
101 | 5 | r-x |
110 | 6 | rw- |
111 | 7 | rwx |
UGO
权限改变法
-
输入
chmod
命令,然后输入要更改权限的用户,为用户提供 u,为组提供 g,为其他用户提供 o,或者输入三个运算符之一:-
移除一个权限
+
添加一个权限=
设置一个权限
1
2# 删除用户对hashcat.hcstat 所属文件的写入权限,可以输入以下内容:
kali >chmod u-w hashcat.hcstat
修改文件属性与权限
chgrp
: 修改文件所属用户组
chgrp [-R] 用户组 dirname/filename ...
-R
: 进行递归修改,即连同子目录下的所有文件,目录都更新为这个用户组
chown
: 修改文件拥有者
chown [-R] 账号名称 文件或目录
chown [-R] 账号名称:用户组名称 文件或目录
chmod
: 修改文件的权限
-
chmod [-R] zxy 文件或者目录
zxy
: 表示数字类型,为rwx
属性数值的相加
-
chmod u=rwx,go=rx 文件
- u: user
- g: group
- o: others
- a: 表示全部的身份
- =: 设置
- -: 移除
- +: 赋予
-
chmod a-x 文件
: 移除可执行权限
umask
档案预设权限
umask
就是指定目前使用者在建立档案或目录时候的属性默认值
1 | # umask |
-
在预设权限的属性上,目录与档案是不一样的。由于档案我们不希望他具有可执行的权力, 预设情况中,
档案是没有可执行 (x) 权限的。因此:- 若使用者建立为档案则预设没有可执行 ( x ) 项目,亦即只有 rw 这两个项目,也就是最大为
666
分,预设属性如:-rw-rw-rw-
- 若使用者建立为目录,则由于 x 与是否可以进入此目录有关,因此预设为所有权限均开放, 亦即为
777
分,预设属性如:drwxrwxrwx
- 若使用者建立为档案则预设没有可执行 ( x ) 项目,亦即只有 rw 这两个项目,也就是最大为
-
umask
指定的是『该默认值需要减掉的权限!』因为 r、w、x 分别是 4、2、1 分,所以啰!也就是说,当要拿掉能写的权限,就是输入 2 分,而如果要拿掉能读的权限,也就是 4 分,那么要拿掉读与写的权限,也就是 6 分,而要拿掉执行与写入的权限,也就是 3 分.1
2建立档案时: (-rw-rw-rw-) – (-----w--w-) ==> -rw-r--r--
建立目录时: (drwxrwxrwx) – (d----w--w-) ==> drwxr-xr-x
chattr
档案隐藏属性
1 | # chattr [+-=][ASacdistu] 档案或目录名称 |
1 | chattr +a file1 只允许以追加方式读写文件 |
lsattr
(显示档案隐藏属性)
1 | lsattr [-aR] 档案或目录 |
SUID
,SGID
,SBIT
等特性
权限对目录的重要性
- 目录主要的内容在记录文件名列表,文件名和目录有强烈的关联;
- r(read contents in directory)
- 表示具有读取目录结构列表的权限,即当你具有读取®一个目录的权限时,表示你可以查询该目录下的文件名数据,可以用
ls
这个命令列出该目录的内容列表
- 表示具有读取目录结构列表的权限,即当你具有读取®一个目录的权限时,表示你可以查询该目录下的文件名数据,可以用
- w(modify contents of directory)
- 表示你具有改动该目录结构列表的权限
- 建立新的文件与目录;
- 删除已经存在的文件与目录(不论该文件的去权限是什么);
- 将已存在的文件或目录进行更名;
- 移动该目录内的文件,目录的位置;
- 表示你具有改动该目录结构列表的权限
- x(access directory)
- 目录的x代表的是用户能否进入该目录成为工作目录的用户,所谓的工作目录(work directory)就是当前所在的目录;
- 如果你在某个目录下不具有x的权限,那么你就无法切换到该目录下,也就无法执行该目录下的任何命令,即使你具有该目录的r或者w的权限;
- 要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给;
Linux
文件种类与扩展名
-
文件种类
-
常规文件(regular file)
- 纯文本文件(ASCII)
- 二进制文件(binary)
- 数据文件(data)
-
目录(directory)
- 就是目录: 第一个属性为
d
- 就是目录: 第一个属性为
-
连接文件(link)
- 类似Windows的快捷方式: 第一个属性为
l
(字母L的小写)
- 类似Windows的快捷方式: 第一个属性为
-
设备与设备文件(device):
/dev
- 区块(block)设备文件: 第一个属性为
b
- 字符(character)设备文件: 第一个属性为
c
,即一些串行端口的接口设备
- 区块(block)设备文件: 第一个属性为
-
数据接口文件(sockets)
- 第一个属性为
s
,称为数据接口文件,这种类型的文件通常被用在网络上的数据交换。通常/run
或者/tmp
- 第一个属性为
-
数据输送文件(FIFO,pipe)
- 第一个属性为
p
.FIFO也是特殊的文件类型,它主要的目的是解决多个程序同时读写一个文件造成的错误问题,FIFO是先进先出的缩写,即管道.
- 第一个属性为
-
-
Linux文件扩展名
- 一个Linux文件能不能被执行,与它的第一栏的十个属性有关,与文件名一点关系也没有.
- 只要权限当中具有x的话即代表这个文件具有可以被执行的能力.
-
Linux文件名长度限制
- 单一文件或目录的最大容许文件名为255字节,以ASCII英文占用一个字节莱来说,则大约可达255个字符长度.若是以每个汉字占用2字节来说,最大文件名就是大约在128个汉字之间.
-
Linux文件名的限制
-
在设置Linux下的文件名最好避免一些特殊字符
1
* ? > < ; & ! [ ] | \ ' " ` ( ) { }
-
Linux
目录配置
Linux
目录配置的依据-FHS
-
FHS
(FileSystem Hierarchy Standard
): 主要目的是希望让用户了解到已安装软件通常放置于那个目录下.可分享(shareable) 不可分享(unshareable) 不变(static) /usr
(软件存放处)/etc
(配置文件)/opt
(第三方辅助软件)/boot
(启动与内核文件)可变动(variable) /var/mail
(用户邮箱)/var/run
(程序相关)/var/spool/news
(新闻组)/var/lock
(程序相关)- 可分享: 可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用在目录;
- 不可分享: 自己机器上面运行的设备文件或是与程序有关的socket文件等,由于仅与自身机器有关,所有当然就不适合分享其他主机;
- 不变: 有些数据是不会经常变动的,跟随着发型版而不变动.例如函数库,文件说明,系统管理员所管理的主机服务配置文件等;
- 可变动: 经常修改的数据,例如日志文件,一般用户可自行接收的新闻组等;
/
(root 根目录): 与启动系统有关;/usr
(unix software resource): 与软件安装/执行有关;/var
(variable): 与系统运行过程有关;
-
/
(root 根目录): 与启动系统有关;-
根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来,同时根据目录也与启动,还原,系统修复等操作有关.
-
根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好,如此不但性能较佳,根目录所在的文件系统也较不容易发送问题;
目录 应放置文件内容 /bin
放置的是单人维护模式下还能够被使用的命令.在 /bin
下面的命令可以被root
与一般账号所使用,主要:cat
,chmod
,chown
,date
,mv
,mkdir
,bash
等常用命令/boot
主要放置启动时会使用到的文件,包括Linux内核文件以及启动选项与启动锁需配置文件等.Linux内核常用文件名为:vmlinuz,如果使用的是 grub2
这个启动引导程序,则还会存在/boot/grub2
这个目录/dev
在Linux系统上,任何设备接口设备都是以文件的形式存在于这个目录中.只要通过读写这个目录下面的某个文件,就等于读写某个设备,比较重要的文件 /dev/null
,/dev/zero
,/dev/tty
,/dev/loop*
,/dev/sd*
等/etc
系统主要的配置文件几乎都放置在这个目录内.一般来说,这个目录下的各文件属性是可以让一般用户查看的,但是只有root有权力修改. FHS
建议不要放置可执行文件(binary)在这个目录中.比较重要的文件有:/etc/modprobe.d/
,/etc/passwd
,/etc/fstab
,/etc/issue
的等,另外FHS
还规范几个重要的目录最好要存在/etc/
目录下:/etc/opt
(必要): 这个目录在放置第三方辅助软件/opt
的相关配置文件;/etc/X11
(建议): 与X Window有关的各种配置文件都在这里,尤其是xorg.conf
这个X Server的配置文件/etc/sgml
(建议): 与SGML
格式有关的各项配置文件/etc/xml/
(建议): 与XML
格式有关的各项配置/lib
放置的则是在启动时会用到的函数库,以及在 /bin
或/sbin
下面的命令会调用的函数库而已.以及在/bin
或/sbin
下面的命令会调用的函数库而已/lib/modules/
: 这个目录主要放置可抽换式的内核相关模块(驱动程序)/media
放置的就是可删除的设备,包括软盘,光盘,DVD等设备都暂时挂载与于此.常见的文件名: /media/floppy
,/media/cdrom
/mnt
放置暂时挂载某些额外的设备,一般建议放置到这个目录中. /opt
给第三方辅助软件放置的目录 /run
早期的 FHS
规定系统启动后所产生的各项信息一个要放置/var/run
目录下,新版的FHS
则规范到/run
下面,由于/run
可以使用内存模拟,因此性能上会好很多/sbin
Linux有很多命令用来设置系统环境的,这些命令只有root才能够用来设置系统,其他用户最多只能用来查询而已.**放在 /sbin
下面的为启动过程中所需要的,里面包括了启动,修复,还原系统所需要的命令.**至于某些服务器软件程序,一般放置到/usr/sbin
,至于本机自行安装的软件所产生的系统执行文件(system binary),则放置到/usr/local/sbin
当中.常见的命令包括:fdisk
,fsck
,ifconfig
,mkfs
/srv
srv
可以视为service的缩写,是一些网络服务启动之后,这些服务所需要使用的数据目录,常见的服务如WWW,FTP;/tmp
这是让一般用户或是正在执行的程序暂时放置文件的地方.这个目录是任何人都能够存取的,所以需要定期清理一下. /usr
放置操作系统软件资源的目录,而不是用户数据 /var
主要针对经常性变动的文件,包括缓存(cache),日志文件(log file)以及某些软件运行所产生的文件,包括程序文件(lock file, run file) /home
这是系统默认的用户家目录(home directory).比较重要的是家目录有两个代号: ~
: 代表目前这个用户的家目录;~holelin
: 则代表holelin
的家目录/lib<qual>
用来存放与 /lib
不同的格式的二进制函数库,例如支持64位的/lib64
函数库/root
系统管理员(root)的家目录,之所以放在这里.是因为如果进入单人维护模式而仅挂载跟目录时,该目录就能够拥有root的家目录 /lost+found
这个目录使用标准 ext2
,ext3
,ext4
文件系统格式才会产生一个目录,目的在于当文件系统发生错误时,将一些遗失的片段放置到这个目录下,不过如果使用的是xfs
文件系统的话,就不会存在这个目录/proc
这个目录本身是一个虚拟文件系统(virtual file system),它放置的数据都是在内存当中,例如系统内核,进程信息(process),外接设备的状态及网络状态等.因为这个目录下的数据都是在内存当中,所以本身不占任何硬盘空间.比较重要的文件例如: /proc/cpuinfo
,/proc/dma
,/proc/interrupts
,/proc/ioports
,/proc/net/*
/sys
这个目录其实和 /proc
非常类似,也是虚拟的文件系统,主要也是记录内核与系统硬件信息相关的内容,包括目前已加载的内核模块与内核检测到的硬件设备信息等.这个目录同样不占硬盘容量. -
比较重要的目录:
/etc,/bin/dev/lib,/sbin
-