一:用户与用户组
Linux是一个多用户操作系统,那么如何保证安全性和隐私性呢?即我拥有的东西我只想让我授权的别的用户看到,而不是谁都可以进我家翻箱倒柜随便来?先了解几个概念之后、就会慢慢了解Linux如何实现。
1、文件拥有者
Linux下所有的东西都是文件、不管是具体文件还是目录。那么当多人同机操作的时候、考虑到每个人的隐式权和个人喜好,文件拥有者就相当重要了,比如A有一个存放情书的文件夹,那A估计不会喜欢谁都能看这些情书,那么A就可以用密码箱锁起来,别人就不能随意翻动了。A就是这个密码箱(可看成文件夹)的拥有者。
2、用户组的概念
用户组主要是针对开发团队来说的、假如在我的主机上面有两个团体,这第一个团体名称为 testgroup 而他的成员是 test1, test2, test3 三个,第二个团体名称为 treatgoup 他的团员为 treat1, treat2, treat3,这两个团体之间是互相有竞争性质的,但是却又要缴交同一份报告,然而每组团员又需要同时可以修改自己的团体内任何人所建立的档案,且不能让非自己团体以外的人看到自己的档案内容!这个时候怎么办?在 Linux 底下可经由简易的档案权限设定,就能限制非自己团队( 亦即是群组 )的其它人不能够阅览内容!而且亦可以让自己的团队成员可以修改我所建立的档案!同时,如果自己还有私人隐密的文件,仍然可以设定成让自己的团队成员也看不到自己档案数据!另外,如果 teacher 这个账号是 testgroup 与 treatgroup 这两个群组的老师,他想要同时观察两者的进度,因此需要两边的群组都能够进去观看,这个时候,您可以设定 teacher 这个账号,同时支持 testgroup 与 treatgroup 这两个群组、也就是说,每个人都可以有多个群组的支持!
更具体点的例子
假设有一家人,家里只有三兄弟,分别是王大毛、王二毛与王三毛三个人,而这个家庭是登记在王大毛的名下的!所以,『王大毛家有三个人,分别是王大毛、王二毛与王三毛』,而且这三个人都有自己的房间,并且共同拥有一个客厅!
由于王家三个人各自拥有自己的房间,所以,王二毛虽然可以进入王三毛的房间,但是二毛不能翻三毛的抽屉喔!因为三毛不想让别人乱翻!因为抽屉里面可能有三毛自己私人的东西,例如情书,日记等,这是『私人的空间』,所以当然不能让二毛拿!
由于共同拥有客厅,三兄弟都可以使用!因为是一家人! 那个『王大毛家』就是所谓的『群组』,至于三兄弟就是分别为三个『使用者』,而这三个使用者是在同一个群组里面的!而三个使用者虽然在同一群组内,但是我们可以设定『权限』,好让某些使用者个人的信息不被群组的所有人查询,以保有个人『私人的空间』!而设定群组共享,则可让大家共同分享!
3、其他人的概念
那么今天又有个人,叫做张小猪,他是张小猪家的人,与王家没有关系!这个时候,除非王家认识张小猪,然后开门让张小猪进来王家,否则张小猪永远没有办法进入王家,更不要说进到王三毛的房间!不过,如果张小猪透过关系认识了三毛,并且跟王三毛成为好朋友,那么张小猪就可以透过三毛进入王家!那个张小猪就是所谓的『其它人, Others 』!因此,我们就可以知道,在 Linux 里面,任何一个档案都具有『User, Group 及 Others』三个权限!
二:Linux文件权限
这部分是我们一定要掌握的东西、Linux所操作的就是文件、如果最基本的都搞不清楚、那么下一步就很难进行了。
1、Linux文件属性
输入命令:ls –al 会有下面显示
drwxr-xr-x 23 root root 4096 Feb 16 13:35 ..
-rw-r--r-- 1 root root 1210 Feb 10 06:03anaconda-ks.cfg
a) 第一栏代表这个档案的属性:
第一个属性代表这个档案是『目录、档案或连结文件』:
当为[ d ]则是目录,例如上表的第 1行;
当为[ - ]则是档案,例如上表的第 2行;
若是[ l ]则表示为连结档(linkfile);
若是[ b ]则表示为装置文件里面的可供储存的接口设备;
若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标。
接下来的属性中,三个为一组,且均为『rwx』的三个参数的组合。其中,[ r ]代表可读、[ w ]代表可写、[ x ]代表可执行:
第一组为『拥有人的权限』,
第二组为『同群组的权限』;
第三组为『其它非本群组的权限』。
[-][rwx][r-x][r--]
1 234 567 890
1 为:代表这个文件名为目录或档案(上面为档案)
234为:拥有人的权限(上面为可读、可写、可执行)
567为:同群组使用者权限(上面为可读可执行)
890为:其它使用者权限(上面为仅可读)
除此之外,需要特别留意的是x 这个标号!若文件名为一个目录的时候,例如上表中的 .ssh 这个目录:
drwx------ 2 root root 4096 Feb 10 00:44.ssh
可以看到这是一个目录,而且只有 root 可以读写与执行。但是若为底下的样式时,请问非 root 的其它人是否可以进入该目录呢?
drwxr--r-- 2 root root 4096 Feb 10 00:44.ssh
似乎好像是可以!因为有可读[ r ]存在!『错!』答案是非 root 这个账号的其它使用者均不可进入 .ssh 这个目录,为什么呢?因为 x 与目录 的关系相当的重要,如果您在该目录底下不能执行任何指令的话,那么自然也就无法执行 ls, cd 等指令,所以,也就无法进入了,因此,请特别留意的是,如果您想要开放某个目录让一些人进来的话,请记得将该目录的 x 属性给开放!
另外,你也必须要更加的小心的是,在 Windows 底下一个档案是否具有执行的能力是藉由『附档名』来执行的,例如:.exe, .bat, .com 等等,但是在 Linux 底下,我们的档案是否能执行,则是藉由是否具有 x 这个属性来决定的!所以,跟档名是没有绝对的关系的!这点还请特别留意!
b). 第二栏表示为连结占用的节点(i-node) ( 若为目录时,通常与该目录底下还有多少目录有关 );
c). 第三栏表示这个档案(或目录)的『拥有人』;
d). 第四栏表示拥有人的群组;
这里再次解释一下,在 Linux 中,你的 ID ( 如 root 或 test 等账号均是所谓的 ID ) 即是你的身份,而且你还有附属在一个或多个群组之下,例如刚刚我们上面提到的,你有一个团体 ( 即群组 ) 代号为 testgroup ,且这个群体里有三个人,其代号分别是 test1, test2, 与 test3,则这三个人为同一群组即 testgroup!那么如果以上图的[-rwxrwx---]的档案属性来看,如果该档案属于 test1 所有,那么 test2, test3 亦有读、写、执行的权力,因为他们都属于同一个 group !而如果您不是属于 test1, test2, test3 的任何一个人,也不属于 testgroup 这个群组时,那么您将不具备读、写、执行这个档案的权限了!
e). 第五栏为这个档案的大小;
f). 第六栏为这个档案的建档日期或者是最近的修改日期,分别为月份、日期及时间。请特别留意,如果您是以繁体中文来进行安装您的 Linux 时,那么预设的语系可能会被改为中文。而由于中文无法显示在文字型态的终端机上面,所以这一栏会成为乱码,这个时候,请修改一下 /etc/sysconfig/i18n 这个档案里面的『 LC_TIME 』修改为:『 LC_TIME=en 』再储存离开,再登入一次,就可以得到英文字形显示的日期了!那么如何修改该档案?以 root 身份用 vi 修改!;
g). 第七栏为这个档案的档名,如果档名之前多一个『 . 』,则代表这个档案为『隐藏档』,例如.bashrc_history档名即是隐藏档,由于我们有下一个参数为 ls -al,所以连隐藏档都列出来,如果你只输入 ls 则档名有加『 . 』的档案就不会被显示出来!
2、更改文件权限
chgrp :改变档案所属群组
chown :改变档案所属人
chmod :改变档案的属性、 SUID 、等等的特性
会在以后笔记中详细记录。
三:Linux目录配置
1、主要目录列表
/bin
这是放例如: ls, mv, rm, mkdir, rmdir, gzip, tar, telnet, 及 ftp 等等常用的执行档的地方,有时候这个目录的内容与 /usr/bin 是一样的,是给一般使用者使用的执行程序放置的所在!
/boot
这里就是放置你 Linux 核心与开机相关档案的地方,这个目录底下的 vmlinuz-xxx 就是 Linux 的 Kernel !而如果你的开机管理程序选择 grub 的话,那么这个目录内还有 /boot/grub 这个次目录!
/dev
摆放一些与装置有关的档案。基本上 Unix 或 Linux 系统均把装置当成是一个档案来看待,例如 /dev/fd0 代表软盘,亦即 Windows 系统下的 A 槽,而 /dev/cdrom 则代表光盘,等等!而如上所述,在这个目录底下的档案型态通常分为两种,分别是管理磁盘 Input/Output 的 Block 档案与周边的 Character 档案。
/etc
系统在开机过程中需要读取的档案均在这个目录中,例如 Lilo 的参数、人员的账号与密码、系统的主要设定、http 架站的参数内容、你所要开启的服务项目等等都在这个目录中,所以在这个目录下工作的时候,请记得一定要备份,否则档案被改掉了是很麻烦的!
/etc/rc.d
这个路径主要在记录一些开关机过程中的 scripts 档案, scripts 有点像是 DOS 下的批次档(.bat檔名)
/etc/rc.d/init.d
所有服务预设的启动 scripts 都是放在这里的,例如要启动与关闭 iptables 的话,可以:
/etc/rc.d/init.d/iptables start
/etc/rc.d/init.d/iptables stop
/home
基本上,这是系统预设的使用者的家目录( home directory ),在你新增一般使用者账号的时候,预设的使用者家目录都在这里设定好!
/lib
在 Linux 执行或编译一些程序的时候,均会使用到一些函式库(library),就在这个目录下
/mnt
这是软盘与光盘预设挂载点的地方;通常软盘挂在 /mnt/floppy 下,而光盘挂在 /mnt/cdrom 下,不过不一定、你可以随便找一个地方来挂载!
/proc
系统核心与执行程序的一些信息。例如你的网络状态的问题!这个目录将在启动 Linux 的时候自动的被挂上,而且该目录底下不会占去硬盘空间!因为里面都是『内存』内的数据
/root
系统管理员的家目录
/sbin
放置一些系统管理常用的程序,例如: fdisk, mke2fs, fsck, mkswap, mount 等等。与 /bin 不太一样的地方,这个目录下的程序通常是给 root 等系统管理员使用的程序!
/tmp
这是让一般使用者暂时存放档案的地方,例如你在安装 Linux 下的软件时,可能软件预设的工作目录就是 /tmp ,所以你要定期的清理一下,当然,重要数据最好不要放在这里!
/usr
这是最重要的一个目录了,里面含有相当多的系统信息,内有许多目录,用来存放程序与指令等等。这个目录有点像是 Windows 底下的『Program Files』那个目录
/usr/bin
放置可执行程序,如前所说,这个目录的档案与 /bin 几乎是相同的。
/usr/include
一些套件的header檔。基本上,当我们在以 tarball 方式( *.tar.gz 的方式安装软件)安装某些数据时,会使用到的一些函式库都在这个目录底下!
/usr/lib
内含许多程序与子程序所需的函式库。
/usr/sbin
放置管理者使用程序,与 /sbin 类似的功能
/var
这个目录可就重要了!所有服务的登录文件或错误讯息档案(log files)都在 /var/log 里面,此外,一些数据库如 MySQL 的数据库则在 /var/lib 里头,此外,使用者未读邮件邮件的预设放置地点为 /var/spool/mail !
2、需要注意的目录
在 Linux 系统中,有几个目录是特别需要注意的,以下提供几个需要注意的目录,以及预设相关的用途:
a) /etc:这个目录相当重要,如前所述,你的开机与系统数据文件均在这个目录之下,因此当这个目录被破坏,那你的系统大概也就差不多该死掉了!而在往后的文件中,你会发现我们常常使用这个目录下的 /etc/rc.d/init.d 这个子目录,因为这个 init.d 子目录是开启一些 Linux 系统服务的 scripts (可以想成是批次檔)的地方。而在 /etc/rc.d/rc.local 这个档案是开机的执行档,有点像是旧 Windows 系统下的 autoexec.bat 及 config.sys 檔。所以,如果你有需要在开机加载的服务或执行档案,可以写在这个档案的最后一行,则开机时就会自动帮你加载执行档了!
b) /bin, /sbin, /usr/bin,/usr/sbin:这是系统预设的执行文件的放置目录,例如 root 常常使用的 userconf, netconf, perl, gcc, c++等等的数据都放在这几个目录中,所以如果你在提示字符下找不到某个执行档时,可以在这四个目录中查一查!其中, /bin, /usr/bin 是给系统使用者使用的指令,而 /sbin, /usr/sbin 则是给系统管理员使用的指令!
c) /usr/local:这是系统预设的让你安装你后来升级的套件的目录。例如,当你发现有更新的 Web 套件(如 Apache )可以安装,而你又不想以 rpm 的方式升级你的套件,则你可以将 apache 这个套件安装在 /usr/local 底下。安装在这里有个好处,因为目前大家的系统都是差不多的,所以如果你的系统要让别人接管的话,也比较容易上手!也比较容易找的到数据!因此,如果你有需要的话,通常我都会将 /usr/local/bin 这个路径加到我的 path 中。
d) /home:这个是系统将有账号的人口的家目录设置的地方。
e) /var:这个路径就重要了!不论是登入、各类服务的问题发生时的记录、以及常态性的服务记录等等的记录目录,所以当你的系统有问题时,就需要来这个目录记录的档案数据中察看问题的所在!而 mail 的预设放置也是在这里!
f) /usr/share/man, /usr/local/man:这两个目录为放置各类套件说明档的地方,例如你如果执行 man man,则系统会自动去找这两个目录下的所有说明文件,如果有相同的数据就会显示出来!