Linux权限管理:

二、权限管理

1、3种基本权限

在Linux中,将使用系统资源的人员分为4类:超级用户、文件或目录的属主、属主的同组人和其他人员。超级用户拥有对Linux系统一切操作权限,对 于其他3类用户都要指定对文件和目录的访问权限。

代表字符       权限                      对文件的含义                        对目录的含义

r                读权限                 可以读文件的内容                 可以列出目录中的文件列表

w               写权限                   可以修改该文件                  可以在目录中创建删除文件

x               执行权限                 可以执行该文件                  可以使用cd命令进入该目录

2、查看文件和目录的权限 可以使用带l参数的ls命令查看文件或目录的权限

每一行显示一个文件或目录的信息,这些信息包括文件的类型、文件的权限、文件的属主和文件的所属组,还有文件的大小以及创建时间和文件名。

输出列表中每 一行第一列的第一个字母指示了该文件的类型。各种文件类型及代表字符如下:

-:普通文件

b:块文件设备

d:目录文件

c:字符文件设备

l:符号链接文件

p:管道文件

除开第一列的字符外,其余9个字母可分为三组,3个字母一组,这3组分别代表:文件属主的权限、文件所属组的权限和其他用户的权限。每组中的3个栏位分别表示读、 写、执行权限。

3、更改操作权限(chmod)

系统管理员和文件属主可以根据需要来设置文件的权限,有两种设置方法:文字设定法和数值设定法。

(1)文字设定法

chomd的文字设定法的格式为:chmod [ugoa][+-=][rwxugo]

其中第1个选项表示要赋予权限的用户,具体说明如下:

u:属主      g:所属组用户      o:其他用户      a:所有用户

第2个选项表示要进行的操作,具体说明如下:

+:增加权限

-:删除权限

=:分配权限,同时将原有权限删除

第3个选项是要分配的权限,具体说明如下:

r/x/w:允许读取/写入/执行        u/g/o:和属主/所属组用户/其他用户的权限相同

例如:

chmod go -r users      //取消组用户和其他用户对文件users的读取权限

chmod u+x users      //对文件users的属主增加招待权限

chmod u+x,go-r users      //对文件users的属主添加执行权限,同时取消组用户和其他用户对文件的读取权限

(2)数值设定法

chmod的数值设定法的格式为:chmod n1n2n3

其中n1、n2、n3分别代表属主的权限、组用户的权限和其他用户的权限,这三个选项都是八进制数字。例如:

chmod 755 adduser      //对文件adduser的属设置可读、写和执行的权限,所属组和其他用户只设置读和执行权限,没有写权限

chmod 600 user1         //取消组用户和其他用户对文件user1的一切权限(原权限为-rw-rCrC)

4、更改属组或同组人

改变文件的属主和组可以用chown命令,命令格式为:chown [-R] 。 例如:

chmod osmond user1      //将文件user1的属主改为osmond

chmod osmond.osmond user1      //将文件user1的属主和组都改成osmond

chmod -R osmond.osmond mydir      //将mydir目录及其子目录下的所有文件或目录的属主和组都改成osmond

5、设置文件和目录的生成掩码

用户可以使用umask命令设置文件夹的默认生成掩码。默认的生成掩码告诉系统当创建一个文件或目录时不应该赋予哪些权限。如果用户将umask命令放 在环境文件(.bash_profile)中,就可以控制所有的新建文件或目录的访问权限。其命令格式为:umask [u1u2u3]

其中,u1、u2、u3分别表示的是不允许属主有的权限、不允许同组人有的权限和不允许其他人有的权限。例如:

umask 022      //设置不允许同组用户和其他用户有写权限

umask            //显示当前的默认生成掩码

用户和用户组

linux的系统是“多用户、多任务环境”的,也就是说“linux系统允许多个用户同时使用系统,并且可以同时执行不同的任务”。所以为了确保各个用户的文件安全, linux系统具有非常严格的文件权限管理机制。

主要体现在两个方面:

1.   对文件操作的权限:

三种: 读、写、执行。

2.   文件的访问方式:

三种: owner/group/other。

读、写、执行的操作权限比较容易理解,主要是文件的访问方式。它们的含义如下:

拥有者 owner

也就是文件的所有者,通常是建立文件的用户。在linux系统中,每个文件都有一个所有者。每一个用户都会被分配唯一的uid。

用户组

一个用户组包含若干用户。值得注意的是:一个用户也可以属于多个用户组,也可以不属于任何用户组。每一个用户组都会被分配唯一的gid。

其他人

对于一个文件来说,如果某用户既不是owner,也和owner不在同一个用户组,那么该用户对于文件来说就是其他人。

另外:在linux系统中,

①各个用户账号的信息都保存在/etc/passwd文件中;

②密码保存在/etc/shadow文件中;

③用户组信息保存在/etc/group文件中。

1. chmod 改变文件或文件夹权限

chmod  r:4 w:2: x:1 改变档案权限

a=拥有者 g=所在群组 o=其他

引出问题:[root@qmfsun]# ls -al /opt/qmfsun

total 1

-rwxr-xr-x 1 root root 7 04-21 12:47 test.txt

-rwxr-xr-x 1 root root 7 04-21 12:47 test.txt

①       ②   ③    ④  ⑤   ⑥       ⑦

其中各个部分的含义如下图:

把从左到右依次编号,各个字段的含义如下:

1.   文件的属性,一共有10个属性,具体含义见下图:

用数字表示:

第一个属性,表示这个文件的类型,常见的有:文件、目录或连接文件等。

当为[ d ]则是目录

当为[ - ]则是文件

若是[ l ]则表示为连结档(link file);

若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);

若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)

2.   第二列表示链接占用的节点,这个主要是和link node有关,初学linux的可以先不用研究。

3.   第三列表示文件的“拥有者”,即owner。

4.   第四列表示拥有者的“用户组”。

5.   第五列表示这个文件的大小。

6.   第六列表示文件的最后“修改时间”(即modification time, 简称mtime),对于新创建的文件就是指其创建的时间。

Linux的文件权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以

控制文件如何被他人所存取。利用ls -l显示的文件属性中,第一个字段是档案的权限,共有十个位

例如:-rwxr-xr-w

第一个位是文件类型,

接下来的9位,按照每三个字符为一组共三组,每一组均为『rwx』 的三个参数的组合,每一组又依次代表使用者(u)、群组(g)、其他人(o)的权限,每组中的r(可读),w(可写),x(可执行),-(没有权限)代表一种权限,要注意的是,这三个权限的位置不会改变

当权限用数字表示时,4,2,1分别代替r,w,x;此时上述-rwxr-xr-w权限属性用数字表示就是chmod 755 qmfsun.txt

755:共有三个数字,按照顺序,

第一个数字代表u(拥有者)权限,

第二个数字代表g(群组)权限,

第三个数字代表o(其他人)权限

每一个数字都是通过4(表示r),2(表示w),1(表示x)三个数字相加得到的

所以数字表示:只是将字符中的r,w,x分别用4,2,1替换在相加的结果

文件属性这块共有十个字段,如:drwxr-xr-x

我们把这10个列分成4块:[d] [rwx] [r-x] [r-x]

第一块:也就是第一列,用来表示这个文件的类型,有如下值:

(1)[ d ]则是目录,我这里的是d,表示的是一个目录

(2)[ - ]则是文件;

(3)[ l ]则表示为连结档(link file);

(4)[ b ]则表示为装置文件里面的可供储存的接口设备;

(5)[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标。

第二块:第 2到4 列,表示文件拥有者的权限。

第三块:第5到7 列,表示拥有者同组人的权限。

第四块:第8到10列,表示是非拥有者组人的权限。

这些权限均有[rwx] 三个参数表示,而且分别对应不同的位置。每块由3个列组成,每列对应一个值。 [ r ]代表可读、[ w ]代表可写、[ x ]代表可执行。

举例: 如果拥有者只有只读的权限,那么第2到4列就是[r--],有读写的权限就是[rw-],有读写和执行的权利就是[rwx].

4.2 使用数字赋权

在4.1 中了解准备知识之后,就可以使用数字赋权了。 每块用户有3个权限[rwx]. 他们对应数字:

r -->4

w-->2

x-->1

使用数字赋权的命令格式如下:

chmod abc filename

其中的abc 分别代表3个数字,并且分别对应问个不同的属组。 即:

数字a 对应 第2到4位,表示拥有者的权限。

数字b 对应 第5到7位,表示同组用户的权限。

数字c 对应第8到10位,表示其他组的权限。

rwx 对应4,2,1. 那么只读的权限用4表示[r--],读写用6(4+2)表示[rw-],写加执行用7(4+2+1)表示[rwx]。 只读加执行用5(4+1)表示[r-x]。

综合这两点:上面图中的的10个属性含义为:是一个文件,这个文件的“拥有者”可读、可写、可执行, “同用户组的人”也是可读、可写、可执行,但是“其他人”没有任何权限。

下面介绍chmod的文件权限的两种表示方法:

第一种表示法:符号类型

参数:

用法:

chmod  [{ugo} {+-=} {xrw}] 文件或目录(可以是多个文件,以空格分开的要改变权限的文件列表,支持通配符)

参数含义:u 表示“用户(user)”,文件或目录的所有者。

g 表示“同组(group)用户”,用户所属组。

o 表示“其他(others)用户”,其他人。

a 表示“所有(all)用户”。它是系统默认值,a代表u,g,o三个操作符号可以是:

+ 添加某个权限。

- 取消某个权限。

= 赋予给定权限并取消其他所有权限(如果有的话)。

设置 mode 所表示的权限可用下述字母的任意组合:

r 可读;w 可写;x 可执行。

第二种表示方法:数字类型

chmod 权限 文件名

r=4(Read,读取权限):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目 录的权限。

w=2(Write,写入权限):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。

x=1(eXecute,执行权限):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。

0表示没有权限,用"-"表示,

通过r=4;w=2;x=1将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。

即:u,g,o分别对应一个八进制数字,每个数字都是是由r=4;w=2;x=1相加的结果得出来的

权限

数值

rwx rw- r–

764

rw- r– r–

644

rw- rw- r–

664

举例:

$ chmod +x scriptfile.sh;+x前面省略了a(表示u,g,o)

chmod   a+w qmfsun.txt

chmod ug+w,o-x text.txt;文件属主(u) 增加写权限,与文件属主同组用户(g) 增加写权限,其他用户(o) 删除执行权限

chmod a–x mm.txt;chmod –x mm.txt;chmod ugo–x mm.txt 以上这三个命令都是将文件mm.txt的执行权限删除,它设定的对象为所有使用者。

chmod g+r,o+r qmfsun.txt;使同组和其他用户对文件qmfsun.txt有读权限。(在一个命令行中可给出多个权限方式,其间用逗号隔开)

chmod 644 mm.txt;即设定文件mm.txt的属性为:-rw-r--r--

文件属主(u)inin 拥有读、写权限

与文件属主同组人用户(g) 拥有读权限

其他人(o) 拥有读权限

chmod 750 wch.txt;即设定wchtxt这个文件的属性为:-rwxr-x---

文件主本人(u)inin 可读/可写/可执行权

与文件主同组人(g) 可读/可执行权

其他人(o) 没有任何权限

将档案 file1.txt 设为所有人皆可读取 :

chmod ugo+r file1.txt

将档案 file1.txt 设为所有人皆可读取 :

chmod a+r file1.txt

将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的

人则不可写入 :

chmod ug+w,o-w file1.txt file2.txt

将 ex1.py 设定为只有该档案拥有者可以执行 :

chmod u+x ex1.py

将目前目录下的所有档案与子目录皆设为任何人可读取 :

chmod -R a+r *

此外chmod也可以用数字来表示权限如 chmod 777 file

语法为:chmod abc file

其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。

r=4,w=2,x=1

若要rwx属性则4+2+1=7;

若要rw-属性则4+2=6;

若要r-x属性则4+1=7。

范例:

chmod a=rwx file

chmod 777 file

效果相同

chmod ug=rwx,o=x file

chmod 771 file

效果相同

若用chmod 4755 filename可使此程式具有root的权限

-rw------- (600) -- 只有属主有读写权限。

-rw-r--r-- (644) -- 只有属主有读写权限;而属组用户和其他用户只有读权限。

-rwx------ (700) -- 只有属主有读、写、执行权限。

-rwxr-xr-x (755) -- 属主有读、写、执行权限;而属组用户和其他用户只有读、执行权限。

-rwx--x--x (711) -- 属主有读、写、执行权限;而属组用户和其他用户只有执行权限。

-rw-rw-rw- (666) -- 所有用户都有文件读、写权限。这种做法不可取。

-rwxrwxrwx (777) -- 所有用户都有读、写、执行权限。更不可取的做法。

[root@localhost ~]# chmod 664 a.txt

按照上面的规则,rwx合起来就是4+2+1=7,一个rwxrwxrwx权限全开放的文件,数值表示为777;而完全不开放权限的文件“---------”其数字表示为000。下面举几个例子:

-rwx------:等于数字表示700。

-rwxr—r--:等于数字表示744。

-rw-rw-r-x:等于数字表示665。

drwx—x—x:等于数字表示711。

drwx------:等于数字表示700。

实例:

1.将档案a.txt 设为其他人皆可执行:

amosli@amosli-pc:~/learn/re$ ls -l

total 0

-rw-rw-r-- 1 amosli amosli 0 12月 27 00:18 a.txt

amosli@amosli-pc:~/learn/re$ chmod o+x a.txt

amosli@amosli-pc:~/learn/re$ ls -l

total 0

-rwxrw-r-x 1 amosli amosli 0 12月 27 00:18 a.txt

2.将档案a.txt设为所有人皆不可读取:

方法1:

amosli@amosli-pc:~/learn/re$ chmod a-r a.txt

amosli@amosli-pc:~/learn/re$ ls -l

total 0

--wx-w---x 1 amosli amosli 0 12月 27 00:18 a.txt

方法2:

amosli@amosli-pc:~/learn/re$ chmod ugo-r a.txt

amosli@amosli-pc:~/learn/re$ ls -l

total 0

--wx-w---x 1 amosli amosli 0 12月 27 00:18 a.txt

反之,若将读权限赋给所有人,则将ugo-r 和a-r改为ugo+r  、a+r即可。

3.将读写执行三种权限赋给所有人

amosli@amosli-pc:~/learn/re$ chmod a+rwx a.txt

amosli@amosli-pc:~/learn/re$ ls -l

total 0

-rwxrwxrwx 1 amosli amosli 0 12月 27 00:18 a.txt

使用数字来进行权限管理:

r-- = 4;4(r)+0(-)+0=4;代表u

-w-=2;0+2(w)+0=2;代表g

--x=1; 0+0+1(x)=1;代表o

将对应的值相加即可进行权限管理,如:

rw-=4+2=6;

r-x=4+1=5;

rwx=4+2+1=7;

-wx=2+1=3;

实例:

755就表示rwx  r-x  r-x

amosli@amosli-pc:~/learn/re$ chmod 755 a.txt

amosli@amosli-pc:~/learn/re$ ls -l

total 0

-rwxr-xr-x 1 amosli amosli 0 12月 27 00:18 a.txt

其他皆可依照。如:

chmod 777 file1 <==> chmod a=rwx file

chmod 771 file  <==> chmod ug=rwx,o=x file

$ chmod u+x file 给file的属主增加执行权限

$ chmod 751 file 给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限

$ chmod u=rwx,g=rx,o=x file 上例的另一种形式 (u=rwx,g=rx,o=x中间不能有空格)

$ chmod =r file 为所有用户分配读权限

$ chmod 444 file 同上例

$ chmod a-wx,a+r 同上例

$ chmod -R u+r 目录名称 递归地给directory目录下所有文件和子目录的属主分配读的权限

1. chmod 的八进制语法的数字说明;

r 4

w 2

x 1

- 0

属主的权限用数字表达:属主的那三个权限位的数字加起来的总和。比如上面的例子中属主的权限是rwx ,也就是4+2+1 ,应该是7;

属组的权限用数字表达:属组的那个权限位数字的相加的总和。比如上面的例子中的r-x ,也就是4+0+1 ,应该是5;

其它用户的权限数字表达:其它用户权限位的数字相加的总和。比如上面例子中是 r-x ,也就是4+0+1 ,应该是5;

例如:改变一个文件的权限

Linux chmod递归设置目录755和文件644权限

find /path -type f -exec chmod 644 {} \; //设置文件权限为644

find /path -type d -exec chmod 755 {} \; //设置目录权限为755

[root@localhost ~]# chmod -R 644 bin/.[a-z]*;chmod 会匹配所有以.a到.z 开头的文件。

[root@localhost ~]# chmod ugo-x linuxsir007.txt 注:把属主、用户组及其它用户的执行权限都减掉

[root@localhost ~]# chmod u+x linuxsir007.txt 注:为文件的属主增加执行权限

[root@localhost ~]# chmod u-x,go+rw linuxsir007.txt 注:减去文件属主对文件的执行权,增加属组和其它用户对文件的可读可写权

用助记语法比较灵活,组合起来比较方便;比如;

u=r+x 为文件属主添加读写权限;

ug=rwx,o=r 为属主和属组添加读、写、执行权限,为其它用户设置读权限。

a+x 为文件的属主、属组和其它用户添加执行权限;

g=u 让文件的属组和属主和权限相同;

对于目录权限的设置,要用到-R参数;

参数:-R  递归更改,即目录下的所有子目录以及子目录下的所有文件 、目录的属性都更新成为这个属性。

用法:chmod  -R  755 /opt/huawei;-R表示递归处理,如果不加-R,则改的只是文件夹huawei的属性,文件夹里面的文件属性没改,如果我们为一个目录及其下的子目录和文件具有相同的属性,就可以用-R参数;

[root@localhost ~]# chmod -R a+rwx testdir/

对于一个文件夹

1.对于一个文件夹bin,不加-R参数,执行chmod 644 bin,只会改变文件夹本身的权限而不改变其子文件的权限

查看文件夹以及文件夹下全部子文件

2. 改变自身和子文件夹权限,递归改权限需要加-R参数

3.对一个目录,即便你有read的权限,但是没有x权限,也无法进入目录

chmod u=rwx,go=rx .bashrc

即便我是一个普通用户,用户root的文件在我是属主的目录下,我也一样可以删除。

很多时候我们仅仅是想为目录或者子目录提供可执行的权限使得其可以被搜寻到,却不想改变在这些目录中的文件的权限。在我指导这个命令之前,我一般都是找到所有的目录然后改变它们的权限。但是在unix中我们可以使用chmod有一个更好地方法来做到。你可以使用‘X’(大写的X)参数来仅仅改变文件目录的的权限而不影响到文件。让我们从下面的例子中来看看这种用法。

example@localhost~/test ls -lrt

total 8.0K

-r--r--r--  1 example Domain Users    0 Jul 15 11:42 stock_trading_systems

drw-rw-rw-+ 1 example Domain Users    0 Jul 15 14:33 stocks/

example@localhost~/test chmod a+X *

example@localhost~/test ls -lrt

total 8.0K

-r--r--r--  1 example Domain Users    0 Jul 15 11:42 stock_trading_systems

drwxrwxrwx+ 1 example Domain Users    0 Jul 15 14:33 stocks/

2. chown 更改文件或文件夹的所属用户和用户组

chown :更改与文件、目录的所有者和所属组

功能:更改某个文件或目录的属主和属组。这个命令也很常用。例如root用户把自己的一个文件拷贝给用户xu,为了让用户xu能够存取这个文件,root用户应该把这个文件的属主设为xu,否则,用户xu无法存取这个文件。

用法:chmod [-R]  user[:group] 文件名/目录

或者

chown [-R] 账号名称:组名 文件或目录

参数:-R  递归更改,即目录下的所有子目录以及子目录下的所有文件 、目录的拥有者都更新成为这个拥有者。

1.chown userA:group 文件名;用户和用户组同时改变,:也可以用.(最好多用:格式)

将文件file1.txt 的拥有者设为users, 群体的使用者 jessie :

chown jessie:users file1.txt

2.chown -R userA:group 文件名/目录;递归改变目录下所有文件的拥有者和群组

将目录/tmp/src下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport :

chown -R lamport:users /tmp/src

3.chown user 文件名/目录(chown . user 文件名/目录)

把目录/his及其下的所有文件和子目录的属主改成wang,属组改成users.

$ chown - R wang.users /his

[root@localhost ~]# ls -l

总用量 1

-rwxrwxrwx 1 root root 12172 8月 15 23:18 qmfsun.txt

可以看到qmfsun.txt文件的所属用户组为root,所有者为root。执行下面命令,把qmfsun.txt文件的所有权转移到用户qmf:

[root@localhost ~]#chown qmf qmfsun.txt(chown . qmf qmfsun.txt);这个.可要可不要

[root@localhost ~]# ls -l

总用量 1

-rwxrwxrwx 1 qmf root 12172 8月 15 23:18 qmfsun.txt

4.chown :group 文件名/目录(或chown _:group 文件名/目录)

要改变所属组,可使用下面命令:

[root@localhost ~]# chown :group qmfsun.txt

[root@localhost ~]# ls -l

总用量 1

-rwxrwxrwx 1 user group 12172 8月 15 23:18 conkyrc.sample

如果没有指定所有者,则不会更改。 所属组若没有指定也不会更改,但当加上

“:”时 GROUP 会更改为指定所有者的所属组。

示例:

chown root /u 将 /u 的属主更改为”root”。

chown root:staff /u 和上面类似,但同时也将其属组更改为”staff”。

chown -hR root /u 将 /u 及其子目录下所有文件的属主更改为”root”。

范例:将install.log的拥有者改为bin这个账号:

[root@www ~]# chown bin install.log

[root@www ~]# ls -l

-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log

将install.log的拥有者与群组改回为root:

[root@www ~]# chown root:root install.log

[root@www ~]# ls -l

-rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log

当你复制文件给你之外的其他人时,由于复制行为(cp)会复制执行者的属性与权限,那么别人会无法使用你复制给他的文件所以你要更改这个文件的拥有者与群组

要更改文件 program.c 的所有者:

chown jim program.c;

program.c的用户访问权限现在应用到 jim。作为所有者,jim 可以使用

chmod

命令允许或拒绝其他用户访问 program.c。

要将目录 /tmp/src 中所有文件的所有者和组更改为用户 john 和组 build:

chown -R john:build /tmp/src

文件

/usr/bin/chown

chown命令

/etc/group

包含组标识的文件

/etc/passwd

包含用户标识的文件

权限规划:

前三位-》自己

中三位-》组

后三位-》其他人

d:代表目录

3. chgrp 改变文件或文件夹组

chgrp 改变群组

chgrp命令

功能:改变文件或目录所属的组。

用法:chgrp   [ -R]  群组名称  文件/目录;-R  递归更改,即目录下的所有子目录以及子目录下的所有文件 、目录的用户组都更新成为这个用户组。

该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。

例1:$ chgrp -R group /opt/local /book

改变/opt/local /book/及其子目录下的所有文件的属组为group。

改变用户和组所有权

为了改变文件或其它文件系统对象的所有者或组,分别使用 chown 或chgrp。这两个命令都要一个用户名或组名作参数,后面跟上一个或多个文件名。

# chown root /etc/passwd

# chgrp wheel /etc/passwd

也可以用 chown 命令的另一种形式同时设置所有者和组:

#chown root:wheel /etc/passwd(chown root.wheel /etc/passwd),这种方式用的比较多,所以chgrp用的少

另外:chown改变文件的所属组,需要用:

chgrp 群组名 文件名

除非您是超级用户,否则您不可以使用 chown,然而任何人都可以使用 chgrp 来将文件的组所有权改为他们所属的组。

范例:

[root@www ~]# chgrp users install.log

[root@www ~]# ls -l

-rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log

文件默认权限:umask

umask 就是指定 『目前使用者在创建文件或目录时候的权限默认值』

[root@www ~]# umask

0022 <==与一般权限有关的是后面三个数字!

[root@www ~]# umask -S

u=rwx,g=rx,o=rx

[root@www ~]# umask 002

umask 的分数指的是『该默认值需要减掉的权限!』因为 r、w、x 分别是 4、2、1 分

在默认权限的属性上,目录与文件是不一样的。 x 权限对於目录是非常重要的! 但是一般文件的创建则不应该有运行的权限,默认的情况如下:

若使用者创建为『文件』则默认『没有可运行( x )权限』,亦即只有 rw 这两个项目,也就是最大为 666 分

若使用者创建为『目录』,则由於 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777 分

例题:

假设你的 umask 为 003 ,请问该 umask 情况下,创建的文件与目录权限为?

答:

umask 为 003 ,所以拿掉的权限为 --------wx,因此:

文件: (-rw-rw-rw-) - (--------wx) = -rw-rw-r--

目录: (drwxrwxrwx) - (--------wx) = drwxrwxr--

umask决定了文件创建(包括目录)时默认访问权限。对于文件,执行权限不可以在创建时赋予。必须在创建后使用chmod命令。

umask值是777减去默认权限。

如umask为022,则文件默认访问权限为644,目录为755。

查看用户当前umask

[oracle@odilab ~]$ umask

0022

[oracle@odilab ~]$ umask 066

[oracle@odilab ~]$ umask

0066

[oracle@odilab ~]$ touch aa.txt

[oracle@odilab ~]$ ls -ltrh aa.txt

-rw------- 1 oracle oinstall 0 Jan 15 08:16 aa.txt

在bash中,通常在~/.bash_profile中配置umask。

1. 文件的默认权限

linux下当我们新建一个文件和目录时,该文件和目录的默认权限是什么?

通过umask命令来查看:

$ umask

0002

$ umask -S

u=rwx,g=rwx,o=rx

权限我们知道有r, w, x三种,umask返回4位的数字,第一位是特殊权限,先看后三位。

002权限表示 --------w-

通过-S参数,以符号类型显示。

2. 文件与目录权限

文件:

文件一般为数据记录,不需要执行(x)权限, 即  -rw-rw-rw-,最大为666.

目录:

目录的x权限表示用户能否进入, 默认应该所有权限打开, 即 drwxrwxrwx, 为777权限。

3. 用户默认权限计算

文件权限:

为最大权限减去umask权限

666 - 002 = (-rw-rw-rw-)- ( --------w-) = -rw-rw-r-- = 664

目录权限:

777 - 002 = (drwxrwxrwx)- ( d-------w-) = drwxrwxr-x = 775

$ touch a

$ mkdir b

$ ll

-rw-rw-r--  1 work work         0 Jun 15 18:59 a

drwxrwxr-x  2 work work      4096 Jun 15 19:00 b

一般root账号的umask为022,

一般用户为002.保留同组用户的写入权限。

Linux 文件、目录权限探索

2010-05-31 09:58:47|  分类: 学习笔记 |  标签:|字号大中

在Linux下,目录的x权限具有特殊的意义,举例说,如果用户Hi对A目录没有执行权限,即使有读写权限,也无法进入该目录,无法读取目录里面的文件b的内容,即使他对b拥有完全的权限rwx.相反,如果对A仅有执行权限,也可以进入该目录并读取其中的文件内容。

我做了个实验来验证了一下。

先以root账户在ganluo的家目录里创建了一个A目录,

[root@xiamingshi ganluo]# mkdir A

[root@xiamingshi ganluo]# ls -adl A

drwxr-xr-x. 2 root root 4096 2010-05-31 09:15 A

[root@xiamingshi ganluo]#

Hi对A目录仅有r-x权限。

以普通账户Hi切换到ganluo的家目录。查看权限,

[Hi@xiamingshi ~]$ cd ../ganluo

[Hi@xiamingshi ganluo]$ ls -adl .

drwxrwxrwx. 34 ganluo ganluo 4096 2010-05-31 08:29 .

[Hi@xiamingshi ganluo]$

Hi对ganluo目录拥有rwx的权限。

下面尝试进入ganluo下面的A目录

[Hi@xiamingshi ganluo]$ cd A

[Hi@xiamingshi A]$

可以进入。试着创建一个文件b,

[Hi@xiamingshi A]$ touch b

touch: cannot touch `b': Permission denied

[Hi@xiamingshi A]$

没有权限。

以root身份在A下创建一个b,查看权限,更改其所属用户及组。

[root@xiamingshi ganluo]# echo "更无柳絮因风起,唯有葵花向日倾!" >  A/b

[root@xiamingshi ganluo]# ls -al A/b

-rw-r--r--. 1 root root 47 2010-05-31 09:30 A/b

[root@xiamingshi ganluo]# chown Hi:Hi A/b

[root@xiamingshi ganluo]# ls -al A/b

-rw-r--r--. 1 Hi Hi 47 2010-05-31 09:30 A/b

[root@xiamingshi ganluo]#

Hi先退出A目录,并以root身份削去Hi对A的读权限。

[root@xiamingshi ganluo]# chmod o-r A

[root@xiamingshi ganluo]# ls -adl A

drwxr-x--x. 2 root root 4096 2010-05-31 09:30 A

再以Hi身份进入A目录,发现还是可以进入,这证明只有对一个目录有执行权限就可以进入该目录,

[Hi@xiamingshi ganluo]$ cd A

[Hi@xiamingshi A]$

以Hi的身份修改b的权限,赋予自己完全的权限。

[[Hi@xiamingshi A]$ chmod 700 b

[Hi@xiamingshi A]$ ls -al b

-rwx------. 1 Hi Hi 47 2010-05-31 09:30 b

虽然原来Hi对b仅有读写权限,但由于拥有对b的所有权,所以Hi可以修改b的权限。

Hi退出A目录后,依旧可以读取b的内容

[Hi@xiamingshi A]$ cd ..

[Hi@xiamingshi ganluo]$ cat A/b

更无柳絮因风起,唯有葵花向日倾!

以root身份修改A的权限,

[root@xiamingshi ganluo]# chmod 776 A

[root@xiamingshi ganluo]# ls -adl A

drwxrwxrw-. 2 root root 4096 2010-05-31 09:30 A

现在Hi对A目录有读写的权限,但是没有执行权限。

再以Hi身份尝试读取A下面的b文件的内容

[Hi@xiamingshi ganluo]$ cat A/b

cat: A/b: Permission denied

发现无法读取,没有权限

列出A的属性

[Hi@xiamingshi ganluo]$ ls -al A

ls: cannot access A/.: Permission denied

ls: cannot access A/..: Permission denied

ls: cannot access A/b: Permission denied

total 0

d????????? ? ? ? ?                ? .

d????????? ? ? ? ?                ? ..

-????????? ? ? ? ?                ? b

毕竟有读写的权限,还是可以列出其中的有什么文件、目录,但很多数据都变成问号了。

Logo

更多推荐