一.前言
今天我们来讲讲linux的权限管理,比如文件的权限,如果大家看过前面说的app逆向的frida,我们在手机里要给frida,我们都要设置一下chomd 777 frida ,这样就给了可执行权限,这就是这一章要讲的,但是大多也还是作为一个知识的了解。
二.权限介绍和示例
root用户权限最高,所以一般对他不做什么权限设置。其他用户就要设定权限并且遵守权限了。
文件权限:
2.1 文件权限
#文件属性
[root@localhost ~]# ls -l /tmp/123.txt
-rw-r--r--. 1 root root 0 7月 20 23:17 /tmp/123.txt
#第一段的第一个字符,表示文件类型 -文件、d目录、l软链接(对应着windows快捷方式)、b块设备(ls /dev,可以看到硬盘sda等)
#第一段第2-4字符,表示该文件所属用户的权限
#第一段第5-7字符,表示该文件所属用户组的权限
#第一段第8-10字符,表示其他用户对该文件的权限
r 4 代表读权限 read
w 2 代表写权限 write
x 1 代表可执行权限 executable
- 0 空权限位,表示没有这个权限,9位权限不能少,没有的权限就用-代替。
权限值表
0 ---
1 --x
2 -w
3 -wx
4 r--
5 r-x
6 rw-
7 rwx
ugo权限体系:
rw- r-- r--
user group other
三.可执行程序特殊目录说明
通过echo $PATH可以看到,类似于windows的环境变量中的PATH。反式放到这个目录中的命令程序, 我们可以在任意目录下通过这个命令程序名称来直接调用命令来执行:
例如
[lisi@localhost tmp]$ echo $PATH # 下面这几个就是环境变量路径存放位置
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lisi/.local/bin:/home/li si/bin lisi@localhost tmp]$ cp ./ls /home/lisi/bin/
[lisi@localhost tmp]$ ls /home/lisi/bin/ ls
[lisi@localhost tmp]$ mv /home/lisi/bin/ls /home/lisi/bin/xxx # 为了不和系统默认的ls冲突,我们改名为xxx
[lisi@localhost tmp]$ ls /home/lisi/bin/
xxx
[lisi@localhost tmp]$ xxx
[lisi@localhost tmp]$ xxx # 命令可以在任意目录下直接执行
1.txt vmware-root_552-2957583561
ls
四.权限值
权限值:
r 4
w 2
x 1
- 0
权限值表
0 ---
1 --x
2--w
3 -wx
4 r--
5 r-x
6 -rw
7 rwx
修改权限举例
如果我们想将某个文件的:rwxr-xr-x权限改为--x-w-r--,如果按照前面我们chmod指定字母的形式来修 改,就比较麻烦,直接使用权限对应的数字改就很方便:
rwxr-xr-x 对应的值为:755
--x-w-r-- 对应的值为:124
[lisi@localhost tmp]$ chmod 124 1.txt
[lisi@localhost tmp]$ ls -l
总用量 144
---x-w-r--. 1 lisi lisi 25 3月 20 09:24 1.txt
别人再问你,某个文件的权限是多少的时候,我们一般都是直接报数字值,比如它的权限是755
4.1 改变文件的权限
#例如:chomd -r,就是去掉r权限,chomd +r就是加上读权限
chmod
例子1:
#修改权限之前
[test1@localhost tmp]$ ls -l
总用量 4
-rw-rw----. 1 test1 test1 8 7月 20 17:20 test1.txt
#修改权限
[test1@localhost tmp]$ chmod u+x test1.txt
#修改权限之后
[test1@localhost tmp]$ ls -l
总用量 4
-rwxrw----. 1 test1 test1 8 7月 20 17:20 test1.txt
例子2:
同时修改多个权限
[test1@localhost tmp]$ chmod u-x,g-x,o+x test1.txt
[test1@localhost tmp]$ ls -l
总用量 4
-rw-rw---x. 1 test1 test1 8 7月 20 17:20 test1.txt
例子3:数字修改更方便
[test1@localhost tmp]$ chmod 777 test1.txt
[test1@localhost tmp]$ ls -l
总用量 4
-rwxrwxrwx. 1 test1 test1 8 7月 20 17:20 test1.txt
五.修改文件所属
5.1 改变文件拥有者
chown,全称Change Owner,改变拥有者。
#修改文件的所属,普通用户是不能修改其他用户文件的所属的,需要root用户,所以先切换到root用户来操作
chown
例子1:修改所属用户和用户组,test2:test2,前面的test2表示用户,后面的test2是组[root@localhost tmp]# chown test2:test2 ls
[root@localhost tmp]# ls -l
总用量 404
-rwxr-xr-x. 1 test2 test2 159024 7月 20 17:43 grep
-rwxr-xr-x. 1 test2 test2 117608 7月 20 17:38 ls
-rwxr-xr-x. 1 test1 test1 130360 7月 20 17:43 mv
-rw-rw-rw-. 1 test1 test1 14 7月 20 17:38 test1.txt
# 修改所属用户
[root@localhost tmp]# chown test1 ls
[root@localhost tmp]# ls -l
总用量 404
-rwxr-xr-x. 1 test2 test2 159024 7月 20 17:43 grep
-rwxr-xr-x. 1 test1 test2 117608 7月 20 17:38 ls
-rwxr-xr-x. 1 test1 test1 130360 7月 20 17:43 mv
-rw-rw-rw-. 1 test1 test1 14 7月 20 17:38 test1.txt
# 修改目录权限和所属
例子3:文件夹(目录权限)
用root用户创建一个文件夹,文件夹默认所属用户和组为root:root,那么普通用户是没全限制在这个目录 中创建文件的。
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# mkdir jaden
[root@localhost tmp]# ls -l
drwxr-xr-x. 2 root root 6 3月 20 11:36 jaden
普通用户,比如lisi想在里面创建文件:
[lisi@localhost tmp]$ cd jaden/
[lisi@localhost jaden]$ touch 2.txt
touch: 无法创建"2.txt": 权限不够
如何让lisi有创建文件的权限呢?创建文件的权限就是目录写权限
首先要切换到root用户,然后用root用户修改目录权限,或者直接将目录的所属修改为lisi修改权限:
[root@localhost tmp]# chmod o+w jaden
[root@localhost tmp]# ls -l
drwxr-xrwx. 2 root root 6 3月 20 11:36 jaden
切换到lisi,创建文件:
[lisi@localhost jaden]$ touch 2.txt
[lisi@localhost jaden]$ ls
2.txt
修改所属:
[root@localhost tmp]# chmod o-w jaden
[root@localhost tmp]# ls -l
drwxr-xr-x. 2 root root 19 3月 20 11:39 jaden
[root@localhost tmp]# chown lisi:lisi jaden
[root@localhost tmp]# ls -l
drwxr-xr-x. 2 lisi lisi 19 3月 20 11:39 jaden
切换到lisi:
[lisi@localhost jaden]$ touch 3.txt
[lisi@localhost jaden]$ ls 2.txt 3.txt
lisi也可以修改目录的权限了,因为它完全属于的lisi:
[lisi@localhost tmp]$ chmod o+w jaden
[lisi@localhost tmp]$ ls -l
drwxr-xrwx. 2 lisi lisi 32 3月 20 11:42 jaden
#使用uid和gid修改文件的所属用户和所属用户组 属主,属组
例子2:
[root@localhost tmp]# ls
-l总用量 404
-rwxr-xr-x. 1 test2 test2 159024 7月 20 17:43 grep
-rwxr-xr-x. 1 test1 test2 117608 7月 20 17:38 ls
-rwxr-xr-x. 1 test1 test1 130360 7月 20 17:43 mv
-rw-rw-rw-. 1 test1 test1 14 7月 20 17:38 test1.txt
[root@localhost tmp]# id test1
uid=1000(test1) gid=1000(test1) 组=1000(test1)
[root@localhost tmp]# id test2
uid=1001(test2) gid=1001(test2) 组=1001(test2)
[root@localhost tmp]# useradd -g test1 test3
[root@localhost tmp]# id test3
uid=1002(test3) gid=1000(test1) 组=1000(test1)
[root@localhost tmp]# chown 1001:1001 test1.txt
[root@localhost tmp]# ls -l
总用量 404
-rwxr-xr-x. 1 test2 test2 159024 7月 20 17:43 grep
-rwxr-xr-x. 1 test1 test2 117608 7月 20 17:38 ls
-rwxr-xr-x. 1 test1 test1 130360 7月 20 17:43 mv
-rw-rw-rw-. 1 test2 test2 14 7月 20 17:38 test1.txt
文件权限和目录权限的解释说明:
文件权限: rwx 读写执行
目录的权限: rwx,r表示可以查看目录下有哪些文件 x表示可以cd切换到该目录 w表示可以在目录中创 建、修改、删除文件等操作
为了安全操作: 文件权限默认: 644权限、狠一点就给600权限
目录权限默认: 755权限、狠一点就给700权限
六.文件属性详解
#文件属性
[root@localhost ~]# ls -l
-rw-rw-rw-. 1 lisi lisi 0 3月 20 16:00 222.txt
#第一段的第一个字符,表示文件类型 -文件、d目录、l软链接(对应着windows快捷方式)、b块设备(ls /dev,可以看到硬盘sda等)
#第一段第2-4字符,表示该文件所属用户的权限
#第一段第5-7字符,表示该文件所属用户组的权限
#第一段第8-10字符,表示其他用户对该文件的权限
#第一段的第11个字符. ,表示开启selinux的状态下创建的,也证明selinux是开启状态的。
# 看到.表示这个文件受到selinux的保护,selinux:https://baike.baidu.com/item/SELinux/8865268?fr=aladdin,这个东西很安全,但是有了它变 得很麻烦,安全和便利一般是冲突的。主要是红帽系的系统(redhat\centos\阿里的龙蜥\华为的欧拉)有这 个机制。我们一般上来就是关闭它,安全方面我们通过其他方法来控制。查看selinux的指令:
# 查看状态
[lisi@localhost tmp]$ sestatus
SELinux status: enabled # enabled表示开启状态,disabled表示禁用状态
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted 、
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
# 关闭和开启selinux,需要root权限才能修改
[root@localhost tmp]# ls -l /etc/selinux/config
-rw-r--r--. 1 root root 543 3月 15 20:11 /etc/selinux/config
[root@localhost tmp]# vi /etc/selinux/config
把7行改为: SELINUX=disabled #然后保存退出,并且重启系统才会生效。
# 然后再登录创建文件,查看文件信息,就看不到.了
[root@localhost ~]# touch 1.txt
[root@localhost ~]# ls -l
总用量 16
-rw-r--r-- 1 root root 0 3月 20 13:32 1.txt
#第二段的数字,表示该文件的硬链接数量,其实这个和我们的安全没有太大关系,运维人员需要学习,ln是 创建硬链接的指令。我们不提了
#第三段的字符串,表示该文件所属用户
#第四段的字符串,表示该文件所属用户组
#第五段的数字,表示该文件的大小,默认单位为B,如果想按照KB来显示,那么可以通过ls -lh指令来查 看。h是human的意思,以人类可读的方式显示,会自动按照文件大小来设定显示单位。
#第六段到倒数第二段,都是该文件的修改时间,只要改动了文件内容,这个时间就会自动变为修改文件时的时 间。
#其实linux系统会记录三个时间:
# 访问时间(access time) 文件被打开时自动变化这个时间
# 修改时间(modify time) 文件内容发生变化时自动改变这个时间,ls -l 显示的就是这个时 间。
# 改变时间(change time) 文件属性发生变化时自动改变这个时间,文件大小也是文件的属性, 所以修改文件内容导致大小变化的时候,这个时间也会自动改变。
#windows系统也会记录三个时间:访问时间、创建时间、修改时间
#linux下通过stat指令来查看:
[root@localhost ~]# stat 1.txt
文件:"1.txt"大小:0 块:0 IO 块:4096 普通空文件
设备:801h/2049d Inode:67108933 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2023-03-20 13:32:34.333042228 +0800
最近更改:2023-03-20 13:32:34.333042228 +0800
最近改动:2023-03-20 13:32:34.333042228 +0800
创建时间:-
# 我们改一下文件权限,然后再看时间
[root@localhost ~]# chmod 777 1.txt
[root@localhost ~]# stat 1.txt
文件:"1.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:801h/2049d Inode:67108933 硬链接:1
权限:(0777/-rwxrwxrwx) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2023-03-20 13:32:34.333042228 +0800
最近更改:2023-03-20 13:32:34.333042228 +0800
最近改动:2023-03-20 13:56:43.005634151 +0800 # 改动时间变了
创建时间:-
#最一段,该文v
linux一切皆文件的系统。
七.总结
今天说的就这么多,主要其实还是做个了解就好,期待大家的点赞关注收藏