《深度剖析 Linux 权限管理:从基础到进阶,解锁系统安全密钥》
一、权限管理
1.1 普通权限(普通文件和目录)
[root@md ~]# ll
total 124
drwxr-xr-x. 2 root root 28 Feb 16 15:48 :
drwxr-xr-x. 3 root root 64 Mar 9 00:22 111
-rw-r--r--. 1 root root 43 Feb 17 22:44 1.txt
1 2 3 4 5 6 7
1 这个部分包括文件类型、所属者权限、其他人权限、控制列表权限
2 文件的硬链接数
3 文件所属者,即文件的创建者
4 文件的所属组
5 文件的大小,单位为字节
6 文件最后一次修改时间,月份 日期 时间
7 文件名/目录名称
d rwx r-x r-x .
1 2 3 4 51 表示文件的类型- 普通文件d 目录l 链接文件b 块设备文件c 字符设备文件p 管道文件s 套接字文件2 表示文件所属者的权限,可以用u(user)表示- 代表无权限r 表示读,对文件来说就是可以查看文件的内容,对于目录来说就是列出目录下的目录或者文件。w 如果是文件表示可以操作内容,如果是目录表示可以创建删除目录中的任意文件x 如果是文件表示可执行,如果是目录表示可切换3 表示文件所属者的权限,可以用g(group)表示- 代表无权限r 表示读,对于文件来说就是查看文件的内容,对于目录来说就是列出目录下的目录或者文件。w 如果是文件表示可以操作内容,如果是目录表示可以创建删除目录中的任意文件x 如果是文件表示可执行,如果是目录表示可切换4 表示其他用户的权限,(既不是所属者,也不是所属组中的用户)的权限,可以用o (other)表示- 代表无权限r 表示读,对于文件来说就是查看文件的内容,对于目录来说就是列出目录下的目录或者文件。w 如果是文件表示可以操作内容,如果是目录表示可以创建删除目录中的任意文件x 如果是文件表示可执行,如果是目录表示可切换u是所有者、g是所有组、o是其他人、a是u+g+o5 用来表示是否有一个可替换的访问控制措施应用在该文件上。当为一个空格时,表示系统没有可替换的访
问控制措施,当为"."字符时,代表该文件使用了SEinux安全上下文,且未使用其他的访问控制措施;当
为“+”字符时,表示该文件在使用SElinux安全上下文的同时,还混用了其他访问控制措施(如:访问控制列表
ACL)
对比项目 | 目录 | 文件 | 数字表示 |
---|---|---|---|
r | 可以列出目录内容(ls) | 可以查看文件具体的内 容(cat、less、 head、tail) | 4 |
w | 可以在该目录下创建或者删除目录和文件(mkdir、 touch、rm)(只有w权限无法创建删除文件,需要和x 权限一起使用) | 可以往文件写入具体的内容(echo) | 2 |
x | 可以切换到该目录(cd) | 可以执行该文件(sh) | 1 |
- | 没有权限 | 没有权限 | 0 |
1.2 修改文件和目录权限
chmod
:修改文件或者目录权限
常用选项:
选项 | 功能 |
---|---|
-R | 表示递归修改指定目录下所有文件及其子目录的权限 |
示例:
#===========修改文件的权限,感受r、w、x权限对于文件的作用===========================
#root用户
[root@md ~]# touch /tmp/root.txt
[root@md ~]# ll /tmp/root.txt
-rw-r--r--. 1 root root 0 Apr 8 17:56 /tmp/root.txt
[root@md ~]# echo this is a root > /tmp/root.txt
[root@md ~]# cat /tmp/root.txt
this is a root#redhat用户
[redhat@md ~]$ ll /tmp/root.txt
-rw-r--r--. 1 root root 15 Apr 8 17:57 /tmp/root.txt
[redhat@md ~]$ cat /tmp/root.txt #redhat用户可以查看文件
this is a root
[redhat@md ~]$ echo this is txt > /tmp/root.txt #redhat无法写入文件
-bash: /tmp/root.txt: Permission denied #拒绝许可#root用户
[root@md ~]# chmod o+w /tmp/root.txt #给root.txt文件的其他人(第三组)位置上添加w权限。
[root@md ~]# ll /tmp/root.txt
-rw-r--rw-. 1 root root 15 Apr 8 17:57 /tmp/root.txt #该文件的其他人(第三组)位置上的权限从r--变成了rw#redhat用户
[redhat@md ~]$ echo this is redhat >> /tmp/root.txt #此时redhat用户进行写入文件
[redhat@md ~]$ cat /tmp/root.txt
this is a root
this is redhat------------------------------------------------------------------------------------------------
#root用户
[root@md ~]# chmod o-r /tmp/root.txt #给root.txt文件的其他人(第三组)位置上减去r的权限
[root@md ~]# ll /tmp/root.txt
-rw-r---w-. 1 root root 30 Apr 8 18:03 /tmp/root.txt #该文件的其他人(第三组)位置上的权限从rw-变成了-w-。#redhat用户
[redhat@md ~]$ cat /tmp/root.txt #此时redhat用户不能cat root.txt文件
cat: /tmp/root.txt: Permission denied
[redhat@md ~]$ tail /tmp/root.txt #此时redhat用户不能head root.txt文件
tail: cannot open '/tmp/root.txt' for reading: Permission denied
[redhat@md ~]$ head /tmp/root.txt #此时redhat用户不能tail root.txt文件
head: cannot open '/tmp/root.txt' for reading: Permission denied#root用户
[root@md ~]# chmod u= /tmp/root.txt #修改root.txt文件的所有者(第一组)位置上的权限为---
[root@md ~]# ll /tmp/root.txt
----r---w-. 1 root root 30 Apr 8 18:03 /tmp/root.txt
[root@md ~]# chmod u+r /tmp/root.txt #给root.txt文件的所有者(第一组)位置上添加r的权限
[root@md ~]# chmod u=rw /tmp/root.txt #让root.txt文件的所有者(第一组)位置上的权限为rw-
[root@md ~]# ll /tmp/root.txt
-rw-r---w-. 1 root root 30 Apr 8 18:03 /tmp/root.txt
[root@md ~]# chmod u=r /tmp/root.txt #让root.txt文件的所有者(第一组)位置上的权限为r--
[root@md ~]# ll /tmp/root.txt
-r--r---w-. 1 root root 30 Apr 8 18:03 /tmp/root.txt
[root@md ~]# chmod g=rw /tmp/root.txt #让root.txt文件的所有组(第二组)位置上的权限为rw-
[root@md ~]# ll /tmp/root.txt
-r--rw--w-. 1 root root 30 Apr 8 18:03 /tmp/root.txt
[root@md ~]# chmod a= /tmp/root.txt #让root.txt文件的所属者、所属组、其他用户位置上的权限为---
[root@md ~]# ll /tmp/root.txt
----------. 1 root root 30 Apr 8 18:03 /tmp/root.txt
[root@md ~]# chmod +r /tmp/root.txt #+r前面没有字母,指的是所有,即u+g+o
[root@md ~]# ll /tmp/root.txt
-r--r--r--. 1 root root 30 Apr 8 18:03 /tmp/root.txt
[root@md ~]# chmod u=rw,g=r,o=rwx /tmp/root.txt #让root.txt文件的所有者(第一组)位置上的权限为rw-,所属组(第二组)位置上的权限为r--,其他人(第三组)位置上的权限为rwx。
[root@md ~]# ll /tmp/root.txt
-rw-r--rwx. 1 root root 30 Apr 8 18:03 /tmp/root.txt#==========================修改文件的权限,感受r、w、x权限对于目录的作用======================================
[root@md ~]# mkdir /tmp/dir
[root@md ~]# echo this is root > /tmp/dir/root.txt
[root@md ~]# ll /tmp/dir/ -d
drwxr-xr-x. 2 root root 22 Apr 8 18:16 /tmp/dir/#root用户
[root@md ~]# ls /tmp/dir/
root.txt
[root@md ~]# mkdir /tmp/dir/dir2
[root@md ~]# ls /tmp/dir/
dir2 root.txt#redhat用户
[redhat@md ~]$ ll /tmp/dir/ -d
drwxr-xr-x. 3 root root 34 Apr 8 18:18 /tmp/dir/
[redhat@md ~]$ ls /tmp/dir/ #redhat可以查看目录
dir2 root.txt
[redhat@md ~]$ cd /tmp/dir/ #redhat可以移动到dir目录下
[redhat@md dir]$ pwd
/tmp/dir
[redhat@md dir]$ touch /tmp/dir/redhat.txt #redhat不能再dir目录下创建文件
touch: cannot touch '/tmp/dir/redhat.txt': Permission denied
[redhat@md dir]$ rm -rf /tmp/dir/dir2 #redhat不能删除dir下的目录和文件
rm: cannot remove '/tmp/dir/dir2': Permission denied
---------------------------------------------------------------------------------------------------------
#修改权限 root用户
[root@md ~]# chmod 757 /tmp/dir/
[root@md ~]# ll /tmp/dir/ -d
drwxr-xrwx. 3 root root 34 Apr 8 18:18 /tmp/dir/#redhat用户
[redhat@md dir]$ rm -rf /tmp/dir/root.txt #此时redhat可以删除dir下的文件
[redhat@md dir]$ rm -rf /tmp/dir/dir2/ #此时redhat可以删除dir下的目录
[redhat@md dir]$ ll /tmp/dir/
total 0
----------------------------------------------------------------------------------------------------------
[root@md ~]# chmod u=- /tmp/dir/ -R #递归修改dir目录下的文件或者子目录的u的权限为---
[root@md ~]# ll /tmp/dir/
total 0
d---r-xr-x. 2 root root 6 Apr 8 18:26 dir2
----r--r--. 1 root root 0 Apr 8 18:26 root.txt
文件可能出现的权限 | 目录可能出现的权限 |
---|---|
—、r–、r-x、rw-、rwx | —、r-x、rwx |
1.3 修改文件和目录的所属组和所属主
chown
: 修改文件和目录的属主和属组。
常用选项:
选项 | 功能 |
---|---|
-R | 表示递归修改指定目录下所有文件及其子目录的属主和属组 |
示例:
[root@md ~]# ll /tmp/root.txt
-rw-r--rwx. 1 root root 30 Apr 8 18:03 /tmp/root.txt
[root@md ~]# chown redhat /tmp/root.txt #修改root.txt文件的所属主为redhat
[root@md ~]# chown .redhat /tmp/root.txt #修改root.txt文件的所属组为redhat
[root@md ~]# ll /tmp/root.txt
-rw-r--rwx. 1 redhat redhat 30 Apr 8 18:03 /tmp/root.txt
[root@md ~]# chown root:root /tmp/root.txt #将root.txt文件的所属组和所属者一块改为root
[root@md ~]# chown root.root /tmp/root.txt #将root.txt文件的所属组和所属者一块改为root
[root@md ~]# ll /tmp/root.txt
-rw-r--rwx. 1 root root 30 Apr 8 18:03 /tmp/root.txt
[root@md ~]# chgrp redhat /tmp/root.txt #修改root.txt文件的所属组为redhat
[root@md ~]# ll /tmp/root.txt
-rw-r--rwx. 1 root redhat 30 Apr 8 18:03 /tmp/root.txt
1.4 FACL权限
FACL权限:针对某一个用户,某一个组进行权限控制。
1.4.1 设置查看FACL权限
setfacl
: 设置facl权限
getfacl
:查看facl权限
常用选项:
选项 | 功能 |
---|---|
-m | 添加facl权限 |
-x | 删除指定facl权限 |
-b | 删除所有的facl权限 |
示例:
==========================================设置facl权限之前==============================================
#root用户
[root@md ~]# ll /tmp/root.txt #root.txt文件其他人(第三组位置)的权限为r- -
-rw-r--r--. 1 root redhat 30 Apr 8 18:03 /tmp/root.txt
#redhat用户
[redhat@md ~]$ echo this is redhat >> /tmp/root.txt
-bash: /tmp/root.txt: Permission denied==========================================设置facl权限之后==============================================
[root@md ~]# setfacl -m u:redhat:rw /tmp/root.txt #给root.txt文件添加facl权限。给redhat用户添加rw权限。这个时候其他用户只能读root.txt文件,而redhat用户可以读写这个文件。
[root@md ~]# getfacl /tmp/root.txt
getfacl: Removing leading '/' from absolute path names
# file: tmp/root.txt
# owner: root
# group: redhat
user::rw-
user:redhat:rw- #指定redhat用户的权限为rw-
group::r--
mask::rw-
other::r--#redhat用户
[redhat@md ~]$ echo this is redhat >> /tmp/root.txt
[redhat@md ~]$ cat /tmp/root.txt
[redhat@md ~]$ ll /tmp/root.txt #有了facl权限之后,该文件权限最后有个+。
-rw-rw-r--+ 1 root redhat 45 Apr 8 18:44 /tmp/root.txt#root用户
[root@md ~]# setfacl -m u:xiaomei:rw /tmp/root.txt
[root@md ~]# getfacl /tmp/root.txt
getfacl: Removing leading '/' from absolute path names
# file: tmp/root.txt
# owner: root
# group: redhat
user::rw-
user:redhat:rw-
user:xiaomei:rw-
group::r--
mask::rw-
other::r--
[root@md ~]# setfacl -b /tmp/root.txt #-b删除所有的FACL权限
[root@md ~]# getfacl /tmp/root.txt
getfacl: Removing leading '/' from absolute path names
# file: tmp/root.txt
# owner: root
# group: redhat
user::rw-
group::r--
other::r--
1.5 特殊权限
在Linux中,用户对文件或目录的访问权限除了r、w、x这三种一般权限外,还有SUID (Set User ld) . SGID (Set Group ld) . Sticky Bit(粘滞位)三种特殊权限,用于对文件或目录进行更加灵活且方便的访问控 制。
1.5.1 SUID权限(二进制文件)
程序运行起来之后会形成进程,进程所属的用户属于运行该程序的用户。SUID可以让进程所属的用户属于该程序的用户.
**格式:**chmod u+s 文件(此文件不是普通文件)
示例:
===========================================添加suid权限前========================================
#root用户
[root@md ~]# ll /etc/shadow #shadow文件的其他人位置的权限为---
----------. 1 root root 2259 Apr 10 00:00 /etc/shadow
[root@md ~]# which cat #查看cat命令所在路径
/usr/bin/cat
[root@md ~]# ll /usr/bin/cat #查看cat命令文件的权限
-rwxr-xr-x. 1 root root 36496 Aug 16 2024 /usr/bin/cat#redhat用户
[redhat@md ~]$ cat /etc/shadow #redhat用户不能cat shadow文件
cat: /etc/shadow: Permission denied
===========================================添加suid权限后========================================
#root用户
[root@md ~]# chmod u+s /usr/bin/cat #给cat文件添加suid权限
[root@md ~]# ll /usr/bin/cat #查看cat命令文件的权限
-rwsr-xr-x. 1 root root 36496 Aug 16 2024 /usr/bin/cat#redhat用户
[redhat@md ~]$ cat /etc/shadow #添加suid权限之后可以cat shadow文件。
root:$6$rounds=100000$v33DLWqazVgfrlFe$0oTizdVABMuPeweuykNzFwAKbjpHI1kjsKtj9UJiyN8ruczMQxLqJW4WqYx1jREK/QBfLmQkhmzRJKxeL/Vtg.:20187:0:99999:7:::
bin:*:19760:0:99999:7:::
daemon:*:19760:0:99999:7:::
adm:*:19760:0:99999:7:::
lp:*:19760:0:99999:7:::
sync:*:19760:0:99999:7:::
shutdown:*:19760:0:99999:7:::
halt:*:19760:0:99999:7:::
mail:*:19760:0:99999:7:::
#同理 给head命令添加suid权限
#root用户
[root@md ~]# which head
/usr/bin/head
[root@md ~]# chmod u+s /usr/bin/head #redhat用户
[redhat@md ~]$ cat /etc/shadow
root:$6$rounds=100000$v33DLWqazVgfrlFe$0oTizdVABMuPeweuykNzFwAKbjpHI1kjsKtj9UJiyN8ruczMQxLqJW4WqYx1jREK/QBfLmQkhmzRJKxeL/Vtg.:20187:0:99999:7:::
bin:*:19760:0:99999:7:::
daemon:*:19760:0:99999:7:::
adm:*:19760:0:99999:7:::
lp:*:19760:0:99999:7:::
sync:*:19760:0:99999:7:::
shutdown:*:19760:0:99999:7:::
halt:*:19760:0:99999:7:::
mail:*:19760:0:99999:7:::
默认有suid权限的命令:/usr/bin/passwd、/usr/bin/su、/usr/bin/sudo。
1.5.2 SGID权限(目录)
SGID权限可以让某个用户在某一个目录下创建文件或者目录的时候,使该文件或者目录的所属组为该目 录的所属组。
**格式:**chmod g+s 目录
示例:
========================================添加sgid权限之前==================================================
#root用户
[root@md ~]#
[root@md ~]# mkdir /tmp/dir123
[root@md ~]# ll /tmp/dir123 -d
drwxr-xr-x. 2 root root 6 Apr 10 00:18 /tmp/dir123
[root@md ~]# chmod o+w /tmp/dir123
[root@md ~]# ll /tmp/dir123 -d
drwxr-xrwx. 2 root root 6 Apr 10 00:18 /tmp/dir123
[root@md ~]# #redhat用户
[redhat@md ~]$ touch /tmp/dir123/redhat.txt#xiaomei用户
[xiaomei@md ~]$ touch /tmp/dir123/lisi.txt#root用户
[root@md ~]# ll /tmp/dir123/
total 0
-rw-r--r--. 1 xiaomei redhat 0 Apr 10 00:21 lisi.txt #xiaomei.txt的所有者是xiaomei,所属组是redhat
-rw-r--r--. 1 redhat redhat 0 Apr 10 00:21 redhat.txt #redhat.txt的所有者和所属组都是redhat
========================================添加sgid权限之后==================================================
#root用户
[root@md ~]# chmod g+s /tmp/dir123/ #给dir123目录添加sgid权限。
[root@md ~]# ll /tmp/dir123/ -d #查看目录权限
drwxr-srwx. 2 root root 40 Apr 10 00:21 /tmp/dir123/ #该dir123目录的所有组(第二组)位置上多了s权限。#redhat用户
[redhat@md ~]$ touch /tmp/dir123/redhat1.txt#xiaomei用户
[xiaomei@md ~]$ touch /tmp/dir123/xiaomei.txt
[root@md ~]# ll /tmp/dir123/
total 0
-rw-r--r--. 1 xiaomei redhat 0 Apr 10 00:21 lisi.txt
-rw-r--r--. 1 redhat root 0 Apr 10 00:26 redhat1.txt #redhat1.txt文件的所属组为root。和dir123目录的所属组一致
-rw-r--r--. 1 redhat redhat 0 Apr 10 00:21 redhat.txt
-rw-r--r--. 1 xiaomei root 0 Apr 10 00:26 xiaomei.txt #xiaomei.txt文件的所属组为root。和dir123目录的所属组一致===============================================取消sgid权限================================================
[root@md ~]# ll /tmp/dir123/ -d
drwxr-srwx. 2 root root 78 Apr 10 00:26 /tmp/dir123/
[root@md ~]# chmod g-s /tmp/dir123/
[root@md ~]# ll /tmp/dir123/ -d
drwxr-xrwx. 2 root root 78 Apr 10 00:26 /tmp/dir123/
1.5.3 Skicky Bit权限(SBIT权限,目录)
用户可以删除其他用户在同一个目录下创建的文件,如果在该目录的其他人添加t权限就可以阻止删除。
**格式:**chmod o+t 目录
示例:
==========================================添加sbit权限之前=============================================
#root用户
[root@md ~]# ll /tmp/dir123/ -d
drwxr-xrwx. 2 root root 78 Apr 10 00:26 /tmp/dir123/
[root@md ~]# ll /tmp/dir123/
total 0
-rw-r--r--. 1 xiaomei redhat 0 Apr 10 00:21 lisi.txt
-rw-r--r--. 1 redhat root 0 Apr 10 00:26 redhat1.txt
-rw-r--r--. 1 redhat redhat 0 Apr 10 00:21 redhat.txt
-rw-r--r--. 1 xiaomei root 0 Apr 10 00:26 xiaomei.txt#redhat用户
[redhat@md ~]$ rm -f /tmp/dir123/xiaomei.txt #redhat用户可以删除xiaomei用户创见的文件#root用户
[root@md ~]# ll /tmp/dir123/
total 0
-rw-r--r--. 1 xiaomei redhat 0 Apr 10 00:21 lisi.txt
-rw-r--r--. 1 redhat root 0 Apr 10 00:26 redhat1.txt
-rw-r--r--. 1 redhat redhat 0 Apr 10 00:21 redhat.txt
==========================================添加sbit权限之后=============================================
#xiaomei用户
[xiaomei@md ~]$ touch /tmp/dir123/xiaomei.txt #xiaomei用户重新创建xiaomei.txt文件#root用户
[root@md ~]# ll /tmp/dir123/
total 0
-rw-r--r--. 1 xiaomei redhat 0 Apr 10 00:21 lisi.txt
-rw-r--r--. 1 redhat root 0 Apr 10 00:26 redhat1.txt
-rw-r--r--. 1 redhat redhat 0 Apr 10 00:21 redhat.txt
-rw-r--r--. 1 xiaomei redhat 0 Apr 10 00:33 xiaomei.txt
[root@md ~]# chmod o+t /tmp/dir123/ #给dir123目录添加sbit权限。
[root@md ~]# ll /tmp/dir123/ -d #dir123目录的其他人位置上有t权限。
drwxr-xrwt. 2 root root 78 Apr 10 00:33 /tmp/dir123/#redhat用户
[redhat@md ~]$ rm -f /tmp/dir123/xiaomei.txt #此时redhat用户无法删除xiaomei用户创建的文件
rm: cannot remove '/tmp/dir123/xiaomei.txt': Operation not permitted==========================================添加sbit权限之后=============================================
[root@md ~]# ll /tmp/dir123/ -d
drwxr-xrwt. 2 root root 78 Apr 10 00:33 /tmp/dir123/
[root@md ~]# chmod o-t /tmp/dir123/
[root@md ~]# ll /tmp/dir123/ -d
drwxr-xrwx. 2 root root 78 Apr 10 00:33 /tmp/dir123/
1.6 提权
**sudo :**可以允许普通用户以超级用户(或其他用户)身份执行命令。也就是提升权限
**visudo :**命令可以安全的编辑sudoers 文件(/etc/sudoers)
示例:
#root用户
[root@md ~]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 36496 Aug 16 2024 /usr/bin/cat
[root@md ~]# ll /etc/shadow #shadow文件的其他人位置没有任何权限
----------. 1 root root 2259 Apr 10 00:00 /etc/shadow#redhat用户
[redhat@md ~]$ cat /etc/shadow #所以此时redhat用户不能cat 查看/etc/shadow文件
cat: /etc/shadow: Permission denied==========================普通用户使用sudo命令之前,需要在sudoers文件中添加相对应的用户==========================
#root用户
[root@md ~]# vim /etc/sudoers
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
redhat ALL=(ALL) ALL #添加这一行内容
#注意:redhat ALL=(root) /usr/bin/cat 如果添加的是这一行,redhat用户只能由用cat的权限#redhat用户
[redhat@md ~]$ sudo cat /etc/shadow
[sudo] password for redhat: #输入redhat用户的密码
root:$6$rounds=100000$v33DLWqazVgfrlFe$0oTizdVABMuPeweuykNzFwAKbjpHI1kjsKtj9UJiyN8ruczMQxLqJW4WqYx1jREK/QBfLmQkhmzRJKxeL/Vtg.:20187:0:99999:7:::
bin:*:19760:0:99999:7:::
daemon:*:19760:0:99999:7:::
adm:*:19760:0:99999:7:::
lp:*:19760:0:99999:7:::
sync:*:19760:0:99999:7:::
1.7 umask
umask:设置新建文件或目录的默认权限
在Linux系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分配默认的权限,该 默认权限与umask值有关,其具体关系是:
新建文件的默认权限=0666-umask值
新建目录的默认权限=0777-umask值
注意:不直接用数字减,先转换成字母
示例:
===================================================文件=================================================
新建文件的默认权限=0 6 6 6 - 0 0 2 2rw- rw- rw- --- -w- -w- --> rw- r-- r--[root@md ~]# umask 查看当前的umask值
0022
[root@md ~]# ll file
-rw-r--r--. 1 root root 0 Apr 10 00:51 file----------------------------------------------------------------------------------------------------------
[root@md ~]# umask 0011 #设置umask为0011
[root@md ~]# umask #查看
0011
新建文件的默认权限=0 6 6 6 - 0 0 1 1rw- rw- rw- --- --x --x --> rw- rw- rw-
[root@md ~]# touch file2 #此时新建file2文件的权限为rw-rw-rw-
[root@md ~]# ll file2
-rw-rw-rw-. 1 root root 0 Apr 10 00:53 file2
相关文章:
《深度剖析 Linux 权限管理:从基础到进阶,解锁系统安全密钥》
一、权限管理 1.1 普通权限(普通文件和目录) [rootmd ~]# ll total 124 drwxr-xr-x. 2 root root 28 Feb 16 15:48 : drwxr-xr-x. 3 root root 64 Mar 9 00:22 111 -rw-r--r--. 1 root root 43 Feb 17 22:44 1.txt 1 2 …...
2025年4月9日-华为暑期实习-第一题-100分
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 软件依赖链分析系统 问题描述 LYA 是某软件公司的工程师,负责管理公司的软件依赖关系。每个软件组件都有可能依赖于其他组件,形成一个依赖链。为了确保系统的稳定性,LYA 需要…...
leetcode 377. Combination Sum IV
这道题也是完全背包问题。这道题和第518题几乎一摸一样,所不同的是,第518题要求的是组合数,而第377题要求的是排列数。虽然本题题目描述中说求的是组合数,但从例子1中(1,1,2)和&…...
【TS学习】(22)什么是混入
在 TypeScript 中,混入(Mixins) 是一种设计模式,用于将多个类的功能组合到一个类中。它是一种实现代码复用的方式,尤其适用于需要从多个来源继承功能的场景。TypeScript 不直接支持多继承,但可以通过混入模…...
Firebase Studio,谷歌推出的云端AI 开发环境
Firebase Studio 是谷歌推出的一款基于云的全栈应用开发环境,旨在帮助开发者高效构建和交付集成 AI 功能的高质量应用。该平台结合了 Project IDX 和专用的 Firebase AI 代理,提供从后端到前端、移动应用等多维度的开发支持。 Firebase Studio是什么 F…...
电能质量在线监测分析装置支持实时监测、数据存储及远程传输,适用于电网、工业等场景
电能质量在线监测分析装置主要技术指标 2.1工作电源 交流:220V10% ;50Hz0.5Hz;谐波畸变率不大于15% 直流:220V10%,纹波系数不大于5% 2.2电流信号输入 输入方式:电流互感器输入; …...
线代[13]|线性代数题37道以及数学分析题3道(多图预警)
博主首次发布于CSDN,禁止转载!(CSDN:汉密士2025) 文章目录 一、缘起|《俗说矩阵》课程目录照片存档|线性代数学习脉络|线代习题集封面存档|未来——我与线性代数的纠缠 二…...
gitlab内置pgsql数据库迁移
gitlab内置pgsql数据库迁移 创建gitlab备份方法一,使用pg_dump备份方法二 使用gitlab工具 gitlab-backup 备份 运行sql文件注意事项ERROR: extension "btree_gist" has no installation script nor update path for version "1.7"btree_gist 找…...
IDEA、Webstorm使用账号密码登录Gitlab
在开发过程中,为了保证代码安全,更改了gitlab司库的密码,当更新项目时,发现更新失败了。让填入access_token,gitlab网页设置中虽然generate了token,也填入了它,但是还是报错401unauthorized&…...
水利水电安全员ABC适合哪些人考?
水利水电安全员证是水利工程建设领域的重要职业资格证书,主要涉及水利水电工程施工安全管理、风险防控和应急处理等工作。那么,哪些人适合考取? 哪些人适合考水利水电安全员? 1. 水利水电工程从业人员 ✅ 施工管理人员…...
Service Mesh 深度解析与 Istio+Envoy 实现方案
Service Mesh 深度解析与 IstioEnvoy 实现方案 一、Service Mesh 技术全景 核心架构演进 第一代架构:以库形式集成(如 Netflix OSS)第二代架构:Sidecar 代理模式(如 Linkerd)第三代架构:全功…...
使用uv管理python项目环境
安装uv 使用默认python环境安装uv(把uv安装到默认python环境):pip install uv 创建python项目虚拟环境 如果是已有项目并且项目中有uv.lock文件,直接运行 uv run main.py,这会默认使用uv.lock文件创建虚拟环境如果是新…...
【Code】《代码整洁之道》笔记-Chapter9-单元测试
第9章 单元测试 过去十年以来,编程专业领域进步很大。1997年时,没人听说过测试驱动开发。对于我们之中的大多数人来说,单元测试是那种用来确保程序“可运行”的用过即扔的短代码。我们辛勤地编写类和方法,再弄出一些特殊代码来测…...
数据结构-顺序表
目录 基本概念 什么是数据结构? 数据 结构 线性结构 树形结构 网状结构 第一章绪论 了解概念 几个概念 数据存储方式: 算法的五个重要特性: 算法设计的要求: 总结 线性表 线性表的定义: 顺序表的设计思想 定长顺序表 不定…...
端到端语音识别服务重构方案
以下是重构ASR服务架构,集成Whisper V3Conformer混合模型的端到端实现方案,经过技术增强与流程优化: 端到端语音识别服务重构方案 基于Whisper V3Conformer混合架构 系统架构设计 采用四层微服务架构,支持水平扩展与模块化部署…...
耳根圆通与禅定的交融与分野
引言 在浩瀚的修行体系中,耳根圆通与禅定的关系犹如月映千江——本质同一而显相各异。本文以《楞严经》为经教依据,结合禅宗心法与现代实证视角,系统解析二者在修行原理、实践路径与终极旨归中的深刻关联与微妙差异,揭示这一古老智…...
python基础语法:缩进规则
Python 的缩进规则是其语法的重要组成部分,它通过缩进来表示代码块的层次结构,而不是像其他语言(如 C 或 Java)那样使用大括号 {}。以下是 Python 缩进规则的详细说明: 1. 缩进的基本规则 代码块的标识:Pyt…...
从0到1的Python接口自动化学习路线
Python 是一门非常适合初学者且功能强大的编程语言,它在接口自动化测试领域具有广泛应用。 以下是一份针对 Python 与接口自动化测试的详细学习路线,帮助你从零开始学习并逐步掌握相关知识。 第一阶段:Python基础 目标:掌握 Python 基本语法和编程能力。 一、学习内容 1.…...
大数据(7.3)Kafka量子安全加密实践指南:构建抗量子计算攻击的消息系统
目录 一、量子计算带来的加密革命1.1 量子计算机的威胁时间表1.2 Kafka现有加密机制脆弱性分析 二、后量子加密算法选型2.1 NIST标准化算法矩阵2.2 混合加密最佳实践 三、Kafka量子安全改造方案3.1 Bouncy Castle量子安全Provider3.2 Kafka服务端配置 四、实战案例:…...
【11408学习记录】英语语法精讲:主从复合句之状语从句全解析——以时间状语从句为例
时间 英语语法总结—— 主从复合句状语从句从句位置从句的分类 每日一句词汇第一步:找谓语第二步:断开第三步:简化第一句第二句第三句第四句 英语 语法总结—— 主从复合句 状语从句 状语从句指的是一个句子作状语,表达“描述性…...
深度分页及优化建议
深度分页的定义 深度分页是指在分页查询中,当用户请求非常靠后的页面时,数据库需要处理大量数据,导致查询性能显著下降的情况。例如,一个查询结果有 100 万条记录,而用户要查询第 999 页(每页 10 条记录&a…...
阿里云kafka集成boot在docker启动找不到kafka.client.truststore.jks文件问题
此问题困扰了我好久,看阿里云官方文档,建议配置绝对路径,但项目部署在docker没有绝对路径,开始以为配置在docker的/root下即可,但报找不到文件,后来改相对路径 ./kafka.client.truststore.jks,…/…/还是找…...
kafka 集群搭建,开启sasl认证
Kafka提供了多种认证方式来保护集群的安全性,包括以下几种常见的认证方式: SSL/TLS认证:Kafka支持使用SSL/TLS协议对网络通信进行加密和认证。通过使用SSL/TLS证书对客户端和服务器进行身份验证,可以确保通信的机密性和完整性。SASL/PLAIN认证:SASL/PLAIN是一种基于用户名…...
在 iOS 项目中,Info.plist文件用于配置应用的基本信息和权限
在 iOS 项目中,Info.plist 文件用于配置应用的基本信息和权限。以下是常见的需要添加的权限及其说明: 常见权限及说明 NSCameraUsageDescription 说明: 说明应用为何需要访问相机。示例: “我们需要访问您的相机以便您可以拍摄照片。”NSPhotoLibraryUsageDescription 说明:…...
【完整可用】使用openhtmltopdf生成PDF(带SVG)
文章目录 前言OpenHTMLToPDF 简介maven配置依赖字体文件demo代码其他资源放置截图防止maven编译字体文件 前言 AI和网上都是跑不起来或者版本过低的,还有各种BUG的。本文都是查阅官方文档得出的。如果你能跑起来请给个大大的赞! OpenHTMLToPDF 简介 Ope…...
仿照管理系统布局配置
1.vue仿照snowy 配置,如下图: 2.代码实现 <template><div class"theme-settings"><!-- 导航栏 --><div class"nav-bar"><el-breadcrumb separator"/"><el-breadcrumb-item>导航设置…...
RLAgent note
OpenManus github LlamaGym github GRPO 实践 知乎:Deepseek R1 Zero成功复现 BabyAGI 0,环境 CUDA版本12.X:nvcc -V python 3.10:python -V gcc 11:gcc -V 1,安装llama-cpp-python [git | docs]…...
Python设计模式-工厂模式
一、模式定义与核心思想 工厂模式(Factory Pattern)属于创建型设计模式,其核心思想是通过一个"工厂类"来创建对象,而不是直接调用类的构造函数。这种模式将对象的实例化过程封装起来,使系统在实例化对象时能…...
Vue环境搭建:vue+idea
目录 第一章、Vue环境搭建:安装node2.1)node的下载2.2)配置node的环境变量2.3)常见的npm命令 第二章、使用idea创建vue工程2.1)在IDEA中设置国内镜像2.2)在IDEA中进行脚手架安装2.3)在IDEA中创建…...
庙算兵推:使用Streamlit框架构建了一个智能作战推演系统。
这段代码是一个完整的军事模拟应用,使用Streamlit框架构建了一个智能作战推演系统。该系统包括了三维地图显示、作战单位管理、应急事件处理等功能。用户可以通过界面控制推演的开始和暂停,调整时间加速倍率,并查看实时的战斗情况和系统状态。…...
APIGen-MT:高效生成多轮人机交互Agent数据的两阶段框架
APIGen-MT:高效生成多轮人机交互数据的两阶段框架 引言 随着人工智能技术的飞速发展,AI代理(Agent)已从简单的聊天机器人发展为能够执行复杂现实任务的系统,例如管理金融交易、安排预约和处理客户服务等。然而&#x…...
02-redis-数据结构实现原理
1、redis整体涉及的结构 在redis中整体是KV键值对的方式进行访问的,redis的查询的时间复杂度O(1),底层的数据结构其实跟java中的HashMap底层实现类似,整体采用的是数组链表的实现方式,哈希冲突的时候使用的是链表法解决࿱…...
京华幻梦:科技自然共生诗篇
故事摘要 故事发生在现代中国北京,展现了未来城市的奇幻景象与科技变革。在这个充满想象的未来世界里,科技与自然不再对立,而是达成了和谐共生的美妙平衡。故宫、鸟巢、798艺术区等标志性地点,在科技的赋能下焕发新的生机&#x…...
python:面向对象之包
1.包的定义: 包就是把有联系的模块组织在一起,即放在同一文件夹下,并且在这个文件夹下创建一个__init__.py文件,这个文件就叫做包。 2.包的创建: 创建好好会自动生成一个__init__.py文件。 3.包的调用: …...
spring boot整合redis
spring boot整合redis 步骤: ① 引入redis依赖 <dependency><groupId>org.springframework.boot</group><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>②在application.yml配置文件中,…...
DIA——边缘检测
1.边缘 边缘是像素的突变位置。 2.常见边缘检测算法 通过找到一阶导数的极值点或者二阶导数的过零点来确定边缘像素的位置。边缘检测通常使用算子,即特定的卷积核。通过差分对离散的像素点求导,然后转化成卷积核进行卷积。使用卷积统一涵盖求导&…...
redis 免安装版本 启动方法 windows 安装包
redis 免安装版本 启动方法 windows 安装包 下载解压直接使用 百度网盘连接如下 链接:https://pan.baidu.com/s/1W4ICvdUUxkWPhK93GtdG0Q 提取码:vzw3 下载解压后会用32位和64位两种,根据自己的电脑选择 cmd命令 cd /d D:\yaochengwei\so…...
C语言练习二 进制转换
#include <stdio.h>// 强制类型转换int main(){int i 5;float j i / 2; // 只是把整形先除了 再赋值float k (float)i / 2; //先强制改成float 再赋值printf("%f\n",j);printf("%f\n",k);return 0; } #include <stdio.h> int main(){int…...
AlDente Pro for Mac电脑 充电限制保护工具
AlDente Pro for Mac电脑 充电限制保护工具 一、介绍 AlDente Pro for Mac,是一款充电限制保护工具,是可以限制最大充电百分比来保护电池的工具。锂离子和聚合物电池(如 MacBook 中的电池)在40% 至 80% 之…...
物联网卡(NB-IoT/4G)技术详解
物联网卡(IoT SIM卡)是专为物联网设备设计的流量卡,支持NB-IoT、4G Cat.1等低功耗广域网络(LPWAN),广泛应用于智能烟感、共享设备、车联网等领域。以下是NB-IoT和4G物联网卡的对比与选型指南。 1. NB-IoT v…...
HTML5 Video (视频) 深入解析
一、引言 在当今的互联网时代,视频已经成为网站内容中不可或缺的一部分。从产品介绍、教程演示到娱乐内容,视频以其生动直观的特点吸引着大量用户。HTML5 的出现,为在网页上展示视频提供了一个标准且强大的解决方案,改变了过去依赖插件(如 Flash)来显示视频的局面。 二…...
NO.87十六届蓝桥杯备战|动态规划-完全背包|疯狂的采药|Buying Hay|纪念品(C++)
完全背包 先解决第⼀问 状态表⽰: dp[i][j]表⽰:从前i个物品中挑选,总体积不超过j,所有的选法中,能挑选出来的最⼤价 值。(这⾥是和01背包⼀样哒) 那我们的最终结果就是dp[n][V] 。状态转移⽅…...
Win11企业版安装wsl遇到的坑
起因是windows11上安装了docker desktop,但是启动以后显示Docker Engine stopped,一顿搜索。 可以参考:windows 11系统下打开docker 提示 docker engine stopped - DbWong_0918 - 博客园 我这边主要是检查了第2点,开启windows h…...
C++手撕单链表及逆序打印
在学习数据结构的过程中,链表是一个非常重要的基础数据结构。今天,我们将通过C手动实现一个单链表,并添加一个逆序打印的功能,帮助大家更好地理解链表的实现和操作。 一、链表简介 链表是一种线性数据结构,其中每个元…...
Kubernetes外部etcd集群的快速Docker Compose 部署
一、背景 在高可用 Kubernetes 部署中,需要单独部署外部 etcd 集群,而不是使用 kubeadm 默认在 master 节点上部署的 etcd。以下是关于这一配置场景的详细记录。 二、etcd简介 etcd 是一个高可用的分布式键值存储系统,主要用于存储和管理配…...
docker的目录挂载与卷映射
文章目录 一、目录挂载背景定义使用 二、卷映射背景定义区别使用docker对卷的操作 一、目录挂载 背景 上一文,我们提了docker exec进入容器修改页面很麻烦,所以在这里,我们学习一个新的容器使用方法,叫“目录挂载” 定义 长话…...
十三种物联网/通信模块综合对比——《数据手册--物联网/通信模块》
物联网/通信模块 名称 功能 应用场景 USB转换模块 用于将USB接口转换为其他类型的接口,如串口、并口等,实现不同设备之间的通信。 常用于计算机与外部设备(如打印机、扫描仪等)的连接,以及数据传输和设…...
IntelliJ IDEA 中安装和使用通义灵码 AI 编程助手教程
随着人工智能技术的发展,AI 编程助手逐渐成为提升开发效率的强大工具。通义灵码是阿里云推出的一款 AI 编程助手,它能够帮助开发者实现智能代码补全、代码解释、生成单元测试等功能,极大地提升了编程效率和代码质量。 IntelliJ IDEA 是一款广…...
工业 IOT 平台重塑锂电龙头数字化未来
在 “双碳” 目标驱动下,新能源锂电池产业正经历前所未有的扩张期。作为全球原材料领域的龙头企业,某锂电巨头在国内布局的多个生产基地却陷入 “成长的烦恼”:车间里工人忙着手工录入数据,设备运行状态靠纸质报表传递,…...
蓝牙连接hci 命令和事件的交互
参考:在HCI层看蓝牙的连接过程_hci 获取蓝牙pin码-CSDN博客 我这边查看的是core 5.2 一、数据交互流程 1、ACL连接建立后的可选流程 参考蓝牙core5.2: vol2 --> PartF --> 4 1.1 AUTHENTICATION REQUESTED Authentication can be explicitly executed at …...