Linux基础命令-chmod修改文件权限

Linux基础命令-chown修改文件属主

文章目录

前言

一、文件权限有哪些

1.1 文件的普通权限

1.1.1 普通权限案例:

1.2 文件的特殊权限

1.2.1 案例一:特殊权限SUID

1.2.2 案例二:特殊权限SGID

1.2.3 案例三:特殊权限Stickybit

二、chmod命令介绍

三、命令的语法及参数 

3.1 先用help或man查看文件语法格式

3.2 常用参数

四、参考实例

4.1 设定文件的权限为775

4.2 设定文件可以让任何人读取

4.3 设定目录及子文件的所有者可以读执行,其他无权限

4.4 让用户临时拥有重启系统的权限

4.5 设定文件无法执行

总结

前言

        这个命令是管理linux权限中最重要的一个命令,主要是给文件修改读写执行的权限,学好这个命令就能很好的管理文件的权限,下面先了解什么是文件的权限。

一、文件权限有哪些

        在linux系统中,每个文件都有归属的所有者和所有组,并且规定了文件的所有者、以及其他人对文件所拥有的可读(r)、可写(w)、可执行(x)等权限。对于一般文件来说,权限比较容易理解:“可读”表示能够读取文件的实际内容;“可写”表示能够编辑、新增、修改、删除文件的实际内容;“可执行”则表示能够运行一个脚本程序。。对于目录文件来说,“可读”表示能够读取目录内的文件列表;“可写”表示能够在目录内新增、删除、重命名文件;而“可执行”则表示能够进入该目录。

1.1 文件的普通权限

用ll展开文件的详细信息

左边这一框内显示的就是文件的权限;

第一个字符信息就是文件的类型,这个文件类型有(d)目录文件、(-)普通文件、(p)管道文件、(c)字符设备文件、(b)块设备文件、(l)链接文件等等。

文件的普通权限有r(read 读 )、w(write 写)、x(execute 执行)权限。

除了第一个文件类型,一共有9个空位是用来显示文件的权限,分成三个,文件所有者(user)、所有组(group)、其他人(other)、还有一个是所有人(all),包括前面三个的意思。

在linux中,系统只认识二进制(0/1)的内容,那么读写执行是怎么转化成我们认识的权限,实际上,我们能看到的读写执行是八进制(0-7)显示的。

权限 二进制 八进制 内容描述
--- 000 0 没有任何权限
--x 001 1 只有执行权限
-w- 010 2 只有写入权限
-wx 011 3 有写入和执行权限
r-- 100 4 只有读的权限
rwx 111 7 满权限,读写执行都有

1.1.1 普通权限案例:

1)文件所有者拥有读写执行权限,所有者、其他用户无权限

[root@localhost ~]# chmod 700 anaconda-ks.cfg 

2)目录拥有满权限

[root@localhost ~]# chmod -R a=rwx test/
[root@localhost ~]# chmod -R 777 test/

3) 给脚本文件加执行权限

[root@localhost ~]# chmod +x ping.sh 
[root@localhost ~]# ll ping.sh 
-rwxr-xr-x. 1 root root 0 2月  17 16:22 ping.sh

1.2 文件的特殊权限

文件的特殊权限有三个:

SUID(s) :限定只能用在二进制执行程序上面,对目录设置是无效的,在设置了SUID的二进制程序,会让其拥有所有者的权限(仅对拥有执行权限的二进制程序有效)。

SGID(s):可以给二进制设置可执行程序,也可对目录进行设置;在设置了SGID权限的目录下建立文件时,新创建的文件的属组会继承上级目录的属组,也就是上级目录是test组,新建的文件也是test组;若对二进制程序进行设置时,能够让执行的用户临时获取文件所属组的权限。

Stickybit(t):粘滞位权限是针对目录的,对文件无效。也叫防删除位。

1.2.1 案例一:特殊权限SUID

给其他用户临时查看/etc/shadow文件的权限;

[root@localhost ~]# ll /etc/shadow
----------. 1 root root 1243 2月   8 00:29 /etc/shadow
[root@localhost ~]# which cat
/usr/bin/cat
[root@localhost ~]# chmod u+s /usr/bin/cat
[root@localhost ~]# ll !$
ll /usr/bin/cat
-rwsr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
[root@localhost ~]# su - host 
[host@localhost ~]$ cat /etc/shadow
root:$6$1f7ze/I1LjSg3xyX$Tvw4ydpoxp9Xn84c3IbJNZ9lnrVgDBOc3qTySQLWKRVoszXBie6qKhiD13Mdf4BnwMj7ByESiWXGW7P1tVBpY/::0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
lp:*:18353:0:99999:7:::
sync:*:18353:0:99999:7:::
shutdown:*:18353:0:99999:7:::
halt:*:18353:0:99999:7:::

1.2.2 案例二:特殊权限SGID

2)其他用户无法删除目录

[root@localhost ~]# mkdir /data
[root@localhost ~]# chmod o+t /data/
[root@localhost ~]# ll -d /data/
drwxr-xr-t. 2 root root 6 2月  17 16:30 /data/
[root@localhost ~]# su - host
上一次登录:五 2月 17 16:29:15 CST 2023pts/0 上
[host@localhost ~]$ rm -rf /data/
rm: 无法删除"/data/": 权限不够

1.2.3 案例三:特殊权限Stickybit

让新创建的文件归属于上级的组

[root@localhost ~]# mkdir data
[root@localhost ~]# ll -d data/
drwxr-xr-x. 2 root root 6 2月  17 16:33 data/
[root@localhost ~]# chown -R root:host data/
[root@localhost ~]# ll data/ -d 
drwxr-xr-x. 2 root host 6 2月  17 16:33 data/
[root@localhost ~]# cd data/
[root@localhost data]# touch a.txt
[root@localhost data]# ll
总用量 0
-rw-r--r--. 1 root root 0 2月  17 16:34 a.txt
[root@localhost data]# cd ..
[root@localhost ~]# chmod g+s data/
[root@localhost ~]# cd data/
[root@localhost data]# touch b.txt
[root@localhost data]# ll
总用量 0
-rw-r--r--. 1 root root 0 2月  17 16:34 a.txt
-rw-r--r--. 1 root host 0 2月  17 16:35 b.txt

好的,讲完了文件的权限,下面来讲下chomd的介绍和格式,以及如何使用。

二、chmod命令介绍

        chmod命令来自于英文词组“change mode”的缩写,其功能适用于改变文件或者目录权限的命令。默认只有文件的所有者和管理员可以设置文件权限,普通用户只能管理自己的文件的权限属性。

        设置权限时可以使用数字法,亦可使用字母表达式,对于目录文件建议加入-R参数进行递归操作,意味着不仅对于目录本身,也对目录内的子文件/目录进行新权限的设定。

三、命令的语法及参数 

3.1 先用help或man查看文件语法格式

[root@localhost ~]# chmod --help
用法:chmod [选项]... 模式[,模式]... 文件...
 或:chmod [选项]... 八进制模式 文件...
 或:chmod [选项]... --reference=参考文件 文件...

可以看到其中的语法有几种写法,可以在chmod后面加模式,亦可加八进制的格式。

语法: chmod 【选项】 模式 文件

            chmod 【选项】八进制模式 文件

其实八进制就是以数字的模式来代表权限,比如说满权限(rwxrwxrwx),写作777,计算格式就是4+2+1、4+2+1、4+2+1。

3.2 常用参数

chmod命令的参数可以说并不多,常用的其实只有几个。

-c 若该文件权限确实已经更改,才显示其更改动作
-f 若该文件权限无法被更改也不显示错误讯息
-v 显示权限变更的详细资料
-R 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)

四、参考实例

4.1 设定文件的权限为775

[root@localhost ~]# chmod 775 anaconda-ks.cfg 
[root@localhost ~]# ll anaconda-ks.cfg 
-rwxrwxr-x. 1 root root 1365 2月   8 00:02 anaconda-ks.cfg

4.2 设定文件可以让任何人读取

[root@localhost ~]# chmod a=r anaconda-ks.cfg 
[root@localhost ~]# ll anaconda-ks.cfg 
-r--r--r--. 1 root root 1365 2月   8 00:02 anaconda-ks.cfg

4.3 设定目录及子文件的所有者可以读执行,其他无权限

[root@localhost ~]# chmod -R 500 data/
[root@localhost ~]# ll data/
总用量 0
-r-x------. 1 root root 0 2月  17 16:34 a.txt
-r-x------. 1 root host 0 2月  17 16:35 b.txt

4.4 让用户临时拥有重启系统的权限

[root@localhost ~]# which reboot
/usr/sbin/reboot
[root@localhost ~]# ll /usr/sbin/reboot 
lrwxrwxrwx. 1 root root 16 2月   8 00:25 /usr/sbin/reboot -> ../bin/systemctl
[root@localhost ~]# chmod u+s !$
chmod u+s /usr/sbin/reboot

4.5 设定文件无法执行

[root@localhost ~]# chmod a-x anaconda-ks.cfg 

总结

        chmod这个命令的要讲的东西是很多的,要理解起来光看概念是比较难理解的,关键要多实操,多上手练,就能很快理解权限之间的关系和用法了;如果觉得内容还行的,可以一键三连支持一下!

 

相关文章

linux下开机自启: 在/etc/init.d目录下新建文件elasticsear...
1、因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以...
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用...
ASP.NET Core应用程序发布linux在shell中运行是正常的。可一...
设置时区(CentOS 7) 先执行命令timedatectl status|grep &...
vim /etc/sysconfig/network-scripts/ifcfg-eth0 B...