文件权限
例如:通过 ll -a 命令查询出当前目录有以下文件
–rw-r–r– 1 root root 24 May 4 18:01 test
第一个字符代表这个文件是目录或文件或链接文件
【-】 则为文件;【d】则为目录;【l】则为链接文件;
【b】 则为设备文件中可供存储的周边设备;【c】 则为设备文件中串行端口设备,例如鼠标、键盘等;
rw- 代表文件拥有者具备的权限;r– 代表用户组内账号具备的权限; r– 代表非此拥有者且没有加入此用户组的其他账号的权限。
1 代表链接数。
root 代表文件拥有者;root 代表文件所属用户组。
24 代表文件大小,默认单位 字节,byte。
May 4 18:01 代表文件最后被修改的时间。
test 代表文件名字。
改变文件属性与权限
chown
改变文件拥有者。前提:用户必须存在于 /etc/passwd 文件中。
常用命令:
chown【-R】用户名 文件或目录 ;-R:进行递归变更,连同次目录下的所有文件都变更;
chown【-R】账号名称:组名 文件或目录 ;可以同时修改所属组。
实例:
#当前目录下有test目录;test目录下有file1文件、mulu1目录;mulu1目录下有file2文件。用户和所属组都为wzy;现将用户和所属组修改为root;经查看,已成功修改。
[root@VM-16-5-centos ~]# chown -R root:root test/
[root@VM-16-5-centos ~]# ll
total 4
drwxr-xr-x 3 root root 4096 Dec 27 23:03 test
[root@VM-16-5-centos ~]# cd test/
[root@VM-16-5-centos test]# ll
total 8
-rw-r–r– 1 root root 7 Dec 27 23:03 file1
drwxr-xr-x 2 root root 4096 Dec 27 23:03 mulu1
[root@VM-16-5-centos test]# cd mulu1/
[root@VM-16-5-centos mulu1]# ll
total 4
-rw-r–r– 1 root root 6 Dec 27 23:03 file2
chgrp
改变文件所属组。
常用命令:
chgrp【-R】组名 文件或目录;-R:进行递归变更,连同次目录下的所有文件都变更;
chmod
改变文件权限。
常用命令:
chmod 对象(u / g / o / a) 赋值符(+ / – / =) 权限类型(r / w / x)
chmod 666 文件或目录
u:用户 g:组 o:其它 a:全部(用户、组、其它)
r:读 4 w:写 2 x:执行 1
文件是实际含有数据的地方,对于文件:
r:可读取此文件的实际内容,如读取文本文件的文字内容等。
w:可编辑、新增、修改、该文件内容(不包括删除该文件)。
x:该文件具有可被系统执行的权限。
目录主要内容在记录文件名列表,对于目录:
r:可读取目录结构列表的权限。
w:可建立新的文件与目录;删除已经存在的文件或目录(不论该文件权限为何);将已存在的文件或目录改名;移动该目录内文件、目录位置。
x:代表用户能否进入该目录。
开放目录给任何人浏览时,至少要给r和x权限。
假设家目录下有以下内容,/dir1/file1、/dir2 针对这三个文件或目录来说分别需要哪些最小的权限完成各项任务。
例题
你的系统有个- -般身份用户dmtsai, 他的群组属于dmtsai, 他的家目录在/home/dmtsai, 你是 root, 你想将你的
~/.bashrc复制给他,可以怎么做?
答:
复制文件:
cp ~/ . bashrc ~dmtsai /bashrc
修改属性:
chown dmtsai :dmtsai ~dmtsai/bashrc
例题:
我想在/tmp底下建立一个目录,这个目录名称为chapter6_ 1,并且这个目录拥有者为dmtsai, 群组为dmtsai, 此
外,任何人都可以进入该目录浏览文件,不过除了dmtsai 之外,其他人都不能修改该目录下的文件。
答:
因为除了dmtsai 之外,其他人不能修改该目录下的文件,所以整个目录的权限应该是drwxr-xr-x 才对!因此 你应该
这样做:
建立目录: mkdir /tmp/chapter6_ 1
修改属性:
chown -R dmtsai:dmtsai / tmp/chapter6_ 1
修改权限:
chmod -R 755 / tmp/chapter6_ 1
文件与目录的默认权限
umask 当前用户新建文件或目录时默认权限。
查询出来的默认值是需要减掉的权限。
建立文件默认最大权限是666;即新建文件的权限是 666-umask
建立目录默认最大权限是777;即新建文件的权限是 777-umask
root用户的umask默认是022
- 建立文件默认权限644;建立目录默认权限是755;
非特权用户的umask默认是002
- 建立文件默认权限664;建立目录默认权限是775;
常用命令
[root@VM-16-5-centos ~]# umask
0022
[root@VM-16-5-centos ~]# umask -S
u=rwx,g=rx,o=rx
更改umask默认权限,直接 umask 0022 即可。
持久保存umask
全局设置:修改 /etc/bashrc
用户设置:~/.bashrc
隐藏权限
chattr命令只能用在Ext2/Ext3/Ext4的Linux传统文件系统上。
常用命令
chattr 【+-=】【选项】 文件或目录
查看隐藏权限
常用命令
lsattr 【选项】 文件或目录
- -a 将隐藏文件的属性也列出。
- -d 如果是目录,仅列出目录本身属性而非目录内的文件名。
- -R 连通子目录的数据也列出。
文件特殊权限
例如:/根目录下 /tmp 目录 和 /usr/bin/passwd
drwxrwxrwt. 10 root root 4096 Jan 4 03:50 tmp
-rwsr-xr-x 1 root root 27856 Apr 1 2020 passwd
Set UID(4)
SUID权限仅对二进制程序(binary program)有效;
执行者对于该程序需要具有x的可执行权限;
本权限仅在执行该程序的过程中有效(run-time);.
执行者将具有该程序拥有者(owner) 的权限。
设置在目录上无意义。
命令
chmod u+s 文件
chmod 4xxx 文件
chmod u-s 文件
注意执行方式的区别
bash cs.sh
不需要脚本文件具有执行权限,因为它是由bash
解释器直接执行。./cs.sh
需要脚本文件具有执行权限,因为它是作为独立命令由当前 shell 执行。
Set GID(2)
对于文件来说
SGID对二进制程序有用;
程序执行者对于该程序来说,需具备x的权限;
执行者在执行的过程中将会获得该程序群组的支持!
对于目录来说
用户若对于此目录具有r与x的权限时,该用户能够进入此目录;
用户在此目录下的有效群组(ffective group)将会变成该目录的群组;
用途:若用户在此目录下具有w的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同。
命令
chmod g+s 文件/目录
chmod 2xxx 文件/目录
chmod g-s 文件/目录
Sticky Bit(1)
当用户对于此目录具有w,x 权限,亦即具有写入的权限时;
当用户在该目录下建立文件或目录时,仅有自己与root 才有权力删除该文件。
设置在文件上无意义
命令
chmod o+t 目录
chmod 1xxx 目录
chmod o-t 目录
实例
最后一个权限 7666 ,无论是user 、group 、others都没有执行权限,即大写的S T代表空。
总结
SUID
- user,占据属主的执行权限位
- s:属主拥有x权限
- S:属主没有x权限
SGID
- group,占据属组的执行权限位
- s:属组拥有x权限
- S:属组没有x权限
Sticky:
- other,占据other的执行权限位
- t:other拥有x权限
- T:other没有x权限
FHS目录定义三层目录定义
FHS根据文件系统使用的频繁与否和是否允许使用者随意变动,将目录定义为四种交互作用的形态,下面是具有代表性的目录
可分享的(shareable) | 不可分享的(unshareable) | |
不变的(static) | /usr、/opt | /etc、/boot |
可变动的(variable) | /var/mail、/var/spool/news | /var/run、/var/lock |
- 可分享的:可以分享给其它系统挂载使用的目录,包括可执行文件与用户的邮件等数据
- 不可分享的:本机上运行的装置文件或与程序文件有关的socket,因仅与自身机器有关,不适合分享给其它主机
- 有些数据是不会经常变动的,跟随者发行版而不变动。如函数库、文件说明文件、系统管理员所管理的主机服务配置文件等
- 经常改变的数据。如登录文件、一般用户可自行接收的新闻组等
实际上,FHS针对目录树仅定义三层目录下该放什么数据:
/(root,根目录):与系统、开机等相关。
/usr:与软件安装执行相关。
/var:与系统运作过程有关。
Linux目录结构
红色的是FHS要求必须存在的目录;蓝色的是FHS建议可以存在的目录
/bin | 存放可执行的二进制文件,常用命令:ls,cd,mv等 |
/boot | 存放系统启动时会用到的文件,包括内核文件以及启动选项和启动所需要的配置文件。Linux常用的内核名:vmlinuz。 |
/dev | 存放一切设备文件。重要文件:/dev/null(黑洞文件)、/dev/zero(提供无限连续不断的空的数据流)、/dev/loop(挂载镜像文件或把文件作为块设备挂载)、/dev/sd(磁盘)等。 |
/etc | 存放系统主要的配置文件。重要文件:/etc/modprobe.d(自动处理可载入模块)、/etc/passwd(用户信息)、/etc/fstab(系统启动时会自动地从这个文件读取信息,并自动将此文件中指定的文件系统挂载到指定的目录)、/etc/issue(在登录前显示的信息)、/etc/opt(存放第三方辅助软件/opt的相关 |
/lib | 存放系统启动时会用到的函数库以及/bin或/sbin下面命令会调用的函数库。必须存在:/lib/modules/: 驱动程序。 |
/media | 存放可删除的设备。比如:软盘、光盘、DVD等设备。常见文件名:/media/floppy(软盘)、/media/cdrom(只读光盘) |
/mnt | 存放临时挂载的额外设备 |
/opt | 存放第三方辅助软件。 |
/run | 存放系统启动后产生的各种信息。系统重启时,此目录下文件应被删除。 |
/sbin | 存放只有root才能使用的命令,包含启动,修复,还原系统所需要的命令。常用命令:fdisk(MBR磁盘分区命令)、fsck(检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查)、ifconfig(显示或设置网络设备)、mkfs(在特定分区建立Linux系统)等。 |
/tmp | 存放各种临时文件 |
/srv | 存放网络服务启动后所需的数据 |
/usr | 存放Unix软件资源。与软件安装或执行有关 |
/var | 与系统运行过程有关。系统运行后会逐渐占用硬盘容量的目录。 |
/home | 系统默认的用户家目录。 |
/lib<qual> | 存放与/lib不同格式的二进制函数库。 |
/root | 系统管理员root家目录 |
/lost+found | 使用ext2、ext3、ext4文件系统才会有的目录,当文件系统出错时会把遗失的片段放置在此。使用xfs文件系统的话,没有此目录。 |
/proc | 虚拟文件系统,系统内存的映射。这个目录的数据都在内存中,不占任何硬盘空间。重要文件:/proc/cpuinfo(cpu信心)、/proc/dma、/proc/interrupts、/proc/io |
/sys | 虚拟文件系统,主要记录内核与系统硬件信息相关的内容,包括已加载的内核模块与内核检测到的硬件设备信息。不占任何硬盘空间。 |
/proc/cmdline | 加载kernel时所下达的相关指令与参数 |
/proc/cpuinfo | 本机CPU相关信息 |
/proc/devices | 系统各个主要装置的主要装置代号,与mknod有关 |
/proc/filesystems | 目前系统已加载的文件系统 |
/proc/interrupts | 目前系统上的IRQ(中断请求)分配状态 |
/proc/ioports | 目前系统上各个装置所配置的I/O地址 |
/proc/kcore | 内存大小 |
/proc/loadavg | 系统1分钟、5分钟、15分钟平均负载(top、uptime命令) |
/proc/meminfo | 内存相关信息;包含free的显示结果 |
/proc/modules | 目前系统已加载的模块列表;类似驱动程序 |
/proc/mounts | 系统已挂载的数据(mount命令) |
/proc/swaps | 交换分区信息 |
/proc/partitions | 所有分区的信息(fdisk -l命令) |
/proc/uptime | 系统1分钟、5分钟、15分钟平均负载(uptime命令) |
/proc/version | 系统核心版本(uname -a命令) |
/proc/bus/* | 部分总线的装置 |