Linux最好的地方之一就在于他的多用户多任务环境。为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变得很重要了。Linux一般将文件可存取的身份分为三个类别,分别是owner/group/others,且三种身份各有read/write/execute等权限。
5.1 使用者与群组
1.文件拥有者
“使用者与群组”的功能是健全而好用的一个安全防护。Linux是多用户多任务系统,因此常常会有多人同时使用这部主机来工作的情况。
2.群组概念
群组最有用的功能,就是当你在团队开发资源的时候。举例来说,假设有两组专题生在我的主机里面,第一个专题组别为projecta,里面的成员有 class1, class2, class3三个;第二个专题组别为projectb,里面的成员有class4, class5, class6。 这两个专题之间是有竞争性质的,但却要缴交同一份报告。每组的组员之间必须要能够互相修改对方的数据, 但是其他组的组员则不能看到本组自己的文件内容,此时该如何是好?
在Linux下面这样的限制很简单。我可以经由简易的文件权限设置,就能限制非自己团队(即是群组) 的其他人不能够阅览内容。而且亦可以让自己的团队成员可以修改我所创建的文件! 同时,如果我自己还有私人隐密的文件,仍然可以设置成让自己的团队成员也看不到我的文件数据。
另外,如果teacher这个帐号是projecta与projectb这两个专题的老师, 他想要同时观察两者的进度,因此需要能够进入这两个群组的权限时,你可以设置teacher这个帐号, “同时支持projecta与projectb这两个群组!”,也就是说:每个帐号都可以有多个群组的支持。
Linux使用者身份与群组记录的文件
在我们Linux系统当中,默认的情况下,所有的系统上的帐号与一般身份使用者,还有那个root的相关信息, 都是记录在/etc/passwd这个文件内的。至于个人的密码则是记录在/etc/shadow这个文件下。 此外,Linux所有的群组名称都纪录在/etc/group内!这三个文件可以说是Linux系统里面帐号、密码、群组信息的集中地。
5.2 Linux文件权限概念
5.2.1 Linux文件属性
ls这一个察看文件的指令。在dmtsai登陆系统,然后使用su-切接身份成为root后,下达“ls-al”看看,会有下面的:
ls是“list”的意思,重点在显示文件的文件名与相关属性。而选项“-al”则表示列出所有的文件详细的权限与属性 (包含隐藏文件,就是文件名第一个字符为“ . ”的文件)。如上所示,在你第一次以root身份登陆Linux时, 如果你输入上述指令后,应该有上列的几个东西,先解释一下上面七个字段个别的意思:
这个地方最需要注意了!仔细看的话,你应该可以发现这一栏其实共有十个字符:(图5.2.1及图5.2.2内的权限并无关系)
第一个字符代表这个文件是“目录、文件或链接文件等等”:
当为[ d ]则是目录,例如上表文件名为“.config”的那一行;
当为[ - ]则是文件,例如上表文件名为“initial-setup-ks.cfg”那一行;
若是[ l ]则表示为链接文件(link file);
若是[ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取设备);
若是[ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备)。
接下来的字符中,以三个为一组,且均为“rwx” 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
第一组为“文件拥有者可具备的权限”,以“initial-setup-ks.cfg”那个文件为例, 该文件的拥有者可以读写,但不可执行;
第二组为“加入此群组之帐号的权限”;
第三组为“非本人且没有加入本群组之其他帐号的权限”。
例题:若有一个文件的类型与权限数据为“-rwxr-xr--”,请说明其意义为何?答:先将整个类型与权限数据分开查阅,并将十个字符整理成为如下所示:
> [-][rwx][r-x][r--] > 1 234 567 890
1 为:代表这个文件名为目录或文件,本例中为文件(-); 234为:拥有者的权限,本例中为可读、可写、可执行(rwx); 567为:同群组使用者权限,本例中为可读可执行(rx);890为:其他使用者权限,本例中为可读(r),就是只读之意
同时注意到,rwx所在的位置是不会改变的,有该权限就会显示字符,没有该权限就变成减号(-)就是了。
另外,目录与文件的权限意义并不相同,这是因为目录与文件所记录的数据内容不相同所致。
第二栏表示有多少文件名链接到此节点(i-node):
每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个文件名就会链接到一个i-node。这个属性记录的,就是有多少不同的文件名链接到相同的一个i-node号码去就是了。
第三栏表示这个文件(或目录)的“拥有者帐号”
第四栏表示这个文件的所属群组
在Linux系统下,你的帐号会加入于一个或多个的群组中。举刚刚我们提到的例子,class1,class2, class3均属于projecta这个群组,假设某个文件所属的群组为projecta,且该文件的权限如图5.2.2所示(-rwxrwx---), 则class1, class2, class3三人对于该文件都具有可读、可写、可执行的权限(看群组权限)。 但如果是不属于projecta的其他帐号,对于此文件就不具有任何权限了。
第五栏为这个文件的容量大小,默认单位为Bytes;
第六栏为这个文件的创建日期或者是最近的修改日期:
这一栏的内容分别为日期(月/日)及时间。如果这个文件被修改的时间距离现在太久了,那么时间部分会仅显示年份而已。 如下所示:
显示完整的时间格式,可以利用ls的选项,即:“ls-l--full-time"就能够显示出完整的时间格式,包括年月日的时间。另外,如果当初是以繁体中文安装Linux系统,那么日期字段将会以中文来显示。但是中文没法在纯文本的终端机模式中正确显示,所以该栏会变成乱码。所以得用”export LC_ALL=en_US.utf8“来修改语系。
如果想要让系统默认的语系变成英文的话,那么你可以修改系统配置文件“/etc/locale.conf”
第七栏为这个文件的文件名
例题:假设test1, test2, test3同属于testgroup这个群组,如果有下面的两个文件,请说明两个文件的拥有者与其相关的权限为何?
答:
文件test.txt的拥有者为root,所属群组为root。至于权限方面则只有root这个帐号可以存取此文件,其他人则仅能读此文件;
另一个文件ping_tsai的拥有者为test1,而所属群组为testgroup。其中:
test1 可以针对此文件具有可读可写可执行的权力;
而同群组的test2, test3两个人与test1同样是testgroup的群组帐号,则仅可读可执行但不能写(亦即不能修改);
至于没有加入testgroup这一个群组的其他人则仅可以读,不能写也不能执行
例题:承上一题如果我的目录为下面的样式,请问testgroup这个群组的成员与其他人(others)是否可以进入本目录?
答:
文件拥有者test1[rwx]可以在本目录中进行任何工作;
而testgroup这个群组[r-x]的帐号,例如test2, test3亦可以进入本目录进行工作,但是不能在本目录下进行写入的动作;
至于other的权限中[r--]虽然有r ,但是由于没有x的权限,因此others的使用者,并不能进入此目录!
Linux文件权限的重要性:
与Windows系统不一样的是,在Linux系统当中,每一个文件都多加了很多的属性进来,尤其是群组的概念,这样有什么用途呢? 其实,最大的用途是在“数据安全性”上面的。
系统保护的功能: 在系统中,关于系统服务的文件通常只有root才能读写或者是执行,例如/etc/shadow这一个帐号管理的文件,由于该文件记录了系统中所有帐号的数据, 因此是很重要的一个配置文件,当然不能让任何人读取(否则密码会被窃取),只有root才能够来读取。所以该文件的权限就会成为[ ---------- ]。root基本上是不受系统的权限所限制的, 所以无论文件权限为何,默认root都可以存取。
未将权限设置妥当的危害:如果目录权限没有作好的话,可能其他人会登到你的系统。例如本来只有root才能做的开关机、ADSL的拨接程序、新增或删除使用者等等的指令,若被你改成任何人都可以执行的话, 那么如果使用者不小心给你重新开机,系统就会莫名挂掉。