权限的理解
Posted 异样旧日
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了权限的理解相关的知识,希望对你有一定的参考价值。
目录
一.shell外壳程序
在Linux系统,用户通过指令操作,来进行使用和操作计算机。
指令操作并不是直接对Linux内核(kernel)系统进行的,而是和系统提供的外壳程序进行的交互。
用户不直接对操作系统进行操作,主要还是因为:1.学习成本太高 2.操作失误可能导致计算机瘫痪
外壳程序:是用户和操作系统交互间的软件层,在一定程度可以起到保护操作系统的作用
a. 将使用者的命令翻译给核心(kernel)处理
b.同时,将核心的处理结果翻译给使用者。
Linux常见的外壳程序有:bash 、csh 、tcsh 等,但是大多数Linux系统默认的是Bash
echo $0
可以查看外壳程序。bash作为可执行程序,是一个死循环,循环输出[ ]$ ,然后接收用户的输入。
二.用户
1.Linux的用户
-
root:
超级用户,可以在Linux系统下做任何事情,基本不受限制。类似于管理员的身份
-
普通用户:
可以有多个,并且受到权限的约束
2. 用户切换
- 命令:
su [用户名]
root用户的命令提示符为
#
普通用户的命令提示符为
$
输入
logout
、exit
或 按快捷键ctrl+d
,可以退出登陆
三.权限
1.概念
linux下一切皆文件,不同的用户对于文件的操作权限也不同。对文件基本属性设置,来限制不同用户对于该文件可执行的操作就是权限管理。
2. 用户划分
- 所有者(owner): 该文件属于哪个用户
- 所属组(group): 该文件属于哪个组,对于该组的所有用户
- 其他(other): 不属于上述两种的其他用户
3. 文件属性
使用
ll
或者ls -l
可以显示文件的属性
进入目录,是需要其x(可执行)权限。
- 文件属性:
d
:表示目录
-
:表示普通文件
l
:表示连接文档……
- 权限:
以三个为一组,且均为
rwx
的参数组合,如果没有某项权限,则用
-
表示
r
:表示可读(read)
w
:表示可写(write)
x
:表示可执行(execute)
四.其他
1. linux系统不以文件后缀来区分文件类型
后缀可以给用户来进行标识、某些软件需要识别后缀(比如:gcc编译器,会识别后缀.c文件)
2. sudo
- sudo:将操作以root权限执行
如果普通用户想执行sudo,需要该用户在信任列表中才行。
即需要以root的身份,在/etc/sudoers文件中进行写入
写入:用户名字符串 ALL=(ALL) ALL
语法:sudo 命令
当执行sudo ls /root | grep test.txt
会出现Permission denied的报错
tips:sudo与重定向
3. root不受权限约束
示例:(如下图)对于所有者、所属组和其他都没有读、写、执行权限的hello.c文件
五.权限管理
- 文件的所有者有修改权限的权利
1. 修改所有者或所属组
修改文件的所有者或所属组需要
root
的权限
切换到root超级用户下进行操作
使用命令:
sudo + 命令
,表示命令是在root权限下执行的
- chgrp:更改文件所属组
语法:chgrp [-R] 所属组名 文件名
-R:递归更改所属组 如果是更改目录时,对该目录下所有文件都执行该操作
- chown:更改文件拥有者,也可同时更改所属组
语法:chown [-R] 所有者名 文件名
或``chown [-R] 所有者名:所组组名 文件名`
2. 修改rwx权限
文件的基本权限属性有9个,分别是user/group/other三种身份各自的rwx权限
chomd:修改文件9个权限
语法:chomd [-R] 权限 文件名
- 符号类型改变权限
a:全部 u:所有者 g:所属组 o:其他
+:增加 -:除去 =:设置
r:读 w:写 x:执行
- 八进制修改
权限符号 2进制 八进制 rwx 111 7 rx- 110 6 r– 100 5 …… rwx rw- r– 111 110 100 765 r-- r-- r– 100 100 100 444
3. 系统默认权限
可以发现,我们自己创建的文件,系统会帮我们生成9个权限属性,那么系统是如何做到的呢?
- 新建目录的默认权限:777 (rwx rwx rwx)
- 新建普通文件的默认权限:666 (rw- rw- rw-,去除可执行权限)
- 权限掩码umask:用来限定新建文件的权限默认值(和chmod相反)
umask
命令:查看/修改目前用户的权限掩码
权限掩码:0002。第1位表示特殊权限,后3位对应u g o。
生成的权限=默认权限 - umask
( 位运算:默认权限 & (~umask) )
根据权限掩码:002
生成目录的权限:777(rwx rwx rwx) - 002(— — -w-) = 775(rwx rwx r-x)
生成普通文件:666(rw- rw- rw-)- 002(— — -w-) = 664(rw- rw- r–)
- 设置权限掩码
语法:
umak 0xxx
4. 粘滞位
对于目录权限:
r:可读(如
ll Dir/
,读取Dir文件的文件信息)w:可写 (如
touch Dir/file
,在目录下创建一个文件)x:可执行(如
cd Dir/
,进入目录)因此对于对文件的删除操作,需要的是文件所在目录对该用户的w权限
因此可能会遇到如下场景:
对于多个用户共同使用的项目目录下, 每个用户有该目录的w权限(可以创建文件),但是同样也可以随意删除目录下文件或空目录(非空目录则又需要其目录的w权限)。
粘滞位:只能对目录设置。设置后,在该目录中,只有文件的所有者(和root)才可以删除或移动文件。
在Linux系统中的临时文件
/tmp
,其权限rwxrwxrwt
,许所有用户在目录中创建文件。其末尾的t
符号表示粘滞位:允许各用户在目录中创建、删除直接的文件,但是禁止删除其他用户的数据。
粘滞位权限是针对其他用户(other)设置的
🦀🦀观看~
PostgreSQL角色和权限理解
postgres=# create role test0 createdb createrole login; CREATE ROLE postgres=# \\du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} test0 | Create role, Create DB | {} test_role | | {} postgres=# \\du+ List of roles Role name | Attributes | Member of | Description -----------+------------------------------------------------------------+-----------+------------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} | test0 | Create role, Create DB | {} | test_role | | {} | postgres=# create role test1 inherit; CREATE ROLE postgres=# grant test0 to test1; GRANT ROLE postgres=# \\du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} test0 | Create role, Create DB | {} test1 | Cannot login | {test0} test_role | | {} postgres=# set role test0; SET postgres=> create table test0(id int); CREATE TABLE postgres=> set role test1; SET postgres=> insert into test0 select 1; INSERT 0 1 postgres=> set role test0; SET postgres=> set role postgres postgres-> ; SET postgres=# create role test2 login; CREATE ROLE postgres=# set role test2; SET postgres=> insert into test0 select 1; ERROR: permission denied for relation test0 postgres=> \\d
以上是关于权限的理解的主要内容,如果未能解决你的问题,请参考以下文章