Linux 目录和文件权限总结

本文介绍了Linux文件权限的基本概念,包括文件类型的标识、读写执行权限及其数字表示,以及如何使用chmod、chown和chgrp命令修改权限。接着,针对VSCode远程调试时遇到的权限问题,详细解释了如何通过设置特殊权限(setuid)解决。最后,讨论了默认文件和目录权限,以及umask如何影响新建文件的权限。通过示例代码展示了umask的工作原理。
摘要由CSDN通过智能技术生成

目录

一、文件权限简介

二、利用特殊权限实现普通用户通过 VSCode 远程调试

三、默认文件和目录权限


一、文件权限简介

当我们使用ll或ls查看某个文件或者目录的信息时,第一列就会显示出它的权限设置,一共有十个字符,

第1个字符用来表示文件类型,目录是d,链接是l,普通文件是-;接下来的 9 个字符,3个为一组,共三组,分别表示文件所有组,文件所有者所在的群组成员,其他成员的权限,其中权限有三种:r、w、x分别代表读、写、执行。如果是用数字表示,对应的值分别为4,2,1;

假如文件权限为:-rwx rwx rwx,转换为八进制值为777。

对于普通文件来说,每种权限对应的操作:

权限

文件

目录

r

可以读取文件内容

可以显示出目录的内容

w

可以修改文件内容

可以新增、删除目录下的文件

x

可以执行文件

可以进入目录

可以使用chown(修改所有者)、chgrp(修改所属组)、chmod(修改文件权限)来修改文件或者目录的权限。

二、利用特殊权限实现普通用户通过VSCode远程调试

其中还有一些特殊权限:比如chmod +s,可以在文件执行时把进程的属主或组ID置为该文件的文件属主。

在使用VSCode调试远程代码时,需要使用到 /usr/bin/gdb,但是一般VSCode使用普通用户打开了文件目录,所以在调试时,就会报错权限不足,网上搜到的解决方法有:

1、在自己目录下新建个shell脚本,内容为:

#!/bin/sh sudo /usr/bin/gdb "$@"

但是需要输入密码,如果配置了免密登录,这个会直接报错,读取密码错误;

2、修改/etc/sudoers文件,在里面配置普通用户(vscode远程连接的用户)免密码,但是我试了后也没有生效;

3、最终的解决办法是 sudo chmod +s /usr/bin/gdb

这样普通用户执行/usr/bin/gdb时,就会成为该可执行文件的所有者,从而具有可执行权限。

三、默认文件和目录权限

Linux 平台下文件的最大权限是666(-rw-rw-rw-), 文件夹的最大权限是777(-rwxrwxrwx)

当我们新建一个目录或者文件时,j假设我们设置的新建文件权限为666(mode)真正创建出来的文件或者文件夹权限是通过mode & ~umask得到的。

umask是用来设置限制文件权限的掩码,在Linux下直接使用umask命令可以查看当前用户的掩码值。

默认普通用户umask值为0002(-----w-),也就是会去掉其他用户的写权限。

root用户umask值为0022,也就是会去掉本组用户和其他用户的写权限。

测试代码如下:

#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>

int main() {
  //umask(0);  //将umask值设置为0000,实际创建的文件权限即为下面的mode值
  // 438为十进制的666,两者都可以
  if (open("/home/yang/workspace/other/file.txt", O_WRONLY | O_APPEND | O_CREAT,
           438) < 0) {
    printf("文件创建失败!\n");
  }
  return 0;
}

代码执行后的结果:

-rw-rw-r-- 1 yang yang 0 Jun 8 11:49 ./file.txt

此时其他用户就是不可写的,如果想要把文件改为其他用户也可写,需要把umask(0)加上。

-rw-rw-rw- 1 yang yang 0 Jun 8 11:52 ./file.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值