Linux权限

shell命令以及运行原理

1、大部分指令就是文件
2、用户执行某种功能的时候,不是直接让操作系统执行对应的指令的,而是先交给外壳程序
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

  • 将使用者的命令翻译给核心(kernel)处理。
  • 同时,将核心的处理结果翻译给使用者。

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
bash基本都会给我们创建一个子进程,帮用户进行命令行解释,bash只要进行等待就行了。
创建子进程,让子进程进行执行


shell和bash的关系?

shell是外壳程序统称,bash其中一种

Linux权限的概念

Linux下有两种用户:超级用户(root)、普通用户

  • 超级用户:可以再linux系统下做任何事情,不受限制
  • 普通用户:在linux下做有限的事情。

超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略)
建议:普通用户和root密码不要设置成一样的
普通->root

[wt@ikun ~]$ su   #变成toot,所处路径不会发生变化
Password: 
[root@ikun wt]# whoami
root
[root@ikun wt]# exit   #ctrl+d退回去
[wt@ikun ~]$ su -      #重新登陆,家目录变成root的家目录
Password: 
Last login: Mon Jun 17 09:47:09 CST 2024 on pts/0
[root@ikun ~]# pwd
/root

root->普通
直接su 同户名就行,不用输密码

[root@ikun ~]# whoami
root
[root@ikun ~]# ls /home
wt
[root@ikun ~]# su wt

不变成root,想以root的身份执行一个工作?

指令提权

[wt@ikun dir]$ touch normal.txt
[wt@ikun dir]$ ll
total 0
-rw-rw-r-- 1 wt wt 0 Jun 17 10:06 normal.txt  #第一个wt:拥有者
[wt@ikun dir]$ sudo touch root.txt  #指令提权
[sudo] password for wt: 
[wt@ikun dir]$ ll
total 0
-rw-rw-r-- 1 wt   wt   0 Jun 17 10:06 normal.txt
-rw-r--r-- 1 root root 0 Jun 17 10:12 root.txt   #拥有者变成root+

为什么sudo对指令进行提权的时候,输入的是自己的密码?(默认云服务器不行)

默认普通用户无法执行sudo

Linux权限管理

文件访问者

拥有者:文件和文件目录的所有者u—User
所属组:一般自成一组,文件和文件目录的所有者所在的组的用户g—Group
others:匹配完前两个就是others,o—Others
Linux具有组的概念,主要是在多人协作的时候更好地进行权限管理

文件类型和访问权限

文件的属性权限一般三种:
r,读
w,写
x,可执行权限
在这里插入图片描述
第一位:文件类型
随后9位,三三一组:分别为拥有者权限所属组权限other权限
之后分别是硬链接 拥有者 所属组 文件大小 文件创建或最近修改时间 文件名
权限 = 用户角色(具体的人)+ 文件权限属性
第一个字符:是否具有权限,是就是r,否则就是-
第二个字符:是否具有权限,是就是w,否则就是-
第一个字符:是否具有可执行权限,是就是x,否则就是-


文件类型
Linux不通过后缀区分文件类型,但是Linux上的工具区分
并不代表gcc不需要
Linux!=gcc
推荐使用后缀

[wt@0xcccccccc dir]$ cat test.txt
#include <stdio.h>

int main()
{
    printf{"hello Linux\n"};
    return 0;
}
[wt@0xcccccccc dir]$ gcc test.txt
test.txt: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status
[wt@0xcccccccc dir]$ mv test.txt test.c
[wt@0xcccccccc dir]$ gcc test.c
[wt@0xcccccccc dir]$ ./a.out
hello Linux

通过ls -l第一个属性列区分

d:文件夹
-:普通文件,文本文件、可执行程序、库等
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备) printf(“%d”,123); 屏幕上打印的是字符,显示器本质就是字符设备
s:套接口文件

[wt@0xcccccccc dir]$ ls /dev/vda -l
brw-rw---- 1 root disk 253, 0 Jan 20 12:00 /dev/vda

显示器文件

[wt@0xcccccccc dir]$ ls /dev/pts -l
total 0
crw--w---- 1 wt   tty  136, 0 Jun 28 12:51 0
c--------- 1 root root   5, 2 Jan 20 12:00 ptmx

在这里插入图片描述
管道文件
进程间通信

[wt@0xcccccccc dir]$ mkfifo pipe
[wt@0xcccccccc dir]$ ll
total 0
prw-rw-r-- 1 wt wt 0 Jun 28 13:25 pipe
-rw-rw---- 1 wt wt 0 Jun 17 13:31 test.txt

如何理解x?
可执行权限vs可执行
能执行=具有可执行权限+你就是一个可执行文件

[wt@0xcccccccc dir]$ ll
total 16
-rwxrwxr-x 1 wt wt 8360 Jun 28 13:50 a.out
prw-rw-r-- 1 wt wt    0 Jun 28 13:25 pipe
-rw-rw---- 1 wt wt   76 Jun 28 13:49 test.c
[wt@0xcccccccc dir]$ chmod u+x test.c
[wt@0xcccccccc dir]$ ll
total 16
-rwxrwxr-x 1 wt wt 8360 Jun 28 13:50 a.out
prw-rw-r-- 1 wt wt    0 Jun 28 13:25 pipe
-rwxrw---- 1 wt wt   76 Jun 28 13:49 test.c
[wt@0xcccccccc dir]$ ./test.c
./test.c: line 3: syntax error near unexpected token `('
./test.c: line 3: `int main()'

没有权限也不行

[wt@0xcccccccc dir]$ gcc test.c
[wt@0xcccccccc dir]$ ll
total 16
-rwxrwxr-x 1 wt wt 8360 Jun 28 14:09 a.out
prw-rw-r-- 1 wt wt    0 Jun 28 13:25 pipe
-rw-rw---- 1 wt wt   78 Jun 28 14:09 test.c
[wt@0xcccccccc dir]$ ./a.out
hello Linux
[wt@0xcccccccc dir]$ chmod a-x a.out
[wt@0xcccccccc dir]$ ll
total 16
-rw-rw-r-- 1 wt wt 8360 Jun 28 14:09 a.out
prw-rw-r-- 1 wt wt    0 Jun 28 13:25 pipe
-rw-rw---- 1 wt wt   78 Jun 28 14:09 test.c
[wt@0xcccccccc dir]$ ./a.out
-bash: ./a.out: Permission denied
[wt@0xcccccccc dir]$ chmod a+x a.out
[wt@0xcccccccc dir]$ ll
total 16
-rwxrwxr-x 1 wt wt 8360 Jun 28 14:09 a.out
prw-rw-r-- 1 wt wt    0 Jun 28 13:25 pipe
-rw-rw---- 1 wt wt   78 Jun 28 14:09 test.c

文件访问权限的相关设置方法

chown

功能:修改文件的拥有者
格式chown 用户名 文件名
实例
chown user1 f1
chown -R user1 filegroup1


普通用户修改文件所有者只能sudo,强制给
root不受权限约束

[wt@0xcccccccc dir]$ ll
total 0
-r--r--r-- 1 wt wt 0 Jun 17 13:31 test.txt
[wt@0xcccccccc dir]$ chown root test.txt
chown: changing ownership of ‘test.txt’: Operation not permitted
[wt@0xcccccccc dir]$ sudo chown root test.txt
[sudo] password for wt: 
[wt@0xcccccccc dir]$ ll
total 0
-r--r--r-- 1 root wt 0 Jun 17 13:31 test.txt
[wt@0xcccccccc dir]$ sudo chgrp root test.txt
[wt@0xcccccccc dir]$ ll
total 0
-r--r--r-- 1 root root 0 Jun 17 13:31 test.txt
[wt@0xcccccccc dir]$ sudo chown wt:wt test.txt
[wt@0xcccccccc dir]$ ll
total 0
-r--r--r-- 1 wt wt 0 Jun 17 13:31 test.txt
[wt@0xcccccccc dir]$ sudo chown wt:root test.txt
[wt@0xcccccccc dir]$ ll
total 0
-r--r--r-- 1 wt root 0 Jun 17 13:31 test.txt
[wt@0xcccccccc dir]$ sudo chown wt:wt test.txt
[wt@0xcccccccc dir]$ ll
total 0
-r--r--r-- 1 wt wt 0 Jun 17 13:31 test.txt

chown name filename
chgrp name filename
chown name1:name2 filename

chgrp

功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
实例
chgrp users /abc/f2

chmod

功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项

  • -R :递归修改目录文件的权限
  • 说明:只有文件的拥有者和root才可以改变文件的权限

chmod 八进制 filename

[wt@0xcccccccc dir]$ ll
total 0
-r--r--r-- 1 wt wt 0 Jun 17 13:31 test.txt
[wt@0xcccccccc dir]$ chmod 000 test.txt
[wt@0xcccccccc dir]$ ll
total 0
---------- 1 wt wt 0 Jun 17 13:31 test.txt
[wt@0xcccccccc dir]$ chmod 660 test.txt
[wt@0xcccccccc dir]$ ll
total 0
-rw-rw---- 1 wt wt 0 Jun 17 13:31 test.txt

用户符号

  • u:拥有者
  • g:拥有者同组用
  • o:其它用户
  • a:所有用户

权限操作符

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限

一个文件的权限谁能修改?

  • a.文件的拥有者
  • b.root

chmod设置权限的方式
chmod 用户符号+/-/=rwx 文件名

[wt@ikun dir]$ ll
total 0
-rw-rw-r-- 1 wt wt 0 Jun 17 13:31 test.txt
[wt@ikun dir]$ chmod u-r test.txt
[wt@ikun dir]$ ll
total 0
--w-rw-r-- 1 wt wt 0 Jun 17 13:31 test.txt
[wt@ikun dir]$ chmod u-w test.txt
[wt@ikun dir]$ ll
total 0
----rw-r-- 1 wt wt 0 Jun 17 13:31 test.txt
[wt@ikun dir]$ chmod u+rw test.txt
[wt@ikun dir]$ ll
total 0
-rw-rw-r-- 1 wt wt 0 Jun 17 13:31 test.txt
[wt@ikun dir]$ chmod u-w,g-w test.txt
[wt@ikun dir]$ ll
total 0
-r--r--r-- 1 wt wt 0 Jun 17 13:31 test.txt

权限对比:

  • 对于普通用户自身要受到对应权限的约束,即便这个文件是自己的
  • root不受权限约束的
  • 当拥有者权限---所属组权限rw-且是同一普通用户时,不能进行读写,因为对用户身份进行识别,只识别一次
    当拥有者和所属组的用户不一致时,所属组就可以读写了

目录的权限

  • 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.
  • 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
  • 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.(无法增删改
[wt@0xcccccccc dir]$ mkdir mydir
[wt@0xcccccccc dir]$ ll
total 20
-rwxrwxr-x 1 wt wt 8360 Jun 28 14:09 a.out
drwxrwxr-x 2 wt wt 4096 Jun 28 14:41 mydir
prw-rw-r-- 1 wt wt    0 Jun 28 13:25 pipe
-rw-rw---- 1 wt wt   78 Jun 28 14:09 test.c
[wt@0xcccccccc dir]$ chmod u-r mydir
[wt@0xcccccccc dir]$ ll
total 20
-rwxrwxr-x 1 wt wt 8360 Jun 28 14:09 a.out
d-wxrwxr-x 2 wt wt 4096 Jun 28 14:41 mydir
prw-rw-r-- 1 wt wt    0 Jun 28 13:25 pipe
-rw-rw---- 1 wt wt   78 Jun 28 14:09 test.c
[wt@0xcccccccc dir]$ cd mydir
[wt@0xcccccccc mydir]$ pwd
/home/wt/dir/mydir
[wt@0xcccccccc mydir]$ ls
ls: cannot open directory .: Permission denied
[wt@0xcccccccc mydir]$ touch a.txt
[wt@0xcccccccc mydir]$ ls
ls: cannot open directory .: Permission denied
[wt@0xcccccccc mydir]$ cd ..
[wt@0xcccccccc dir]$ ll
total 20
-rwxrwxr-x 1 wt wt 8360 Jun 28 14:09 a.out
d-wxrwxr-x 2 wt wt 4096 Jun 28 14:43 mydir
prw-rw-r-- 1 wt wt    0 Jun 28 13:25 pipe
-rw-rw---- 1 wt wt   78 Jun 28 14:09 test.c
[wt@0xcccccccc dir]$ chmod u+r,u-w mydir
[wt@0xcccccccc dir]$ ll
total 20
-rwxrwxr-x 1 wt wt 8360 Jun 28 14:09 a.out
dr-xrwxr-x 2 wt wt 4096 Jun 28 14:43 mydir
prw-rw-r-- 1 wt wt    0 Jun 28 13:25 pipe
-rw-rw---- 1 wt wt   78 Jun 28 14:09 test.c
[wt@0xcccccccc dir]$ cd mydir
[wt@0xcccccccc mydir]$ ls
a.txt
[wt@0xcccccccc mydir]$ touch test.c
touch: cannot touch ‘test.c’: Permission denied
[wt@0xcccccccc mydir]$ touch test1.c
touch: cannot touch ‘test1.c’: Permission denied
[wt@0xcccccccc mydir]$ mv a.c b.c
mv: cannot stat ‘a.c’: No such file or directory
[wt@0xcccccccc mydir]$ rm a.c
rm: cannot remove ‘a.c’: No such file or directory
[wt@0xcccccccc mydir]$ cd ..
[wt@0xcccccccc dir]$ ll
total 20
-rwxrwxr-x 1 wt wt 8360 Jun 28 14:09 a.out
dr-xrwxr-x 2 wt wt 4096 Jun 28 14:43 mydir
prw-rw-r-- 1 wt wt    0 Jun 28 13:25 pipe
-rw-rw---- 1 wt wt   78 Jun 28 14:09 test.c
[wt@0xcccccccc dir]$ chmod u+w,u-x mydir
[wt@0xcccccccc dir]$ ll
total 20
-rwxrwxr-x 1 wt wt 8360 Jun 28 14:09 a.out
drw-rwxr-x 2 wt wt 4096 Jun 28 14:43 mydir
prw-rw-r-- 1 wt wt    0 Jun 28 13:25 pipe
-rw-rw---- 1 wt wt   78 Jun 28 14:09 test.c
[wt@0xcccccccc dir]$ cd mydir
-bash: cd: mydir: Permission denied

umask

功能:查看或修改文件掩码
新建文件夹默认权限=0666
新建目录默认权限=0777

[wt@0xcccccccc dir]$ umask
0002
[wt@0xcccccccc dir]$ 

但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & (~umask)
格式umask 权限值
默认掩码值可以更改

[wt@0xcccccccc dir]$ umask 0000
[wt@0xcccccccc dir]$ umask
0000
[wt@0xcccccccc dir]$ touch file1
[wt@0xcccccccc dir]$ mkdir dir
[wt@0xcccccccc dir]$ ll
total 4
drwxrwxrwx 2 wt wt 4096 Jun 28 17:40 dir1
-rw-rw-rw- 1 wt wt    0 Jun 28 17:40 file1

说明:创建文件的时候,要从起始权限中,过滤掉(不是简单的减法)在umask中出现的权限。超级用户默认掩码值为0022,普通用户默认为0002
删除一个文件和目标文件有关系吗?没关系
和所在的目录有关系,由目录的拥有者决定

在这里插入图片描述
能不能删文件取决于用户在该文件所在目录有没有写权限

粘滞位

实现文件共享不能在用户家目录下
粘滞位是为目录设置的
当一个目录被设置为"粘滞位"(用chmod +t+目录),则该目录下的文件只能由

1、超级管理员删除
2、该目录的所有者删除
3、该文件的所有者删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值