zoukankan      html  css  js  c++  java
  • 更改文件权限

    6.2.2 更改文件权限
    我们已经知道文件权限对于系统的安全重要性了,也知道文件权限与用户与用户组的关系了,那么,如何修改文件的权限呢?我们可以修改多少文件权限呢?其实,一个文件的权限很多。我们先介绍几个简单的,例如:用户组、拥有者、各种身份的权限等等。
    • chgrp:改变文件所属用户组 。
    • chown:改变文件拥有者。
    • chmod:改变文件的属性、SUID等特性。
    更改所属用户组, chgrp
    改变文件的用户组很简单,直接用chgrp即可,这个命令就是change group(改变用户组)的缩写。这样就很好记了。不过,请记住,要改变成为的用户组名称,必须在 /etc/group里存在,否则就会显示错误。
    假设以root的身份登入FC4,那么,在你的家目录内有一个install.log文件,如何改变该文件的用户组呢?假设你已经知道在 /etc/group里已经存在一个名为users的用户组,但是,testing这个用户组名字就不存在 /etc/group中了,此时改变用户组成为users与testing,会有什么现象发生呢?
    [root@linux ~]# chgrp [-R] dirname/filename ...
    参数:
    -R : 进行递归( recursive )的持续更改,即连同子目录下的所有文件、目录
    都更新成为这个用户组。常常用在更改某一目录的情况。
    范例:
    [root@linux ~]# chgrp users install.log
    [root@linux ~]# ls -l
    -rw-r--r--  1 root users 68495 Jun 25 08:53 install.log
    [root@linux ~]# chgrp testing install.log
    chgrp: invalid group name `testing' <== 出现错误信息~找不到这个用户组名~
    发现了吗?文件的用户组被改成users了,但要改成testing的时候,就会发生错误。注意,出现错误信息,还是要查查错误信息的内容才好。
    更改文件拥有者, chown
    那么,如何改变一个文件的拥有者呢?很简单。既然改变用户组是change group,那么改变拥有者就是change owner(改变拥有者)。这就是chown这个命令的用途,要注意的是,用户必须是已经存在系统中的,也就是在 /etc/passwd这个文件中有记录的用户名称才可改变。
    chown的用途很多,还可以顺便直接修改用户组的名称。此外,如果要连目录下的所有子目录或文件同时更改文件拥有者的话,直接加上 -R的参数即可。我们来看看语法与范例:
    [root@linux ~]# chown [-R] 账号名称 文件或目录
    [root@linux ~]# chown [-R] 账号名称:用户组名称 文件或目录
    参数:
    -R : 进行递归( recursive )的持续更改,即连同子目录下的所有文件、目录
    都更新成为这个用户组。常常用在更改某一目录的情况。
    范例:
    [root@linux ~]# chown bin install.log
    [root@linux ~]# ls -l
    -rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log
    [root@linux ~]# chown root:root install.log
    [root@linux ~]# ls -l
    -rw-r--r--  1 root root 68495 Jun 25 08:53 install.log
    我们知道如何改变文件的用户组与拥有者了,那么,什么时候要使用chown或chgrp呢?或许你会觉得奇怪吧?是的,确实有时候需要更改文件的拥有者的,最常见的例子就是在复制文件给其他人时,我们使用最简单的cp来说明好了:
    [root@linux ~]# cp 来源文件 目的文件  
    假设今天要将 .bashrc文件复制成为 .bashrc_test,且是要给bin这个人,你可以这样做:
    [root@linux ~]# cp .bashrc .bashrc_test
    [root@linux ~]# ls -al .bashrc*
    -rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
    -rw-r--r--  1 root root 395 Jul 13 11:31 .bashrc_test
    怎么办?.bashrc_test还是属于root所有,如此一来,即使将文件拿给bin用户了,他仍然无法修改(看属性就知道了),所以就必须修改这个文件的拥有者与用户组。
    更改9个属性, chmod
    文件属性的改变使用chmod命令,但是,属性的设置方法有两种,分别可以使用数字或者是符号。
    • 数字类型改变文件权限
    Linux文件的基本属性有9个,分别是owner/group/others组别的read/write/ excute属性,先复习一下刚刚上面提到的数据:
    -rwxrwxrwx 

    这9个属性是三个一组。其中,可以使用数字来表示各个属性,各属性的对照表如下:
    r:4
    w:2
    x:1

    同一组(owner/group/others)的3个属性(r/w/x)是需要累加的,例如当属性为 [-rwxrwx---] 则是:
    owner = rwx = 4+2+1 = 7
    group = rwx = 4+2+1 = 7
    others= --- = 0+0+0 = 0

    所以,等一下设置属性的更改时,该属性的数字就是770。更改属性的命令chmod的语法是这样的:
    [root@linux ~]# chmod [-R] xyz 文件或目录 

    参数:
    xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
    -R  : 进行递归( recursive )的持续更改,即连同子目录下的所有文件、目录
    都更新成为这个用户组。常常用在更改某一目录的情况。
    举例来说,如果要将 .bashrc这个文件所有的属性都打开,那么就发出命令:
    [root@linux ~]# ls -al .bashrc
    -rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
    [root@linux ~]# chmod 777 .bashrc
    [root@linux ~]# ls -al .bashrc
    -rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc

    看到了吗?属性改变了。由于一个文件有三组属性,所以可以发现上面777为三组,而由于我们将所有的属性都打开,所以数字都相加,即“r+w+x = 4+2+1 = 7”。
    如果要将属性变成“-rwxr-xr--”呢?那么就成为 [4+2+1][4+0+1][4+0+0]=754。所以需要发出命令chmod 754 filename。最常发生的一个问题就是,常常我们以vi编辑shell的文字文件后,其属性通常是 -rw-rw-rw-,也就是666属性,如果要将它变成可执行文件,并且不要让其他人修改此文件的话,那么就需要 -rwxr-xr-x这个755的属性,所以就要使用chmod 755 test.sh。
    另外,有些文件不希望被其他人看到,例如 -rwxr-----,那么就使用命令chmod 740 filename。
    例题3:将 .bashrc文件的属性改回原来的 -rw-r--r--
    答:
    chmod 644 .bashrc
    • 符号类型改变文件权限
    还有一个改变属性的方法。从之前的介绍中可以发现,基本上就9个属性,分别是 (1)user (2)group (3)others三组。我们就可以通过u, g, o来表示三组的属性。此外,a表示all,即全部的三组。读写属性可以写成r, w, x。也就是可以使用下面的方式来看:
    chmod
    u
    g
    o
    a
    +(加入)
    -(除去)
    =(设置)
    r
    w
    x
    文件或目录
    假如我们要“设置”一个文件的属性为“-rwxr-xr-x”,基本上就是:
     user (u):具有可读、可写、可执行的权限。
     group与others (g/o):具有可读与执行的权限。
    所以就是:
    [root@linux ~]# chmod  u=rwx,go=rx  .bashrc 

    # 注意。那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格。
    [root@linux ~]# ls -al .bashrc
    -rwxr-xr-x  1 root root 395 Jul  4 11:45 .bashrc
    请注意,r=rwx,og=rx这一段文字之间并没有空格隔开。那么,假如是“-rwxr-xr--”?可以使用“chmod u=rwx,g=rx,o=r filename”来设置。此外,如果不知道原先的文件属性,而只想要增加 .bashrc文件的每个人均可写入的权限,那么就可以使用:
    [root@linux ~]# ls -al .bashrc
    -rwxr-xr-x  1 root root 395 Jul  4 11:45 .bashrc
    [root@linux ~]# chmod  a+w  .bashrc
    [root@linux ~]# ls -al .bashrc
    -rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc

    而如果是要将属性去掉,而不更改其他属性呢?例如要去掉所有人的x属性,则:
    [root@linux ~]# chmod  a-x  .bashrc
    [root@linux ~]# ls -al .bashrc
    -rw-rw-rw-  1 root root 395 Jul  4 11:45 .bashrc

    知道 +, -, = 的不同点了吗?+ 与 - 的状态下,只要是没有指定到的项目,则该属性“不会变动”。例如,上面的例子中,由于仅以 - 去掉x,则其他两个保持当时的值不变。多多练习一下,你就会知道如何改变属性。这在某些情况下很好用。举例来说,你想要教一个人如何让一个程序可以拥有执行的权限,又不知道该文件原本的权限是什么,此时,利用chmod a+x filename,就可以让该程序拥有执行的权限了。很方便。
  • 相关阅读:
    Knockout应用开发指南 第八章:简单应用举例(2)
    微软ASP.NET站点部署指南(7):生产环境部署
    Knockout应用开发指南 第七章:Mapping插件
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(6)
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(5)
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(3)
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(9)
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(8)
    Microsoft Visual Studio .NET 2003 引导程序插件下载地址(非官方)
    Vs2010在没有安装SQL Server 2005/2008 Express时如何连接MDF数据文件?
  • 原文地址:https://www.cnblogs.com/benio/p/1824968.html
Copyright © 2011-2022 走看看