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中的文件权限主要针对以下三类对象: 1. **User(文件拥有者)**:指创建文件或目录的用户,对文件具有最高的控制权。 2. **Group(文件拥有者所在组)**:除了文件拥有者之外,同...
5. 文件系统安全:文件系统是 Linux 系统安全的核心,文件权限是 Linux 文件系统安全的关键。 Linux 操作系统文件权限设置的方法: 1. 文件所有者和访问权限: Linux 系统对不同用户访问同一文件的权限做了不同的...
Linux 系统权限管理文件特殊权限是 Linux 操作系统中的一种重要机制,用于控制用户对文件和目录的访问权限。本学习教案将详细介绍 Linux 系统权限管理文件特殊权限的概念、类型、作用和使用方法。 ACL 权限 ACL...
本实验报告对 Linux 文件系统和文件管理进行了详细的介绍,包括文件系统的目录结构、文件管理命令和文件存取权限等内容。通过本实验,我们可以更好地理解 Linux 文件系统和文件管理的原理和应用。
#### Linux文件权限基础 Linux系统作为一个典型的多用户环境,为了保障系统安全,它对不同用户访问同一文件的权限做出了明确规定。这种安全模型是通过为系统中的文件赋予“所有者”和“访问权限”两个属性实现的。 ...
### Linux 文件权限理解 #### 一、用户与组群管理 在 Linux 系统中,用户的账号信息主要存储于 `/etc/passwd` 文件内,包括一般用户...掌握文件类型的识别、权限的设置及修改方法对于高效地使用 Linux 系统至关重要。
权限控制是Linux文件系统的重要特性,文件有三种权限:读(r)、写(w)、执行(x)。分别对应所有者、用户组和其他用户的权限。通过`chmod`命令可以改变文件的权限设置。 挂载(mount)是Linux中连接不同文件系统...
除了基本的读、写、执行权限外,Linux 文件系统还提供了 setuid、setgid 和 sticky bit 等特殊权限位,以满足更复杂的权限控制需求。 setuid 权限位是指在执行文件时,以文件所有者的权限执行该文件。典型的文件是 ...
通过以上命令的灵活运用,用户可以精细地控制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环境中,为了保证系统的安全性,通常只有管理员(通常是root用户)具有修改系统时间的权限。然而,在某些情况下,我们可能需要让普通用户也能够修改系统时间,比如在...
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操作系统的...
UGO 权限管理方式是传统的 Unix 文件系统的权限管理方式,Linux 继承了 Unix 的 UGO 权限管理方式。UGO 权限管理方式将访问文件的操作者简单地分为三类:文件属主、同组用户和其他组用户。文件属主是指创建文件的...
通过对Linux文件目录权限和属性的学习与实践,我们不仅可以更好地管理系统的安全性和稳定性,还能根据不同的应用场景灵活调整文件的访问控制策略。希望本文能够帮助大家更加深入地理解和掌握这些重要的基础知识。