Linux 的文件权限与目录配置
本文数据主要针对 Fedora Core 4 的系统进行说明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而来, 这个 Red Hat Linux 9 并不是当前大家听到的 RHEL 喔!那是在 RHEL 出现之前的产品,基本上是在 2003 年以前的作品了!Fedora Core 4 则是在 2005 年 6 月份发布,使用的内核是 2.6.11 版,当时是很红的一个作品!只是生命周期太短,所以用这个 Fedora 系列来介绍 Server, 当时的决定确实有点莫名其妙了...
建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。那为何还需要编辑 Fedora Core 4 的数据呢? 鸟哥只想要做个自己曾经撰写过的文档内容保存而已啰! ^_^!最新文章请前往鸟站首页查阅啰!
Linux 最优秀的地方之一,就在于他的多人多任务的环境。 而为了让各个用户具有较安全的管理机制,因此文件的权限管理就变的很重要了。 Linux 一般将文件可访问的方式分为三个类别,分别是 owner/group/other, 且各有 read/write/execute 等权限。若管理得当,将会让您的 Linux 主机变的较为安全。 另外,您如果首次接触 Linux 的话,那么, 在 Linux 底下这么多的目录/文件,到底代表什么意义呢? 底下我们就来一一介绍呢!
[root@linux ~]# ls -al total 248 drwxr-x--- 9 root root 4096 Jul 11 14:58 . drwxr-xr-x 24 root root 4096 Jul 9 17:25 .. -rw------- 1 root root 1491 Jun 25 08:53 anaconda-ks.cfg -rw------- 1 root root 13823 Jul 10 23:12 .bash_history -rw-r--r-- 1 root root 24 Dec 4 2004 .bash_logout -rw-r--r-- 1 root root 191 Dec 4 2004 .bash_profile -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc -rw-r--r-- 1 root root 100 Dec 4 2004 .cshrc drwx------ 3 root root 4096 Jun 25 08:35 .ssh -rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log -rw-r--r-- 1 root root 5976 Jun 25 08:53 install.log.syslog [ 1 ][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ][ 7 ] [ 属性 ][链接][拥有者][群组][文件容量][ 修改日期 ][ 文件名 ]ls 是『list』的意思,与在早期的 DOS 年代的指令 dir 类似功能。 而参数『-al』则表示列出所有的文件 ( 包含隐藏档,就是文件名前面第一个字符为 . 的那种文件 ) 。如上所示,在你第一次以 root 身份登录 Linux 时,如果你输入指令后,应该有上列的几个东西, 先解释一下上面七个字段个别的意思:
[-][rwx][r-x][r--] 1 234 567 890 1 为:代表这个文件名为目录或文件(上面为文件) 234为:拥有人的权限(上面为可读、可写、可运行) 567为:同群组用户权限(上面为可读可运行) 890为:其他用户权限(上面为仅可读)
drwx------ 3 root root 4096 Jun 25 08:35 .ssh |
drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh |
例题一:如果有下面的两个文件,请说明两个文件的拥有者与其相关的权限为何?
-rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt -rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai答:
|
例题二:如果我的目录为底下的样式,请问 testgroup 这个群组的成员与其他人( others )是否可以进入本目录?
drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/答:
|
[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 的时候, 就会发生错误~注意喔!发生错误消息还是要努力的查一查错误消息的内容才好!
[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 呢?!或许您会觉得奇怪吧?!是的,确实有时候需要变更文件的拥有者的, 最常见的例子就是在 copy 文件给你之外的其他人时,我们使用最简单的 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 这个用户了,那他仍然无法修改的( 看属性就知道了吧! ), 所以你就必须要将这个文件的拥有者与群组修改一下啰!知道如何修改了吧!?呵呵!
[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』
例题三:将刚刚您的 .bashrc 这个文件的属性改回原来的 -rw-r--r-- 答:
|
chmod | u g o a |
+(加入) -(除去) =(设置) |
r w x | 文件或目录 |
[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请注意, u=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 ,就可以让该程序拥有运行的权限了。 是否很方便?
[root@linux ~]# cd /tmp [root@linux tmp]# mkdir testing [root@linux tmp]# chmod 744 testing [root@linux tmp]# touch testing/testing [root@linux tmp]# chmod 600 testing/testing # 这个 mkdir 是在创建目录用的指令!是 make directory 的缩写。 # 我们用 root 的身份在 /tmp 底下创建一个名为 testing 的目录, # 并且将该目录的权限变为 744 ,该目录的拥有者为 root 喔! # 另外, touch 可以用来创建一个没有内容的文件,因此, touch testing/testing # 可以创建一个空的 /tmp/testing/testing 文件喔! [root@linux tmp]# ls -al drwxr--r-- 2 root root 4096 Jul 14 01:05 testing # 仔细看一下,目录的权限是 744 ,且所属群组与用户均是 root 喔! # 接下来,我们将 root 的身份切换成为一般身份用户。 # 鸟哥的系统里面有个 dmtsai 的一般身份用户帐号,所以切换身份成为 dmtsai [root@linux tmp]# su dmtsai # 那个 su 的指令是用来『变换身份』的一个指令,我们未来会详细介绍。 # 注意看,底下这一行中,发现用户变为 dmtsai 了,而且提示字符变成 $ 了! # 也就是说,现在操作系统的人变成 dmtsai 了!那么 dmtsai 这个人对于 # /tmp/testing 是属于 others 的权限,那他可以对 /tmp/testing 干嘛? [dmtsai@linux tmp]$ ls -l testing <== 此时身份为 dmtsai total 0 ?--------- ? ? ? ? ? testing # 可以查阅里面的信息喔!因为dmtsai 具有 r 的权限,不过,毕竟权限不够, # 很多数据竟然是问号 (?) 来的~怪怪的紧~ [dmtsai@linux tmp]$ cd testing <== 此时身份为 dmtsai bash: cd: testing/: Permission denied # 发现了吗?即使我们具有 r 的权限,但是没有 x ,所以 # dmtsai 无法进入 /tmp/testing 喔! [dmtsai@linux tmp]$ exit [root@linux tmp]# chown dmtsai testing # 使用 exit 就可以离开 su 的功能了。我们将这个 testing 目录的拥有者设置为 # dmtsai ,此时 dmtsai 就成为 owner 了,那么这个用户又能干麻呢? [root@linux tmp]# su dmtsai [dmtsai@linux tmp]$ cd testing <== 此时身份为 dmtsai [dmtsai@linux testing]$ ls -l <== 此时身份为 dmtsai -rw------- 1 root root 0 Jul 14 01:13 testing # 再切换身份成为 dmtsai ,此时就能够进入 testing 了!查阅一下内容。 # 发现了 testing 这个文件存在喔!权限是只有 root 才能够访问~ # 那我们测试一下能否删除呢? [dmtsai@linux testing]$ rm testing <== 此时身份为 dmtsai rm: remove write-protected regular empty file `testing'? y # 竟然可以删除!这样理解了吗?!通过上面这个简单的步骤,您就可以清楚的知道, x 在目录当中是与『能否进入该目录』有关, 至于那个 w 则具有相当重要的权限,因为他可以让用户删除、更新、新建文件或目录, 是个很重要的参数啊!这样可以理解了吗?! ^_^
[root@linux ~]# ls -l /
drwxr-xr-x 2 root root 4096 Jul 14 05:22 bin
drwxr-xr-x 3 root root 4096 Jul 9 05:18 boot
drwxr-xr-x 9 root root 4880 Jul 11 00:45 dev
drwxr-xr-x 6 root root 4096 Jun 29 01:06 disk1
drwxr-xr-x 3 root root 4096 Jun 25 08:53 disk2
drwxr-xr-x 83 root root 12288 Jul 14 05:23 etc
drwxr-xr-x 6 root root 4096 May 30 20:07 home
drwxr-xr-x 10 root root 4096 Jul 14 05:23 lib
drwx------ 2 root root 16384 Jun 25 16:21 lost+found
drwxr-xr-x 3 root root 4096 Jun 25 19:34 media
drwxr-xr-x 2 root root 4096 Apr 25 23:54 misc
drwxr-xr-x 2 root root 4096 May 23 12:28 mnt
drwxr-xr-x 2 root root 4096 May 23 12:28 opt
dr-xr-xr-x 59 root root 0 Jul 10 01:25 proc
drwx------ 9 root root 4096 Jul 13 11:31 root
drwxr-xr-x 2 root root 4096 Jul 14 05:22 sbin
drwxr-xr-x 2 root root 4096 Jun 25 08:23 selinux
drwxr-xr-x 2 root root 4096 May 23 12:28 srv
drwxr-xr-x 10 root root 0 Jul 10 01:25 sys
drwxr-xr-x 10 root root 4096 Jun 25 20:24 system
drwxrwxrwt 10 root root 4096 Jul 14 05:23 tmp
drwxr-xr-x 14 root root 4096 Jun 25 08:27 usr
drwxr-xr-x 24 root root 4096 Jun 25 20:16 var
从属性的角度来看,上面的文件名每个都是『目录名称』,较为特殊的是 root
,由于 root 这个目录是管理员 root 的家目录,这个家目录可重要了!
所以一定要设置成较为严密的 700 ( rwx------ )这个属性才行呐!如果以较为完整的树状目录来视察的话,
可以将整个 Linux 的树状目录绘制成下图:目录 | 应放置文件内容 |
/ | 根目录 root (/),一般建议在根目录底下只接目录,不要直接有文件在 / 底下。 根目录是开机的时候系统第一个挂载的 partition ,所以,所有开机过程会用到的文件, 应该都要放置在这个 partition 当中。举例来说, /etc, /bin, /dev, /lib, /sbin 这五个次目录都应该要与根目录连在一起,不可独立成为某个 partition 呢! |
/bin, /usr/bin, /usr/local/bin | 除了 /bin 之外, /usr/local/bin, /usr/bin 也是放置『用户可运行的 binary file 的目录』喔!举例来说, ls, mv, rm, mkdir, rmdir, gzip, tar, cat, cp, mount 等等重要指令都放在这个目录当中。 |
/boot | 这个目录主要的目的是放置 Linux 系统开机会用到的文件。 开机会用到什么呢?没错~就是 Linux 的内核文件。这个目录底下文件名为 vmlinuz 的就是 Linux 的 Kernel 啦!粉重要的东西! 而如果你的开机管理程序 (loader) 选择 grub 的话,那么这个目录内还有 /boot/grub 这个次目录呦! |
/dev | 在 Linux 系统上,任何设备与周边设备都是以文件的型态存在于这个目录当中的。 您只要通过访问这个目录底下的某个文件,就等于访问某个设备啰~ 主要又分为周边设备 (character device),例如键盘、鼠标等;以及保存设备 (block device), 例如硬盘、光盘等等。在此目录下的文件会多出两个属性,分别是 major device number , 与 minor device number 。我们的系统内核就是通过这两个 number 来判断设备的呢! 比要重要的文件有 /dev/null, /dev/tty[1-6], /dev/ttyS*, /dev/lp*, /dev/hd*, /dev/sd* 等等 |
/etc | 系统主要的设置档几乎都放置在这个目录内,例如人员的帐号密码档、
各种服务的启始档等等。一般来说,这个目录下的各文件属性是可以让一般用户查阅的,
但是只有 root 有权力修改。并且在此目录下的文件几乎都是 ASCII 的纯文本文件哩。
不过, FHS 建议不要放置可运行档在这个目录中喔。比较重要的文件有:
/etc/inittab, /etc/init.d/, /etc/modprobe.conf,
/etc/X11, /etc/fstab, /etc/sysconfig/ 等等。另外,其下重要的目录有:
|
/home | 这是系统缺省的用户家目录 (home directory)。在你添加一个一般用户帐号时,
缺省的用户家目录都会规范到这里来。比较重要的是,家目录有两种代号喔: ~:代表目前这个用户的家目录,而 ~dmtsai :则代表 dmtsai 的家目录! |
/lib, /usr/lib, /usr/local/lib | 系统会使用到的函数库放置的目录。 程序在运作的过程中,可能会调用一些额外的功能参数,那需要函数库的协助! 这些函数库就放在此处。比较重要的是 /lib/modules 这个目录内会摆放 kernel 的相关模块喔! |
/lost+found | 系统不正常产生错误时,会将一些遗失的片段放置于此目录下, 通常这个目录会自动出现在某个 partition 最顶层的目录下。例如你加装一棵硬盘于 /disk 中, 那在这个目录下就会自动产生一个这样的目录 /disk/lost+found |
/mnt /media | 这是软碟与光盘缺省挂载点的地方;通常软碟挂在 /mnt/floppy 下,而光盘挂在 /mnt/cdrom 下,不过也不一定啦!只要你高兴,随便找一个地方来挂载也可以呀!另外,目前也规划出另一个 /media 的目录呢!与 /mnt 有点类似啦~ |
/opt | 这是给主机额外安装软件所摆放的目录。举例来说, FC4 使用的是 Fedora 社群开发的软件, 如果您今天想要自行安装新的 KDE 桌面软件的话,可以将该软件安装在这个目录下的意思。 不过,以前的 Linux 系统中,我们还是习惯放置在 /usr/local 目录下呢! |
/proc | 这个目录本身是一个『虚拟文件系统』喔!他放置的数据都是在内存当中, 例如系统内核、形成信息、周边设备的状态及网络状态等等。因为这个目录下的数据都是在内存当中, 所以本身不占任何硬盘空间啊!比较重要的文件例如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/* 等等。 |
/root | 系统管理员 (root) 的家目录。之所以放在这里, 是因为我们提过,系统第一个开机就被挂载的 partition 为 / , 而我们希望 /root 能够与 / 放在同一块 partition 上面之故。 |
/sbin, /usr/sbin, /usr/local/sbin | 放置一些系统管理员才会动用到的运行指令,例如: fdisk, mke2fs, fsck, mkswap, mount 等等。与 /bin 不太一样的地方,这几个目录是给 root 等系统管理用的。但是本目录下的运行档还是可以让一般用户用来『察看』而不能设置喔! |
/srv | 一些服务启动之后,这些服务所需要取用的数据目录。举例来说,WWW 服务器需要的网页数据就可以放置在 /srv/www 里面。 |
/tmp | 这是让一般用户或者是正在运行的进程暂时放置文件的地方。 这个目录是任何人都能够访问的,所以您需要定期的清理一下。当然,重要数据不可放置在此目录啊! |
/usr | 由 FHS 规范的第二层内容,在 /usr 此目录下,包含系统的主要程序、
图形接口所需要的文件、额外的函数库、本机端所自行安装的软件,以及共享的目录与文档等等,
都可以在这个目录当中发现。事实上,他有点像是 Windows 操作系统当中的『Program files』与
『WinNT』这两个目录的结合!在此目录下的重要次目录有:
|
/var | 这个目录也很重要,也是 FHS 规范的第二层目录内容。他主要放置的是针对系统运行过程中,
常态性变动的文件放置的目录。举例来说,例如缓存文件 (cache) 或者是随时变更的注册表
(log file) 都是放在这个目录中的。此外,某些软件运行过程中会写入的数据库文件,
例如 MySQL 数据库,也都写入在这个目录中!很重要吧!他底下的重要目录有:
|
『为什么你想要从 ext 2转换到 ext3 呢?有四个主要的理由:可利用性、数据完整性、速度及易于转换』
『可利用性』,他指出,这意味着从系统中止到快速重新复原而不是持续的让 e2fsck 首席执行官时间的修复。ext3
的日志式条件可以避免数据毁损的可能。他也指出:
『除了写入若干数据超过一次时,ext3 往往会较快于 ext2,因为 ext3 的日志使硬盘读取头的移动能更有效的进行』
然而或许决定的因素还是在Johnson先生的第四个理由中。 『它是可以轻易的从 ext2 变更到 ext3 来获得一个强而有力的日志式文件系统而不需要重新做格式化』。『那是正确的,为了体验一下 ext3 的好处是不需要去做一种长时间的,冗长乏味的且易于产生错误的备份工作及重新格式化的动作』。 |