理解Linux文件所属组:C API (linux 文件所属组 c api)

在Linux系统中,不光每个文件都有一个所有者(owner),还有一个所属组(group)的概念。所属组指的是文件所在的组,在文件访问管理中担任着重要角色。一些操作,比如读取、写入和执行,都需要通过组的定义来授权文件访问。在Linux系统中,C语言也提供了API来处理文件所属组的操作,开发者可以使用这些API来进行文件访问控制的编程。

本文将介绍Linux系统中的文件所属组概念,以及C语言API如何为文件访问提供了支持。

Linux中文件所属组的概念

在Linux中,每个文件都有一个所有者和一个所属组。所有者一般指的是文件创建者或拥有者,可以理解为文件的主人。所有者默认拥有对文件的所有访问权限。每个文件所属组也是一个标识符(ID),可以是一个用户组或其他类型的组。组成员可以被授权在文件级别上进行访问。如果一个组具有执行权限,组中的任何成员都可以执行该文件。

对于大多数Linux系统管理员来说,文件访问权限是一个非常熟悉的主题。权限由三个分组控制:文件所有者、文件所属组以及其他人。每个分组都可以分别授予读取(r)、写入(w)和执行(x)的权限。这些权限的合理分配及控制可以保护文件安全,并鼓励文件共享。

C语言API中的文件所属组支持

Linux系统提供了访问文件所述组的多个工具和API,包括C语言API。C语言是一种面向过程的语言,有着非常丰富的文件访问API,并支持对文件所属组的操作。以下是C API中的几个实现:

1. getgid(): 获取进程的实际组ID。

2. getegid(): 获取进程的有效组ID。

3. setgid(): 设置进程的组ID,只有超级用户有权限改变组ID。

4. setegid(): 设置进程的有效组ID,并返回之前的值。

5. getgroups(): 获取进程所在的所有组ID。

6. setgroups(): 设置进程的所有组ID。

使用这些API可以实现对文件访问控制的编程。在C语言API中,可以使用组ID或者组名来获取或设置文件所属组。系统会在文件中存储文件所有者及其所在组的信息。

下面是一段C API的示例代码:

“`

#include

#include

#include

#include

#include

#include

int mn(int argc, char** argv) {

// 文件所有者

uid_t owner_uid = getuid();

// 文件所属组

gid_t owner_gid = getgid();

// 获取当前进程的有效组ID

gid_t process_egid = getegid();

// 打印文件信息

printf(“Owner UID=%d GID=%d\n”, owner_uid, owner_gid);

printf(“Effective GID=%d\n”, process_egid);

return 0;

}

“`

在这个例子中,使用了几个C语言API函数获取了文件所有者、所属组以及当前进程的有效组ID。这些信息可以实现编程时对文件访问的权限管理。

相关问题拓展阅读:

  • Linux下的umask、特殊权限与ACL权限

Linux下的umask、特殊权限与ACL权限

在了解到Linux系统上的文件目录权限,有时候你会发现为什么刚创建的文件是

-rw-r–r–

这个权限,目录是

drwxr-xr-x

权限,有些是

-rwsr-xr-x

,又有些是

drwsrws–T

?这些则与umask、特殊权限有关。

什么是umask?umask一般是用在你初始创建一个目录或者文件的时候赋予他们的权限。它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般在/etc/profile、

或用户家目录下的.bash_profile或.profile中设置umask值。

默认的umask是0022,0022四个数字代表是赋值初始化准备丢弃的权限。(相对应文件来说,x权限就算没说明出来丢弃一样必须默认丢弃)

  之一个0代表suid 丢弃的权限;

  第二个0代表本文件/目录拥有者什么权限都没丢弃;

  第三个2代表本文件/目录的用户组丢弃了w权限;

  第四个2代表本文件/目录的文件/目录的用户组丢弃了w权限。

  一般我们会这样表示:

umask +default permission(默认权限) =777(目录)/666(文件)

但存在特殊情况如果把umask设为135呢?

要了解特殊权限需对安全上下文有一个概念:

前提:进程有属主和属组;文件有属主和属组

(1) 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限

(2) 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组

(3) 进程访问文件时的权限,取决于进程的发起者

(a) 进程的发起者,同文件的属主:则应用文件属限

(b) 进程的发起者,属于文件属组;则应用文件属组权限

(c) 应用文件“其它”权限

1.SUID 权限仅对二进制程序(binary program)有效;

2.执行者对于该程序需要具有x 的可执行权限;

3.本权限仅在执行该程序的过程中有效(run-time);

4.执行者将具有该程序拥有者(owner) 的权限。

5.SUID设置在目录上无意义

权限设定:

chmod u+s FILE…

chmod u-s FILE…

s 标志在文件拥有者的x 项目为SUID,那s 在群组的x 时则称为Set GID

# ls -l /usr/bin/locate

-rwx–s–x. 1 root slocateJun/usr/bin/locate

与SUID 不同的是,SGID 可以针对文件或目录来设定!如果是对文件来说, SGID 有如下的功能:

-1.SGID 对二进制程序有用;

-2.程序执行者对于该程序来说,需具备x 的权限;

-3.执行者在执行的过程中将会获得该程序群组的支持!

# ll /usr/bin/locate /var/lib/mlocate/mlocate.db

-rwx–s–x. 1 root slocateJun/usr/bin/locate

-rw-r—–. 1 root slocateJun 15 03:44 /var/lib/mlocate/mlocate.db

与SUID 非常的类似,使用xiaoming 这个账号去执行locate 时,那xiaoming将会取得slocate 群组的支持, 因此就能够去读取 mlocate.db 。

SGID 也能够用在目录上,这也是非常常见的一种用途

目录设定了SGID 的权限后,他将具有如下的功能:

-1. 用户若对于此目录具有r 与x 的权限时,该用户能够进入此目录;

-2.用户在此目录下的有效群组(effective group)将会变成该目录的群组;

-3.用途:若用户在此目录下具有w 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同。

这个 Sticky Bit, SBIT 目前只针对目录有效,sticky 设置在文件上无意义。SBIT 对于目录的作用是:

-1.当用户对于此目录具有w, x 权限,亦即具有写入的权限时;

-2.当用户在该目录下建立文件或目录时,仅有自己与root 才有权力删除该文件

SUID/SGID/SBIT 权限设定

-rwSrwSrwT 1 root root 0 Jun 16 02:53 test

设定权限成为 -rws–x–x 的模样:

# chmod u=rwxs,go=x test; ls -l test

-rws–x–x 1 root root 0 Jun 16 02:53 test

承上,加上 SGID 与 SBIT 在上述的文件权限中!

# chmod g+s,o+t test; ls -l test

-rws–s–t 1 root root 0 Jun 16 02:53 test

1】ACL 是Access Control List 的缩写,主要的目的是在提供传统的owner,group,others 的read,write,execute 权限之外的细部权限设定。ACL 可以针对单一使用者,单一文件或目录来进行

ACL 主要可以针以下来控制权限呢:

1.使用者 (user):可以针对使用者来设定权限;

2.群组 (group):针对群组为对象来设定其权限;

3.默认属性(mask):还可以针对在该目录下在建立新文件/目录时,规范新数据的默认权限;

及1.ACL:Access Control List,实现灵活的权限管理;2.CentOS7默认创建的xfs和ext4文件系统具有ACL功能;3.CentOS7之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加tune2fs –o acl/dev/sdb1

mount –o acl/dev/sdb1 /mnt/test

4.ACL生效顺序:所有者,自定义用户,自定义组,其他人

为多用户或者组的文件和目录赋予访问权限rwx

2】ACL 的设定技巧: getfacl, setfacl

-x :删除后续的 acl 参数,不可与 -m 合用;

-b :移除『所有的』 ACL 设定参数;

-k :移除『预设的』 ACL 参数,

-R :递归设定 acl ,亦即包括次目录都会被设定起来;

-d :设定『预设 acl 参数』的意思!只对目录有效,在该目录新建的数据会引用此默认值

例:# touch acl_test1

# ll acl_test1

-rw-r–r–. 1 root root 0 Jul 21 17:33 acl_test1

# setfacl -m u:xiaoming:rx acl_test1

# ll acl_test1

-rw-r-xr–+ 1 root root 0 Jul 21 17:33 acl_test1

# setfacl -m u::rwx acl_test1

# ll acl_test1

-rwxr-xr–+ 1 root root 0 Jul 21 17:33 acl_test1

设定值中的 u 后面无使用者列表,代表设定该文件拥有者

2.getfacl 指令用法余setfacl一样

例:# getfacl acl_test1

file: acl_test1 acl.txt

setfacl -R -b /tmp/dir1

清除dir目录的ACL权限

setfacl -R –set-file=acl.txt /tmp/dir1

setfacl –restore acl.txt

linux 文件所属组 c api的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux 文件所属组 c api,理解Linux文件所属组:C API,Linux下的umask、特殊权限与ACL权限的信息别忘了在本站进行查找喔。

香港服务器首选树叶云,2H2G首月10元开通。
树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/189952.html<

(0)
管理的头像管理
上一篇2025-03-31 10:44
下一篇 2025-03-31 10:45

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注