🪐🪐🪐欢迎来到程序员餐厅💫💫💫
主厨:邪王真眼
主厨的主页:Chef‘s blog
所属专栏:青果大战linux
总有光环在陨落,总有新星在闪烁
用户
超级用户:可以再linux系统下做任何事情,不受限制普通用户:在linux下做有限的事情。
用户创建
- root
- 普通用户
- 使用指令 adduser +用户名
- 接着使用passwd+用户名设置密码即可
- 删除普通用户使用userdel+用户名即可
su指令切换用户
- 从普通用户到root
输入su,再输入root密码
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ su
Password:
效果:你的当前路径不会改变,但身份会变成root
输入su-,再输入root密码
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ su -
Password:
你的身份会变成root并且当前目录会变为root目录
- 从普通用户a到另一个普通用户b
输入:su b的用户名,再 输入b的密码
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ su bite2323395539
Password:
- 从root到普通用户a
输入:su a的用户名,无需输入密码(因为你是管理员)
文件及目录的权限
访问者分类
- 文件和文件目录的所有者:u---User
- 文件和文件目录的所有者所在的组的用户:g---Group
- 其它用户:o---Others
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll ./
total 12
drwxrwxr-x 7 qingguo qingguo 4096 May 18 14:38 project1
drwxrwxr-x 2 qingguo qingguo 4096 May 14 23:22 project2
drwxrwxr-x 2 qingguo qingguo 4096 May 18 14:35 project3
文件类型
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project1]$ ll
total 24
drwxrwxr-x 3 qingguo qingguo 4096 May 18 12:25 test1
-rw-rw-r-- 1 qingguo qingguo 234 May 18 14:38 test1.tgz
我们还是使用ll指令,可以发现他们的第一列字母是有区别的,有的是’-‘,有的是’d',具体类别如下
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式) 、
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
基本权限
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project1]$ ll
total 24
drwxrwxr-x 3 qingguo qingguo 4096 May 18 12:25 test1
-rw-rw-r-- 1 qingguo qingguo 234 May 18 14:38 test1.tgz
我们继续观察第一项第二个到第十个字母,一共九个,三三一组,
第一个文件就是“rwx”、“rwx”、“r-x”
所代表的权限如下:
r:读取权限
w:写入权限
x:可执行权限
-:没有对应位置的权限
可以得出结论:对于该文件,所有者拥有读写和可执行权限、所属组拥有读写和可执行权限、其他用户有度和可执行权限,但没有写入权限,
特殊情况:
1.对于root,无论如何他都拥有所有权限(毕竟是至高无上的Master)
2.一个用户的权限只从左向右匹配一次,当一个用户被匹配为了拥有者,那么他就只享有拥有者的权利,而不享有所属组的权利。假如a既是拥有者又是所属组,再给她匹配它的权限时,只会去看他身为所有者的权限,不会看他在所属组的权限。如下所示
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ ll
total 16
--wxrwx--x 1 qingguo qingguo 8440 May 14 23:22 a.out
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ cat a.out
cat: a.out: Permission denied
文件和目录权限的区别
事实上,对于文件和目录,rwx的意义是不同的
r:(Read)对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
w:(Write)对文件而言,具有修改文件内容的权限;对目录来说具有创建、删除、移动、修改目录内文件的权限
x:(execute)对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
-”表示不具有该项权限
注意:
删除一个文件,与用户也没有这个文件的权限无关,只和这个用户有没有该目录的w权限有关
权限的修改
文件权限值的表示方法
- 字符表示方法
r:读取权限
w:写入权限
x:可执行权限
-:没有对应位置的权限
- 八进制数的表示方式
一个文件有三个属性位置,每个位置看作二进制位,三个二进制位可以看作八进制,于是
对于下面的文件权限值就是775
drwxrwxr-x 7 qingguo qingguo 4096 May 18 14:38 project1
chmod
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
实例:
这是当前Project2的信息
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll -d project2
drwxrwxrwx 2 qingguo qingguo 4096 May 14 23:22 project2
- 1.删除拥有者执行的rwx权限
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ chmod u-rwx project2
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll -d project2
d---rwxrwx 2 qingguo qingguo 4096 May 14 23:22 project2
- 删除所有人的rwx权限
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ chmod a-rwx project2
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll -d project2
d--------- 2 qingguo qingguo 4096 May 14 23:22 project2
- 赋予所属组读写权限
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ chmod g+rw project2
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll -d project2
d---rw---- 2 qingguo qingguo 4096 May 14 23:22 project2
除此之外chmod还支持八进制修改
- 例如:赋予所有用户rwx权限
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ chmod 777 project2
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll -d project2
drwxrwxrwx 2 qingguo qingguo 4096 May 14 23:22 project2
常用选项:
chown
只有root权限可以使用该指令
chgrp
umask
功能: 查看或修改文件掩码
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z a1]$ touch a.txt
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z a1]$ mkdir a
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z a1]$ ll
total 4
drwxrwxr-x 2 qingguo qingguo 4096 May 19 00:13 a
-rw-rw-r-- 1 qingguo qingguo 0 May 19 00:13 a.txt
可以看到目录是775,文件是664,你的linux的默认权限或许和我不一样,这就涉及到权限掩码了。
首先,文件与目录是有起始权限的:
普通文件的起始权限是0666,也就是rw-rw-rw-
目录文件的起始权限是0777,也就是rwxrwxrwx
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z a1]$ umask
0002
假设默认权限是mask,则实际创建的出来的文件权限是:
mask & ~umask
也就是先对掩码二进制按位取反,在按位与mask
我们这里掩码是002,换成二进制就是000 000 010,按位取反就是111 111 101
文件默认权限是666,换成二进制:110 110 110,二者按位与就是110 110 100,即664
同理,对目录默认权限是111 111 111,按位与就是111 111 101,即775
修改掩码:umask 权限值
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ umask 0001
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ umask
0001
粘滞位
背景故事
- 提出问题:
在实际操作中,我们会有这样的需求:几个人一起搞一个大项目,那这时文件的读写可执行三项权限就都要放开,那我们如何实现这一要求
- 解决方案:
普通用户都会默认在home文件目录下创建自己的一些列文件,他们之间是无法相互访问的,要改变权限就要更改home目录的属性(但这样一来,所有普通用户都可以互相访问,可能有坏人搞事情),或者在根目录下 新建一个目录供大家使用,而该目录是开放了所有权限的
- 但是, 问题来了~~
这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉?
权限t
- 超级管理员删除 (至高神好吧~)
- 该文件的所有者删除
再谈目录权限:
-
读权限
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll -d project2
d-wxrwxrwx 3 qingguo qingguo 4096 May 19 12:02 project2
可以发现,现在没有了读权限,也就是说我们无法查看目录下的内容
指令验证:
发现确实ll指令和tree指令都无法访问project2
d-wxrwxrwx 3 qingguo qingguo 4096 May 19 12:02 project2
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ ll project2
ls: cannot open directory project2: Permission denied
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ tree ./
./
├── project1 [error opening dir]
├── project2 [error opening dir]
- 写指令
我们删除了project2的写权限,赋予它读取和执行权限
发现在project2里面、更改文件名、删除文件、添加文件、转移文件全部被驳回
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ chmod 577 project2
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z ~]$ cd project2
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ touch a.txt
touch: cannot touch ‘a.txt’: Permission denied
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ mkdir a
mkdir: cannot create directory ‘a’: File exists
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ rm a.out
rm: cannot remove ‘a.out’: Permission denied
[qingguo@iZf8z6fhz4n89uhtqx9ey6Z project2]$ mv a.out a.x
mv: cannot move ‘a.out’ to ‘a.x’: Permission denied
- 可执行权限
我们可以发现,在失去了可执行权限后,我们无法通过cd指令进如文件
除此之外,使用ll或tree查询文件内容也失败了,而且既然进不去文件,那肯定无法在里面执行增加、删除文件的操作了。因为他们二者的执行都要建立在可以进入文件的基础上!!!
今天学习了linux的权限知识以及相关指令,下去一定要好好练习哦。