linux系统文件/文件夹权限的说明

linux / unix 系统中文件有3种权限:

读(read),写(write),运行(execute),而这些权限通常以数字表示:

0 = 什么都不可以
1 = 执行
2 = 写入
4 = 读取
那么依照上面的最基本的权限进行搭配:

7 = 什么都可以,(读4 写2 执行1) 4+2+1=7,(读出(read),写入(write),运行(execute))
5 = 可以读和运行 (读出(read),运行(execute))
6 = 读取写入
...
每个文件有4个不同的分组权限

例如linux系统中的文件属性通常是 777 / 755 / 666 等,分别是什么意思呢?

linux系统中的文件和文件夹通常有4组:

全部用户(all)
文件用户(user)
同组用户(group)
其他用户(other)          

全部用户默认权限是0,777 = 0777 前面的0不写是为了系统安全,比如你的iphone 如果给了7777 那么什么人都可以往你手机写文件了安全可想而知。

例如解读文件 755权限

文件用户:可以读出(read =4)写入(write = 2)运行(execute = 1),刚好是 4+2+1 =  7;
同组用户:读出(read),运行(execute),4+1=5;
其他用户:可以读出(read),运行(execute),4+1=5;

同样可以解读出 700, 750, 555, 777 的权限了。

新建文件和文件夹的默认权限

1. $ umask

该命令返回当前默认的新建文件和文件夹的访问权限。如:“0022”,其中后三位是读写执行权限的八进制数,表示默认不允许拥有的访问权限。在新建文件时,文件默认拥有的访问权限是“666”(即默认拥有读写权限),如果此时umask的值为“0022”,那么在新建文件时,该文件将不拥有“022”访问权限(即新建文件的权限是“644”,换成符号表示为“-rw-r--r--”);而新建文件夹默认拥有的访问权限为“777”,如果此时umask的值为“0022”,那么此时新建文件夹的默认权限为“755”,即“drwxr-xr-x”。

2. $ umask 026

设置当前默认访问权限掩码为“026”

文件和文件夹的操作权限

用户的权限

要确定一个用户对某个文件或文件夹是否具有相应的操作权限,先要明确该用户与文件或文件夹之间的关系。在 linux 系统中,定义了如下三种关系:

•文件或文件夹的所有者 (owner):文件或文件夹的拥有者,开始创建文件或文件夹时为创建者。
•组 (group):文件或文件夹所属的组, 开始创建文件或文件夹时为创建者的所属的组。
•其他人 (other):除了文件或文件夹的所有者和文件或文件夹所属的组的其他成员,剩下的 linux 的用户。
因为在 linux 下的文件和文件夹都有读取(r)、写入(w)、执行(x)的操作,所以上面描述的每种关系的用户分别都可以赋予这些操作权限。操作权限介绍:

权限 简写 对普通文件的作用 对文件夹的作用
读取 r 查看文件内容 列出文件夹中的文件(ls)
写入 w 修改文件内容 在文件夹中删除、添加或重命名文件(夹)
执行 x 文件可以作为程序执行 cd 到文件夹

文件或文件夹和用户的三种关系的基础操作权限
在 linux 使用ls -la命令可以查看文件夹内文件的属性,下面是我电脑上某个文件夹下文件的属性:

bash$ ls -la
drwxr-xr-x 14 root root     4096 Apr  3 18:47 .
drwxr-xr-x 23 root root     4096 Mar  2 05:48 ..
drwxr-xr-x  2 root root     4096 Apr  3 07:44 backups
drwxr-xr-x 17 root root     4096 Jul 22  2014 cache
drwxr-xr-x  2 root root     4096 Mar  2 04:26 docker-registry
lrwxrwxrwx  1 root root        9 Feb 25 13:31 lock -> /run/lock
drwxrwxr-x 15 root syslog   4096 Apr  3 07:44 log
-rw-r--r--  1 root root        0 Apr  3 18:47 test

•上面的有九列数据,第一列数据表示和文件或文件夹相应关系用户的操作权限,第二列表示文件夹内文件和文件夹的总数量(包括文件夹本身),第三列表示文件夹或文件的拥有者,第四列表示文件或文件夹的所属的组,第五列表示文件或文件夹的大小,第六、七、八列表示文件或文件夹最后被修改的时间,第九列文件或文件夹的名字。

•接下主要分析第一列的数据,在上面的信息中倒数第二行drwxrwxr-x,从左到右第一个字母表示文件系统对象的类别,这里d表示为目录(文件夹)。其它文件系统对象:

-(常规文件)、d(目录)、l(符号链接)、c(字符特殊设备)、b(模块特殊设备)、p(FIFO)、s(套接字)

•drwxrwxr-x除出去第一个字母d后的rwxrwxr-x表示的是三种用户关系对文件或文件夹的操作权限。从左到右每三个一组,依次表示所有者权限、组权限、其他用户权限。每组的顺序均为rwx,如果用户有相应的操作权限就用相应的字母表示,如果不具有相应的操作权限就用-表示。比如: rwxrwxr-x表示文件或文件夹的所有者具有rwx(可读,可写,可执行)的操作权限,组用户也具有rwx(可读,可写,可执行)的权限,其他用户具有r-x(可读,可执行,没有可读)的操作权限。

特殊权限SUID、SGID、Sticky

在 linux 系统中还有三种与用户身份无关的三个文件权限属性。即SUID、SGID和Sticky。

•SUID(Set User ID, 4):

该属性只对有执行权限的文件有效,对目录无效。执行具有SUID权限的程序时,引发的进程的所有者是程序文件的所有者,而不是启动程序的用户(除非二者是同一个人)。比如,如果一个程序的所有者是root且具有SUID属性,一个普通用户执行此程序时,如同root执行此程序一样。(请注意该属性对Shell脚本程序无效)该属性为一些特殊程序(如lpr)的启动带来了方便。但有时也带来了安全隐患:比如一个具有SUID属性的程序如果在执行时运行了一个shell,那么用户可以籍此得到系统的最高权限。SUID可用s表示,如:

bash$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 47032 Feb 16  2014 /usr/bin/passwd
•SGID(Set Group ID, 4):

对于可执行文件,SGID与SUID类似,引发的进程的所有组是程序文件所属的组。对于目录,SGID属性会使目录中新建文件的所属组与该目录相同。SGID也可以用s表示,如:

bash$ ls -l /var
drwxrwsr-x  2 root staff    4096 Apr 10  2014 local
drwxrwxr-x 15 root syslog   4096 Apr  4 19:57 log
•Sticky, 1:

仅对目录有效。带sticky属性的目录下的文件或目录可以被其拥有者删除或改名。常利用sticky属性创建这样的目录:组用户可以在此目录中创建新文件、修改文件内容,但只有文件所有者才能对自己的文件进行删除或改名。如系统中的/tmp文件夹。在属性字符串中,通常用t表示。

bash$ ls -l /
drwxrwxrwt   8 root root  4096 Apr  4 23:57 tmp

修改文件或文件夹对应用户的操作权限
在 linux 系统中,可以使用chmod命令来修改文件或文件夹对应用户的操作权限,chmod命令也有两种方式修改,一种是使用代表相应操作权限的字母简写表示,另一种是使用代表相应操作权限的数字表示。

•使用简写字母

chmod语法参数格式: [ugoa][[+-=][rwxst]
第一个字符是u、g、 o 或 a 中的一个(分别表示用户、组、其他人和所有人)。还可以选择添加(+)、删除(-)或设置(=)各种不同权限。

◦给文件或文件夹try的拥有者加可执行权限
bash$ sudo chmod u+x try
◦给文件或文件夹try的拥有者和组成员加可读可写权限
bash$ sudo chmod ug+rw try
◦给文件或文件夹try的拥有者和组成员除去可写权限
bash$ sudo chmod ug-r try
•使用数字表示(八进制数)

为了简化表述,也可使用八进制数来表示权限。即用一个四位八进制数来表示,其中最高位表示特殊权限,随后的三位依次是所有者权限、组权限和其他人权限。每一个八进制位的权限数值是文件具有的相应权限所对应的数值之后,如:

bash0755=rwxr-xr-x=0(4+2+1)(4+0+1)(4+0+1)
数值权限的算法,比如rw-其实就是110的二进制,也就是0*2^0 + 1*2^1 + 1*2^2 = 6。有相应的权限就用1表示,没有相应的权限就用0表示。不过这种算法特殊权限不包含在内。

◦给文件或文件夹try的拥有者加rwx权限,组用户加r-x权限,其他用户r--权限
bash$ sudo chmod 0754 try
◦chmod命令也可以递归的修改文件夹下所有的文件的权限,如给 try 文件夹下得所有文件加上 0755 权限
bash$ sudo chmod -R 0755 try
◦批量只修改文件或文件夹权限
bash$ find -type d|xargs chmod 745     // 只修改文件夹权限
$ find -type f|xargs chmod 644     // 只修改文件权限
// 或者
$ chmod 745 `find 路径 -type d`     // 只修改文件夹权限
$ chmod 644 `find 路径 -type f`    // 只修改文件权限
◦相应权限的数值:

> - rwx(7)、rw-(6)、r-x(5)、r--(4)、--wx(3)、-w-(2)、--x(1)、---(0)
> - suid: 符号s(4)
> - sgid: 符号s(2)
> - sticky: 符号t(1)

修改文件或文件夹的拥有者和所属的组

使用chown可以修改文件或文件夹的拥有者和所属的组。

•将文件或文件夹try的拥有者修改成aikin,所属的组修改成adm

bash$ sudo chown aikin:adm try
•和chmod一样,-R参数可以起到递归的作用

bash$ sudo chown -R aikin:adm try

创建组和用户

•组相关操作:

◦创建一个try组
bash$ sudo groupadd  try
◦修改try组的名字为rename-try
bash$ sudo groupadd -n rename-try try
◦修改try组的名字为rename-try
bash$ sudo groupadd -n rename-try try
◦删除try2组
bash$ sudo groupdel  try2
◦查看所有组
bash$ sudo cat /etc/group
•用户相关操作:

◦创建用户test
> 在 linux 系统上虽然可以使用useradd或adduser来创建用户,但是这两个命令是有区别的。
> 1. 使用useradd时,如果后面不添加任何参数选项,例如:$sudo useradd test创建出来的用户将是默认“三无”用户:一无Home Directory,二无密码,三无系统Shell。
> 2. 使用adduser时,创建用户的过程更像是一种人机对话,系统会提示你输入各种信息,然后会根据这些信息帮你创建新用户。
> 下面创建用户使用的是adduser命令:
bash$ sudo adduser test
Adding user `test' ...
Adding new group `test' (1002) ...
Adding new user `test' (1001) with group `test' ...
Creating home directory `/home/test' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for test
Enter the new value, or press ENTER for the default
Full Name []: test
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
◦修改用户
bash$ sudo passwd test    // 修改用户密码
$ sudo usermod -d /home/test -G try2 test   // 将test用户的登录目录改成/home/test,并加入 try 组,注意这里是大 G。
$ sudo gpasswd -a test try     // 将用户 test 加入到 try2 组。
$ sudo gpasswd -d test try2    // 将用户 test 从 try 组中移除
◦删除用户test
bash$ sudo userdel test
◦查看所有用户
bash$ cut -d : -f 1 /etc/passwd
// 或者
$ cat /etc/passwd |awk -F \: '{print $1}'
  了解 linux 用户操作权限,安全就掌握在手中。

时间: 2024-09-26 08:23:52

linux系统文件/文件夹权限的说明的相关文章

关于Linux系统中文件及文件夹权限笔记

linux 基础知识,Linux 文件及文件夹权限,不要动不动就 777 权限.网上教程过于复杂??拢?虻プ芙崛缦?.. 一.查看 Linux 文件权限 ls -l (通用) ll (Ubuntu适用,等于ls -al) 二.权限标示符 r(读).w(写).x(执行) 4(读).2(写).1(执行) 下面举例说明: -rwx------: 文件所有者对文件具有读取.写入和执行的权限. -rwxr?r--: 文件所有者具有读.写与执行的权限,其他用户则具有读取的权限. -rw-rw-r-x: 文件

ssh免密-linux下文件夹复制hadoop问题

问题描述 linux下文件夹复制hadoop问题 两台阿里云服务器centos6.5,做hadoop完全分布式搭建,在搭建过程中采用的非root账户zhm,已经实现通过zhm账户免密登录另外一台阿里云,但是我在配置好hadoop相关配置文件后,将配置好的hadoop文件夹整体复制到另外一台阿里云时,通过zhm账户复制失败(如图),求助这是为什么呢,然后我用root用户,通过输入密码才把文件夹复制过去,zhm用户已经赋权和root一样的,按照我的理解应该是可以复制的啊,希望大神帮解答一下,无线感激

win7文件夹权限怎么设置

  在win7纯净版的使用过过程中,我们因为用户隐私或者其他的问题可能会不希望其他人看到某些重要的文件夹,那么我们就可以对这些重要的文件夹进行权限的设置,那今天就来跟着小编学习下win7纯净版的文件夹权限怎么设置. 步骤一:我们在win7系统里面打开所需要设置权限的文件夹所在的位置,然后使用鼠标的右键点击该文件夹,在菜单里面选择"属性". 步骤二:在该文件夹的属性窗口中我们切换到"安全"的选项卡,然后点击窗口右下方的"高级"按钮进行下一步的设置.

Win7文件夹权限如何设置

  小编今天在操作电脑的时候,对系统文件夹进行修改和删除时,,但是电脑提示小编没有操作的权限,需要取得当前用(帐)户管理员权限问题,相信很多电脑用户和小编一样都并不是很了解如何设置文件夹权限,下面小编就来介绍一下有关WIN7系统文件夹如何设置权限,希望对大家有所帮助. 下面为获取当前电脑管理员权限的图文教程. 步骤一:选定所需操作的文件夹(或者文件),右键选择[属性],如下图所示. 步骤二:选择属性窗口之中的[安全],点击[高级],如下图所示. 步骤三:在高级设置窗口中,选择[所有者],点击[编

linux查看文件夹大小、文件个数的方法

linux 下查看文件个数及大小 ls -l |grep "^-"|wc -l 或 find ./company -type f | wc -l 查看某文件夹下文件的个数,包括子文件夹里的. ls -lR|grep "^-"|wc -l 查看某文件夹下文件夹的个数,包括子文件夹里的. ls -lR|grep "^d"|wc -l 说明: ls -l 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录.链接.设备文件等) gr

如何用代码获取文件夹权限,并进行更改

问题描述 盘符格式为NTFS,如何取得文件夹的安全项中的权限,又如何更改.谢谢. 解决方案 解决方案二:用Cacls工具process.start调用Cacls命令具体参数请参考MS帮助解决方案三:例如System.Diagnostics.Process.Start("cacls.exe","c:/e/t/geveryone:F");CAcls命令在提权中的使用cacls.exec:/e/t/geveryone:F#把c盘设置为everyone可以浏览cacls.e

编程 批处理-bat程序,根据系统时间开放文件夹权限,并且删除相应内容

问题描述 bat程序,根据系统时间开放文件夹权限,并且删除相应内容 有十二个文件夹,用英语的十二个月命名.根据系统的时间开放对应的本月,上个月,下个月,这三个月文件夹,可读可写.其他文件夹除管理员以外,都是拒绝访问的,并且其中的内容全部删除.例如,现在是九月,开放的就是,八月,九月,十月这三个月文件夹,可读,可写.除了这三个文件夹 除了管理员,其他人都是拒绝访问,并且情况文件夹(删除文件夹子目录内容,保留月份文件夹不变.不是全部删除后,再创建). 大神们,帮帮小弟吧,,,

struts-java 设置文件夹权限只有上传人员才能做写入

问题描述 java 设置文件夹权限只有上传人员才能做写入 java做了一个上传附件,后台在服务器创建了一个对应工号的文件夹,我怎么能设置这个文件夹只有该工号才有写入权限.其他人访问都不能修改 解决方案 设置一个表,工号,文件名,权限,,上传时根据这个表的数据来判断上传权限 解决方案二: 如果你真的要设置文件夹的权限,首先你要是操作系统用户才行,如果只是你程序的用户肯定是不能的. 只有在用户请求某个文件夹进行操作的时候,进行判断,如果没有权限则提示没有权限,反之加载就可以了. 解决方案三: 文件夹

c#如何通过代码修改注册表里的文件夹权限

问题描述 最近做一个小东西,搞不定了,特来求助!问题,如何在C#的代码里修改注册表里的文件夹权限!我电脑的HKLMsystemCCSservicesusbstor文件夹的权限为system完全控制,users为只读,我用的是超级管理员帐号登录,手动可以修改权限,但是通过代码就不行,各位帮忙看看publicstaticvoidSetFileRole(){stringusers="Administrators";//RegistryKeyrks=Registry.CurrentUser.O