`

Linux文件系统权限及用户

 
阅读更多

Linux下修改文件及目录的权限和用户

修改用户和用户组

Linux下修改文件属主可以通过如下函数进行:

#include <unistd.h>

int chown(const char *path, uid_t owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t group);
int lchown(const char *path, uid_t owner, gid_t group);

各函数描述如下:

chown:修改文件的属主,文件通过路径path指定,对于符号链接会进行解析,即如果指定的为符号链接的话,该函数会修改实际文件的属性。

fchown:修改文件的属主,文件通过文件描述符fd指定。

lchown:和chown一样,不同是它不解析符号链接,即如果指定的为符号链接的话,该函数会修改链接的属性,而不是文件的。

修改权限

Linux修改文件权限可以通过如下函数进行:

#include <sys/stat.h>

int chmod(const char *path, mode_t mode);
int fchmod(int fd, mode_t mode);

 chmod:修改文件的权限,文件通过path参数指定的路径名指定,对于符号链接会进行解析,即如果指定的式链接的话,会修改文件的权限。

fchmod:修改文件的权限,文件通过文件描述符fd参数指定。

示例代码

#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <libgen.h>
#include <pwd.h>
#include <string.h>
#include <fcntl.h>

void print_file_info(const char *filename)
{
    struct stat sb;

    if (lstat(filename, &sb) == -1) {
        printf("lstat failed. errno: %d, failed reason: %s.\n", errno, strerror(errno));
        perror("stat");
        exit(EXIT_SUCCESS);
    }

    printf("File type:                ");

    switch (sb.st_mode & S_IFMT) {
    case S_IFBLK:  printf("block device\n");            break;
    case S_IFCHR:  printf("character device\n");        break;
    case S_IFDIR:  printf("directory\n");               break;
    case S_IFIFO:  printf("FIFO/pipe\n");               break;
    case S_IFLNK:  printf("symlink\n");                 break;
    case S_IFREG:  printf("regular file\n");            break;
    case S_IFSOCK: printf("socket\n");                  break;
    default:       printf("unknown?\n");                break;
    }

    printf("I-node number:            %ld\n", (long) sb.st_ino);

    printf("Mode:                     %lo (octal)\n",
            (unsigned long) sb.st_mode);

    printf("Link count:               %ld\n", (long) sb.st_nlink);
    printf("Ownership:                UID=%ld   GID=%ld\n",
            (long) sb.st_uid, (long) sb.st_gid);

    printf("Preferred I/O block size: %ld bytes\n",
            (long) sb.st_blksize);
    printf("File size:                %lld bytes\n",
            (long long) sb.st_size);
    printf("Blocks allocated:         %lld\n",
            (long long) sb.st_blocks);
		              printf("Last status change:       %s", ctime(&sb.st_ctime));
    printf("Last file access:         %s", ctime(&sb.st_atime));
    printf("Last file modification:   %s", ctime(&sb.st_mtime));

    return;
}
  int main(int argc, char *argv[])
{
    int ret;
    int fd;
    struct passwd *pwd;

    if (argc != 3)
    {
        printf("usage: create a symbolic link from second file to first file. \n%s <source_file_name> <dest_file_name>.\n", basename(argv[0]));
        return -1;
    }

    pwd = getpwuid(getuid());
    if (NULL == pwd)
    {
        printf("getpwnam failed, errno: %d, fail reason: %s.\n", errno, strerror(errno));
        return -1;
    }
    printf("user info: \n");
    printf("user name:        %s.\n", pwd->pw_name);
    printf("user password:    %s.\n", pwd->pw_passwd);
    printf("user uid:         %d.\n", pwd->pw_uid);
    printf("user group id     %d.\n", pwd->pw_gid);
    printf("real user name:   %s.\n", pwd->pw_gecos);
    printf("home directory:   %s.\n", pwd->pw_dir);
    printf("shell program:    %s.\n", pwd->pw_shell);

    ret = symlink(argv[1], argv[2]);
    if (0 != ret)
    {
        printf("symlink failed. errno: %d, fail reason: %s.\n", errno, strerror(errno));
        //return -1;
    }
    printf("========after symlink======\n");
    print_file_info(argv[2]);

    ret = chmod(argv[2], 0644);
    if (0 != ret)
    {
        printf("chmod failed. errno: %d, fail reason: %s.\n", errno, strerror(errno));
        //return -1;
    }
    printf("========after chmod======\n");
    print_file_info(argv[2]);

    fd = open(argv[2], O_RDONLY);
    if (fd < 0)
    {
        printf("open failed. errno: %d, fail reason: %s.\n", errno, strerror(errno));
        return -1;
    }
    ret = fchmod(fd, 0755);
    if (0 != ret)
    {
        printf("fchmod failed. errno: %d, fail reason: %s.\n", errno, strerror(errno));
        return -1;
    }

    printf("========after fchmod======\n");
    print_file_info(argv[2]);

    ret = chown(argv[2], pwd->pw_uid, pwd->pw_gid);
    if (0 != ret)
    {
        printf("chown failed. errno: %d, fail reason: %s.\n", errno, strerror(errno));
        //return -1;
    }
    printf("========after chown======\n");
    print_file_info(argv[2]);

    //unlink(argv[2]);
   
    return 0;
}
 

 

分享到:
评论

相关推荐

    linux文件系统管理-权限管理(基础权限设置实验)

    本实验旨在掌握 Linux 文件系统权限的设置、Linux 用户帐号与组管理、Linux 文件共享的设置方法和权限设置方法。实验中,我们将学习如何设置权限,使得文件夹和文件可以被特定的用户或组访问和修改。 一、权限管理 ...

    LINUX修改文件权限

    ### Linux文件权限对象分类 Linux中的文件权限主要针对以下三类对象: 1. **User(文件拥有者)**:指创建文件或目录的用户,对文件具有最高的控制权。 2. **Group(文件拥有者所在组)**:除了文件拥有者之外,同...

    基于Linux操作系统文件权限的设置.pdf

    5. 文件系统安全:文件系统是 Linux 系统安全的核心,文件权限是 Linux 文件系统安全的关键。 Linux 操作系统文件权限设置的方法: 1. 文件所有者和访问权限: Linux 系统对不同用户访问同一文件的权限做了不同的...

    linux系统权限管理文件特殊权限PPT学习教案.pptx

    Linux 系统权限管理文件特殊权限是 Linux 操作系统中的一种重要机制,用于控制用户对文件和目录的访问权限。本学习教案将详细介绍 Linux 系统权限管理文件特殊权限的概念、类型、作用和使用方法。 ACL 权限 ACL...

    linux 实验报告 文件系统与文件管理.pdf

    本实验报告对 Linux 文件系统和文件管理进行了详细的介绍,包括文件系统的目录结构、文件管理命令和文件存取权限等内容。通过本实验,我们可以更好地理解 Linux 文件系统和文件管理的原理和应用。

    基于Linux操作系统文件权限的设置

    #### Linux文件权限基础 Linux系统作为一个典型的多用户环境,为了保障系统安全,它对不同用户访问同一文件的权限做出了明确规定。这种安全模型是通过为系统中的文件赋予“所有者”和“访问权限”两个属性实现的。 ...

    LINUX文件权限理解

    ### Linux 文件权限理解 #### 一、用户与组群管理 在 Linux 系统中,用户的账号信息主要存储于 `/etc/passwd` 文件内,包括一般用户...掌握文件类型的识别、权限的设置及修改方法对于高效地使用 Linux 系统至关重要。

    linux文件系统结构分析

    权限控制是Linux文件系统的重要特性,文件有三种权限:读(r)、写(w)、执行(x)。分别对应所有者、用户组和其他用户的权限。通过`chmod`命令可以改变文件的权限设置。 挂载(mount)是Linux中连接不同文件系统...

    linux 文件权限设置技巧

    除了基本的读、写、执行权限外,Linux 文件系统还提供了 setuid、setgid 和 sticky bit 等特殊权限位,以满足更复杂的权限控制需求。 setuid 权限位是指在执行文件时,以文件所有者的权限执行该文件。典型的文件是 ...

    Linux修改文件及文件夹权限

    通过以上命令的灵活运用,用户可以精细地控制Linux系统中文件和目录的访问权限,从而增强系统的安全性与管理效率。掌握这些命令是Linux系统管理员的基本技能之一,对于日常维护和故障排查都至关重要。

    如何设置Linux系统下的文件权限

    设置Linux文件权限通常涉及以下步骤: 1. **检查系统核心支持**:首先,确保你的Linux内核支持ACL功能。通过查看 `/boot/config-kernel-version` 文件中有关EXT3文件系统的配置项,如 `CONFIG_EXT3_FS_ACL`,确认...

    模拟linux文件系统

    本篇文章将深入探讨“模拟Linux文件系统”的相关知识,主要涉及Linux文件系统的结构、工作原理以及如何通过编程来模拟这一系统。 首先,我们了解Linux文件系统的层次结构。在Linux中,一切皆为文件,包括硬件设备、...

    Linux文件系统构建

    【Linux 文件系统构建】 在Linux操作系统中,文件系统是组织和...通过以上步骤,你将能全面掌握Linux文件系统构建的关键技能,包括创建、管理权限、加载卸载以及安全检测,这将对你的Linux系统管理能力产生深远影响。

    linux文件系统的构造

    总结来说,构建Linux文件系统涉及选择和配置系统文件、设定用户和属组权限,以及优化文件系统结构以适应嵌入式环境的特定需求。这个过程既包括了对Linux基础架构的理解,也涉及到系统安全和资源管理的实践,是嵌入式...

    Linux文件系统概念解释和Linux文件系统精通指南

    Linux文件系统是Linux操作系统的核心组成部分,它负责组织和管理存储设备上的数据,为用户提供有序、高效的数据访问方式。本文将深入解析Linux文件系统的概念,并提供一份精通Linux文件系统的指南。 一、Linux文件...

    linux赋予普通用户修改系统时间权限

    ### Linux赋予普通用户修改系统时间权限 在Linux环境中,为了保证系统的安全性,通常只有管理员(通常是root用户)具有修改系统时间的权限。然而,在某些情况下,我们可能需要让普通用户也能够修改系统时间,比如在...

    linux文件属性和更改文件权限详解

    1.2 linux文件系统介绍 2.更改目录/文件权限 2.1 用户和用户组的相关指令 2.2 chgrp命令 2.3 chown命令 2.4 chmod命令 2.5 umask命令  1.文件属性 1.1 ls命令 ls命令是我们最常用的命令之一,用来查看当前目录下的...

    LINUX文件系统模拟

    在这个名为"LINUX文件系统模拟"的项目中,开发者创建了一个模拟环境,让用户能够体验到类似真实Linux系统的文件操作和用户管理功能,并加入了权限管理机制。这个模拟器可能是为了教学、测试或者学习Linux操作系统的...

    Linux安全体系的文件权限管理.doc

    UGO 权限管理方式是传统的 Unix 文件系统的权限管理方式,Linux 继承了 Unix 的 UGO 权限管理方式。UGO 权限管理方式将访问文件的操作者简单地分为三类:文件属主、同组用户和其他组用户。文件属主是指创建文件的...

    Linux文件目录的权限和属性实践讲解

    通过对Linux文件目录权限和属性的学习与实践,我们不仅可以更好地管理系统的安全性和稳定性,还能根据不同的应用场景灵活调整文件的访问控制策略。希望本文能够帮助大家更加深入地理解和掌握这些重要的基础知识。

Global site tag (gtag.js) - Google Analytics