Linux设置文件目录权限,四位数的目录权限是什么意思?如2770、3777、4777、0777等。

关于四个权威问题,后三个楼上已经回答了,就不多说了。
我们来谈谈第一点。
同样的第一位改为二进制,分为三部分。
abca-setuid位已设置。
如果该位为1,则表示设置了setuidb-setgid位。
这意味着设置setgidc-sticky位。
如果该位为1,则表示设置stic。
kysetuid:设置使得文件在执行时具有文件所有者的权限。
典型的文件是/usr/bin/passwd。
如果一般用户运行该文件,则在执行过程中该文件可以获得root权限,允许用户更改密码。
setgid:该权限限制仅对目录有效。
一旦目录设置为该位,则用户在该目录中创建的任何文件都将具有与该目录所属组相同的组。
Stickybit:该位可以理解为反。
-删除位。
用户能否删除文件主要取决于该文件所属的组对该用户是否有写权限。
如果没有写权限,则该目录下的所有文件都无法删除,也无法添加新文件。
如果希望用户能够添加文件但同时不能删除文件,可以使用stickybit。
文件。
设置该位后,即使用户对该目录有写权限,也无法删除该文件。

Linux操作系统文件访问权限详解

以root身份登录并使用Linux的人很少有拒绝权限的概念,但有时却会因为拒绝权限而烦恼。
你知道为什么很多程序中都需要getuid()和setuid()吗?为什么用户无法使用普通/root权限登录?为什么在/目录下执行ls-l可以显示root信息,但是ls/root-al没有足够的权限?为什么我仍然可以在某些文件夹中创建文件,但我不能?等等,我想你看完这篇文章就明白了。
基本上只是学习笔记,如有错误请指正。
CentOS5.4[testc@xxxopt]$uname-aLinuxxxx2.6.18-164.el5xen#1SMPThuSep304:47:32EDT2009i686i686i386GNU/Linux1、密码文件1,存储文件格式/etc/passwd,格式如下:root:x:0:0:根:/ruot:/bin/bashaaa:x:501:501:bj,bj,8111111,136000111:/home/aaa:/bin/bash用户名:加密密码:userid:groupid:comments:working-dir:shell:默认模式是第一行的格式;注释字段可以单独编辑,用逗号分隔,就像第二行格式一样,并且在由手指命令使用时基本上是可解析的。
可以通过vi/etc/passwd进行编辑,但为了确保其格式正确,请使用vipw命令编译该文件。
sh-3.2#fingeraaLogin:aaaName:bjDirectory:/home/aaShell:/bin/bashOffice:bj,8111111HomePhone:136000111Neverloggedin.Nomail.NoPlan。
 2.编程示例  /*getpwnam_pwuid.c*/#include#include#include intmain(void) {//structpasswd*pwd=getpwnam("aaa");structpasswd*pwd=getpwuid(501);if(pwd==NULL)<pw_name);printf("密码:%s\n",pwd->pw_passwd);printf("描述:%s\n",pwd->pw_gecos);printf("uid:%d\n",pwd->pw_uid);printf("gid:%d\n",pwd->pw_gid);printf("目录:%s\n",pwd->pw_dir);;返回0;存储文件格式/etc/group,格式如下root:x:0:rootbin:x:1:root,bin,daemonaaa:x:501:组名:加密密码:组id:指向每个用户的名字2、change更改文件id和gid.sh-3.2#pwd/root/studysh-3.2#ls-al-rw-r——r——1rootroot39710-1103:23test.cchgrp只更改组ID即可修改。
sh-3.2#chgrpaaatest.csh-3.2#ls-al-rw-r——r——1rootaaa39710-1103:23test.c这个aaa是新的组名,位于/etc/group中,可以通过以下方式添加sh自己通过adduseraa-3.2#cat/etc/group根:x:0:rootbin:x:1:根,bin,守护进程:x:2:根,bin,守护进程gdm:x:42:sabayon:x:86:plmtest:x:500:aaa:x:501:chown更改用户ID或组的IDsh-3.2#chownaaa:aaatest.csh-3.2#ls-al-rw-r——r——1aaaaaa39710-1103:23test.c​3.程序示例/*getgrnam.c*/#include#include​intmain(intargc,char*argv[]){如果(argv[1]==NULL)​{printf("inputerror.\n");return1;}structgroup*gp=getgrnam(argv[1]);if(gp==NULL){printf("err.\n""");return1;}.printf("n名称:%s\n),gp->gr_name);printf("psswd:%s\n",gp->gr_passwd);printf("gid:%d\n",gp->gr_gid);inti;for(i=0;gp->gr_mem[i]!=NULL;i++)​{printf("组名:%s\n",gp->gr_mem[i]);}返回0;}sh-3.2#gccgetgrnam.c-oappsh-3.2#./appbinname:binpsswd:xgid:1groupname:rootgroupname:bingroupname:daemon4,文件权限不详sh-3.2#ls-al总计483984drwxr-x——13rootroot409602-2200:01.drwxr-xr-x32rootroot409602-2121:15...-rw-r——r——1rootroot46402349110-2522:333.3.005-080425.tgz-rw——1rootroot934602-2123:16.bash_history-rw-r——r——1rootroot242007-01-06.bash_logout-rw-r——r——1rootroot1912007-01-06.bash_profile-rw-r——r——1rootroot1762007-01-06.bashrcdrwxrwxrwx101000users409608-2320:16cflow-1.3-rw-r——r——1rootroot75969108-2320:13cflow.tar.gz-rw-r——r——1rootroot1002007-01-06.cshrc-rwxr-xr-x1rootroot58211-1121:48delete_M.sh-rw-r——r——1rootroot251811-1120:25.dir_colors最左边一栏基本是:drwxr-x-10个字符,最左边是文件类型,-默认是常规文件d:目录文件l符号链接...代表最后一个9个字符,分别是三个组,用户ID权限为所属组的gid权限。
这三个字母分别是读、写、执行权限:读4、写2、执行1。
因此chmod777test.c已经升级为读、写、执行权限。
5、群组授权操作示例本节讲解同组成员之间的资源共享,即不同uid但相同gid的用户共享同一个组的资源。
为了方便起见,我同时打开了两个终端。
"sh-3.2#"Shell/bin/sh以root权限登录"[testa@xxxroot]"Shell以testa用户登录注:下面提到的“用户”是指登录到/etc中指定的终端/passwd用户(本文指的是下面添加的三个帐户名。
)sh-3.2#useraddtestash-3.2#useraddtestbsh-3.2#useraddtestcsh-3.2#tail-f/etc/passwd-n4sabayon:x:86:86:Sabayonuser:/home/sabayon:/sbin/nolog测试:x:500:500::/home/testa:/bin/bashtestb:x:501:501::/home/testb:/bin/bashtestc:x:502:502::/home/testc:/bin/bash打开另一个终端登录testa,并保留之前的终端。
sh-3.2#sutesta[testa@xxxroot]$iduid=500(testa)gid=500(testa)groups=500(testa)​[testa@xxxhome]$ls-al合计28drwxr-——3testctestc409602-2122:52testc[testa@xxxhome]$cdtestbbash:cd:testb:权限不足通过root修改testb目录的权限为770,即相同uid或当前gid的用户有读、写、和执行权限。
sh-3.2#cd/home/sh-3.2#chmod770testb[testa@xxxhome]$ls-al总计28drwxr-xr-x5rootroot409602-2122:52.drwxr-xr-x32rootroot409602-2121:15...drwx——3testatesta409602-2122:56testadrwxrwx——3testbtestb409602-2122:48testb(heremodi)fy)drwx——3testctestc409602-2122:52testc[testa@xxxhome]$cdtestbbash:cd:testb:权限不足[testa@xxxroot]$iduid=500(testa)gid=500(testa)groups=500(testa)此时,虽然组权限是开放的testb,但用户的gid=500(testa)groups=500(testa)还不属于testb组。
接下来修改testa的gid为testb(或者将其子组的值添加到testb)sh-3.2#usermod-Gtestbtesta(添加testb的子组)sh-3.2#idtestauid=500(testa)gid=500(testa)groups=500(testa),501(testb)此时testa终端需要重新登录才能使更改生效[testa@xxxroot]$exitexit[root@xxx~]#sutesta[testa@xxxroot]$iduid=500(testa)gid=500(testa)groups=500(testa),501(testb)​[testa@xxxrootot]$cd/home/[testa@xxxhome]$ls-al总计28drwxr-xr-x5rootroot409602-2122:52.drwxr-xr-x32rootroot409602-2121:15……drwx——3testatesta409602-2122:56testadrwxrwx——3testbtestb409602-2122:48testbdrwx——3testctestc409602-2122:52testc[testa@xxxhome]$cdtestb[testa@xxxtestb]$pwd/home/testb上面是添加用户testa的子组的test,让他可以访问所属的资源授予testb组访问权限。
接下来使用newgrp交换用户testa的gid[testa@xxxtestb]$iduid=500(testa)gid=500(testa)groups=500(testa),501(testb)[testa@xxxtes.tb]$newgrptestb[testa@xxxtestb]$iduid=500(testa)gid=501(testb)groups=500(testa),501(testb)此时testa用户ID已更改为501(testb)。
组之前的关系在文件/etc/groupsh-3.2#tail-f/etc/group-n4sabayon:x:86:testa:x:500:testb:x:501:testa(最后一列:用户列表也就是说testb组中包含testa,testa属于testb组....)test:当然root用户的权限是无限制的,不需要进行权限检查访问文件时。
3、相关系统调用getuid();getgid();intsetuid(uid_tuid);intsetgid(gid_tgid);需要设置的超级用户或uid只有与当前用户的uid兼容才可以设置。
返回-1并设置errno=EPERM,errno可以通过strerror()进行解释。
其他:[testa@xxxhome]$sutesta[testa@xxxhome]$sudotouchaatestai不在sudoers文件中。
此事件将被报告。
添加testaALL=(ALL)ALL与root参考vim/etc/sudoers:APUE2E,1.8,4.4,8.11

Linux文件权限一共10位长度,分成四段,第三段表示的内容是

第一个数字代表文件类型-代表普通文件d代表目录文件第二个、第三个和第四个数字代表读、写和执行权限。
文件所属组的写入和执行权限。
执行权限的第八位、第九位和第十位分别代表该文件的其他用户的读、写和执行权限。