Linux 文件访问权限详解

一直以root登陆使用linux的人来说很少有权限被拒这种概念,但某些时候又深受权限拒绝困扰。知道为什么很多程序中需要使用getuid(),setuid()?为什么以普通权限登陆的用户不能进入/root,为什么在/目录下执行ls -l后可以显示root的信息,但ls /root -al却是权限不够?为什么有些文件夹可以继续创建文件,但就是不能ls?等等,相信看了此文就能明白。

主要是学习笔记,不足之处请指正。

CentOS 5.4[@linuxidc opt]$ uname -aLinux xxx 2.6.18-164.el5xen #1 SMP Thu Sep 3 04:47:32 EDT 2009 i686 i686 i386 GNU/Linux

一、口令文件1,格式 存储文件/etc/passwd,格式如下: root:x:0:0:root:/root:/bin/bash aaa:x:501:501:bj, bj, 8111111,136000111:/home/aaa:/bin/bash 用户名:加密密码:用户ID:组ID:注释:工作目录:shell:

默认情况是第一行的格式;注释字段可以自行修改,用逗号隔开,如第二行格式,这主要是给finger命令使用时可解析。 可以vi /etc/passwd修改,但为了保证其格式的正确性,,请用vipw命令编译此文件。

sh-3.2# finger aaa Login: aaa Name: bj Directory: /home/aaa Shell: /bin/bash Office: bj, 8111111 Home Phone: 136000111 Never logged in. No mail. No Plan.

2,编程实例 /*getpwnam_pwuid.c*/ #include <pwd.h> #include <stdlib.h> #include <stdio.h> int main(void) { //struct passwd *pwd = getpwnam(“aaa”); struct passwd *pwd = getpwuid(501); if(pwd == NULL) { printf(“err.\n”); return 1; } printf(“name:%s\n”, pwd->pw_name); printf(“passwd:%s\n”, pwd->pw_passwd); printf(“description:%s\n”, pwd->pw_gecos); printf(“uid:%d\n”, pwd->pw_uid); printf(“gid:%d\n”, pwd->pw_gid); printf(“dir:%s\n”, pwd->pw_dir); printf(“shell:%s\n”, pwd->pw_shell); return 0; }

sh-3.2# gcc getpwnam_pwuid.c -o app sh-3.2# ./app name:aaa passwd:x description:bj, bj, 8111111,136000111 uid:501 gid:501 dir:/home/aaa shell:/bin/bash

二、组文件1,格式 存储文件/etc/group,格式如下 root:x:0:root bin:x:1:root,bin,daemon aaa:x:501: 组名:加密密码:组ID:指向的各用户名

2,改变文件uid和gid.

sh-3.2# pwd /root/study sh-3.2# ls -al -rw-r–r– 1 root root 397 10-11 03:23 test.c chgrp 改变所属组ID,当然只有root权限才可以修改。 sh-3.2# chgrp aaa test.c sh-3.2# ls -al -rw-r–r– 1 root aaa 397 10-11 03:23 test.c 这个aaa就是新组名,其在/etc/group中,可以通过adduser aaa自行添加 sh-3.2# cat /etc/group root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon . . . gdm:x:42: sabayon:x:86: plmtest:x:500: aaa:x:501: chown 改变用户ID或组ID sh-3.2# chown aaa:aaa test.c sh-3.2# ls -al -rw-r–r– 1 aaa aaa 397 10-11 03:23 test.c

3,编程实例

/*getgrnam.c*/ #include <grp.h> #include <stdio.h> int main(int argc, char *argv[]) { if(argv[1] == NULL) { printf(“input error.\n”); return 1; } struct group *gp = getgrnam(argv[1]); if(gp == NULL) { printf(“err.\n”); return 1; } printf(“name:%s\n”, gp->gr_name); printf(“psswd:%s\n”, gp->gr_passwd); printf(“gid:%d\n”, gp->gr_gid); int i; for(i = 0; gp->gr_mem[i] != NULL; i++) { printf(“group name:%s\n”, gp->gr_mem[i]); } return 0; }

sh-3.2# gcc getgrnam.c -o app sh-3.2# ./app bin name:bin psswd:x gid:1 group name:root group name:bin group name:daemon

4,文件权限 不细讲了 sh-3.2# ls -al 总计 483984 drwxr-x— 13 root root 4096 02-22 00:01 . drwxr-xr-x 32 root root 4096 02-21 21:15 .. -rw-r–r– 1 root root 464023491 10-25 22:33 3.3.005-080425.tgz -rw——- 1 root root 9346 02-21 23:16 .bash_history -rw-r–r– 1 root root 24 2007-01-06 .bash_logout -rw-r–r– 1 root root 191 2007-01-06 .bash_profile -rw-r–r– 1 root root 176 2007-01-06 .bashrc drwxrwxrwx 10 1000 users 4096 08-23 20:16 cflow-1.3 -rw-r–r– 1 root root 759691 08-23 20:13 cflow.tar.gz -rw-r–r– 1 root root 100 2007-01-06 .cshrc -rwxr-xr-x 1 root root 582 11-11 21:48 delete_M.sh -rw-r–r– 1 root root 2518 11-11 20:25 .dir_colors

主要是最左边一列:drwxr-x— 10个字符,最左边是文件类型,-默认为普通文件;d:目录文件;l符号链接…… 后面9个,3个一组共三组,分别表示所属用户uid的权限;所属组或者附属组gid的权限;其它权限。 三个字符分别是读、写、执行权限 读4,写2, 执行1

所以chmod 777 test.c,提升到读、写、执行权限。

坦然接受生活给你的馈赠吧,不管是好的还是坏的。

Linux 文件访问权限详解

相关文章:

你感兴趣的文章:

标签云: