初始Linux (2) : 权限

1. su  [用户名]及权限概念

Linux中有两种用户:普通用户、超级用户

超级用户可以再 linux 系统下做任何事情,不受限制;而普通用户只能做有限的事情。

可以使用指令:su -快速进入root账户,但需要输入相关密码。 

      

超级用户可以直接切换到任意普通用户,不需要输入密码:

                                

普通用户的命令行提示是$ 

超级用户的命令行提示是#


如果不想变成root,但是想用root的权限做事(sudo):

                           

sudo指令在配置进配置文件之前是不能被执行的:

必须将用户lsnm添加到配置文件中,lsnm才能使用sudo命令。(此处重点是观察现象,具体操作之后会记录)

配置文件属于root


2. 访问者权限

我们将文件访问者称为:“人”

人有三类:拥有者,所属组,other

                                                           

拥有者和所属组的信息都能在文件信息中查看。不是拥有者也不是所属组,即为other

            

           

如上,第一个root是拥有者,第二个root是所属组。

拥有者(u)和所属组(g)区别如下:

在Linux系统中,文件的权限和所有权是通过文件系统来管理的。每个文件和目录都有两个重要的属性:拥有者(Owner)和所属组(Group)。这两个属性对于文件的访问控制至关重要。

1. **拥有者(Owner)**:
   - 文件的拥有者是创建该文件的用户。拥有者对文件有完全的控制权,可以读取、写入和执行文件,也可以更改文件的权限和所有权。
   - 拥有者可以是任何有效的用户账户。

2. **所属组(Group)**:
   - 每个用户都属于一个或多个组。当一个文件被创建时,它会被赋予一个默认的组,通常是创建它的用户的主组。
   - 属于文件所属组的用户可以按照该组的权限来访问文件。例如,如果一个文件的组权限设置为可读,那么所有属于该组的用户都可以读取该文件,但不一定能够写入或执行。


文件的权限要考虑谁在用(人)、以及文件拥有什么属性(文件属性)。

                                         

r-读(文件具有读权限)

w-写(文件具有写权限)

x-执行(文件具有执行权限)

                   

一共十个位置来表示权限,抛开第一个位置表示“文件类型”

其他的三三为一组,第一个为拥有者权限、第二个是所属组权限,第三个是other

有权限就有对应的字母,没权限就是-

                                     

拥有者、所属组、other是一种角色

每一个用户是一个人,角色需要人来扮演,人一定会成为一个角色。


3. 权限的改变 chmod

chmod : changemode,用changemode来改变“人”的权限。但是此时我不是文件拥有者,所以"operation not permitted"

                              

说明:只有文件的拥有者和root才可以改变文件的权限!

更改权限的操作:

对拥有者的修改,拥有者名字为u(user),所属组名字为g(group),other名字为o(other)

格式为: chmod  (人)(+或-)(权限) 要改权限的文件名

如:chmod o+rwx file_lsnm    chmod u-x,g+w test.cpp

                           

对g的操作:

                        

也可以使用a(all)直接对所有人操作:

                  

                          


除了以上方法,还有一种八进制改权限的方法:

因为u/g/o的权限由三个位置组成,并且顺序固定,都是rwx,我们使用1代表有权限,0代表无权限。即110  326  777等。

                             

110:001 001 000 , 也就是u、g有x权限,o没有任何权限。

326:011 010 110 , 也就是u有w和x权限,g有w权限,o有r和w权限

777:和 chmod a+rwx filename是一个意思。


 注意有可执行权限文件可以被执行,是两件事情:

                                     

所以就算给了x权限,文件本身不是可执行文件,依然执行不了。

比如一个.txt的文件,不管怎么给x权限,也是无法执行的。

 注意:确定身份的过程只进行一次,并且有序:

                                   

如果你是拥有者并且也是所属组,因为先确定了你是拥有者,所以就不会再往下确定了(最终你是否有访问、阅读或执行的权限就取决于拥有者的权限)。确定身份的顺序是:拥有者、所属组、other


注意:root无视权限:


chown chgrp

除了改文件属性,还能改文件的拥有者、所属组(chown chgrp)

chown(依然是只有root或者文件拥有者可以改权限):

                         

chgrp(依然是只有root或者文件拥有者可以改权限):

                                                 

其实只使用一个chown可以同时改拥有者和所属组:

                                            

使用冒号隔开拥有者和所属组。


刚才都是使用root更改每一个文件的权限。但假如我以普通用户的身份,将一份文件的所属权给另一个用户,就会:operation not permitted

普通人“给”不能直接给,给东西应当征求被给东西的人的意见

        

因此,一般要使用chown给别人都必须使用sudo指令短暂提升权限。


4. 目录的权限

            

 创建一个文件权限默认是664

 文件夹权限默认是775

先讨论目录的rwx权限:

没有r权限:

                                     

对于目录来讲,没有r权限,依然可以进入该文件夹。

但是会影响我们查看该目录里面的文件列表:

                                      


没有w权限:

                               

不能在文件夹中touch(新建文件)、不能rm文件夹中的东西。具体能否对该文件夹中的文件进行操作,取决于文件的性质。

但是可以进入文件夹,然后操作一个已经存在的文件


没有x权限:

无法进入目录。

总结:

可执行权限 : 如果目录没有可执行权限 , 则无法 cd 到目录中
可读权限 : 如果目录没有可读权限 , 则无法用 ls 等命令查看目录中的文件内容 .
可写权限 : 如果目录没有可写权限 , 则无法在目录中创建文件 , 也无法在目录中删除文件

因此,进入一个目录不需要r或者w的权限

能否进入目录,取决于用户对于该目录是否有x,也就是是否有可执行权限


至于为什么文件夹和文件的权限是775和664:

文件和文件夹的最终权限由起始权限和权限掩码一起组成。

权限掩码:更便于控制文件的起始权限。可以用umask指令来看权限掩码。

                              

目录文件的初始是777,普通文件的初始是666。先按位取反再按位与即可得到最终权限。

指令umask: 

umask
功能
查看或修改文件掩码
新建文件夹默认权限 =0666
新建目录默认权限 =0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是 mask,则实际创建的出来的文件权限是: mask & ~umask
         
                                                      

特殊问题:

1 、就算root在一个用户的文件夹里,比如:/home/lsnm  新建了一个文件。依然可以被lsnm直接删除。

2、除了root,任何人的文件夹都不允许其他人进入,可观察到权限都是700

                          

新建、删除文件,不属于文件自己的权限,而属于文件所在目录的w权限


如果两个账号AB想交互文件:

那么需要找一个既不属于A的目录,也不属于B的目录下才能交互文件。

那么这个文件夹一般会设计成和home在同一个文件夹下,由root新建,然后对other的权限是rwx。那么此时除了A和B,C作为不想参与交互的破坏者能否直接删除该文件夹呢?

[root@localhost ~]# chmod 0777 /home/
[root@localhost ~]# ls /home/ -ld 
drwxrwxrwx. 3 root root 4096 9月 19 15:58 /home/
[root@localhost ~]# touch /home/root.c
[root@localhost ~]# ls -l /home/
总用量 4
-rw-r--r--. 1 root root 0 9月 19 15:58 abc.c
drwxr-xr-x. 27 litao litao 4096 9月 19 15:53 litao
-rw-r--r--. 1 root root 0 9月 19 15:59 root.c
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/root.c #litao可以删除root创建的文件
rm:是否删除有写保护的普通空文件 "/home/root.c"?y
[litao@localhost ~]$ exit 
logout
为了解决这个不科学的问题 , Linux 引入了粘滞位的概念

5. 粘滞位 :chmod+d

假设有一个和home在同一目录下的文件夹叫share_112用于完成文件交互。

               

我们希望大家都能进来使用、交互文件,但是不希望有人恶意破坏。因此对Other的权限要放开,并且+t,让other中的人不能破坏。

                    

粘滞位的本质就是对“删除”进行单独处理

当一个目录被设置为 " 粘滞位 "( chmod +t), 则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除

权限是理解Linux操作系统中重要的一环,以后但凡遇到Permission denied,都可以回到此文,查找原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值