Linux 用户身份与群组记录的文件
在Linux系统中,默认情况下,所有的账号信息,都是记录在/etc/passwd这个文件内。个人的密码则是记录在/etc/shadow这个文件下。Linux所有的组名都记录在/etc/group!
Linux 文件权限概念
Linux文件属性
[root@www ~]# ls -al total 156 drwxr-x--- 4 root root 4096 Sep 8 14:06 . drwxr-xr-x 23 root root 4096 Sep 8 14:21 .. -rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg -rw------- 1 root root 199 Sep 8 17:14 .bash_history -rw-r--r-- 1 root root 24 Jan 6 2007 .bash_logout -rw-r--r-- 1 root root 191 Jan 6 2007 .bash_profile -rw-r--r-- 1 root root 176 Jan 6 2007 .bashrc -rw-r--r-- 1 root root 100 Jan 6 2007 .cshrc drwx------ 3 root root 4096 Sep 5 10:37 .gconf <=范例说明处 drwx------ 2 root root 4096 Sep 5 14:09 .gconfd -rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log <=范例说明处 -rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog [ 1 ][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ][ 7 ] [ 权限 ][连结][拥有者][群组][文件容量][ 修改日期 ][ 檔名 ] |
ls是『list』的意思,重点在显示文件的文件名与相关属性。而选项『-al』则表示列出所有文件详细的权限与属性(包含隐藏档,就是文件名第一个字符为『 . 』的文件)。
例题:
若有一个文件的类型与权限数据为『
-rwxr-xr--』,请说明其意义为何?
答:
先将类型与权限数据分开查阅,并将十个字符整理成为如下所示:
[-][rwx][r-x][r--]1 为:代表这个文件名为目录或文件,本例中为文件(-); 234为:拥有者的权限,本例中为可读、可写、可执行(rwx); 567为:同群组用户权力,本例中为可读可执行(rx); 890为:其他用户权力,本例中为可读(r) 同时注意到,rwx所在的位置是不会改变的,有该权限就会显示字符,没有该权限就变成减号(-)。 |
目录与文件的权限意义并不相同,这是因为目录与文件所记录的数据内容不相同所致。
每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录,因此每个档名就会连结到一个i-node!这个属性记录的,就是有多少不同的档名连结到相同的一个i-node号码去。
在Linux系统下,你的账号会附属于一个或多个的群组中。举刚刚我们提到的例子,class1, class2, class3均属于projecta这个群组,假设某个文件所属的群组为projecta,且该文件的权限如图2.1.2所示(-rwxrwx---),则class1, class2, class3三人对于该文件都具有可读、可写、可执行的权限(看群组权限)。但如果是不属于projecta的其他账号,对于此文件就不具有任何权限了。
这一栏的内容分别为日期(月/日)及时间。如果这个文件被修改的时间距离现在太久了,那么时间部分会仅显示年份而已。如下所示:
[root@www ~]# ls -l /etc/termcap /root/install.log -rw-r--r-- 1 root root 807103 Jan 7 2007 /etc/termcap -rw-r--r-- 1 root root 42304 Sep 4 18:26 /root/install.log # 如上所示,/etc/termcap 为 2007 年所修改过的文件,离现在太远之故; # 至于 install.log 是今年 (2009) 所建立的,所以就显示完整的时间了。 |
如果想要显示完整的时间格式,可以利用ls的选项,亦即:『ls -l --full-time』就能够显示出完整的时间格式了!包括年、月、日、时间。另外,如果你当初是以繁体中文安装你的Linux系统,那么日期字段将会以中文来显示。可惜的是,中文并没有办法在纯文本的终端机模式中正确的显示,所以此栏会变成乱码。那你就得要使用『LANG=en_US』来修改语系!
如果想要让系统默认的语系变成英文的话,那么你可以修改系统配置文件『/etc/sysconfig/i18n』使LANG这个变量成为上述的内容即可。
这个字段就是档名了。比较特殊的是:如果档名之前多一个『 . 』,则代表这个文件为『隐藏档』,例如上表中的.gconf那一行,该文件就是隐藏档。你可以使用『ls』及『ls -a』这两个指令去感受一下什么是隐藏档!
例题:
假设test1, test2, test3同属于testgroup这个群组,如果有下面的两个文件,请说明两个文件的拥有者与其相关的权限为何?
答:
-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/
|
如何改变文件属性与权限
change group 请记得,要被改变的组名必须要在/etc/group文件内存在才行,否则就会显示错误!
假设你是以root的身份登入Linux系统的,那么在你的家目录内有一个install.log的文件,如何将该文件的群组改变一下?假设你已经知道在/etc/group里面已经存在一个名为users的群组,但是testing这个群组名字就不存在/etc/group当中了,此时改变群组成为users与testing分别会有什么现象发生?
[root@www ~]# chgrp [-R] dirname/filename ... 选项与参数: -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录 都更新成为这个群组之意。常常用在变更某一目录内所有的文件。 范例: [root@www ~]# chgrp users install.log [root@www ~]# ls -l -rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log [root@www ~]# chgrp testing install.log chgrp: invalid group name `testing' <== 发生错误讯息啰~找不到这个群组名~ |
change owner 用户必须是已经存在系统中的账号,也就是在/etc/passwd这个文件中有记录的用户名称才能改变。
chown的用途还满多的,他还可以顺便直接修改群组的名称!此外,如果要连目录下的所有次目录或文件同时更改文件拥有者的话,直接加上-R 的选项即可!
[root@www ~]# chown [-R] 账号名称 文件或目录 [root@www ~]# chown [-R] 账号名称:组名 文件或目录 选项与参数: -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更 范例:将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 |
Tips: 事实上,chown也可以使用『chown user.group file』,亦即在拥有者与群组间加上小数点『.』也行!不过很多朋友设定账号时,喜欢在账号当中加入小数点(例如vbird.tsai这样的账号格式),这就会造成系统误判!所以我们比较建议使用冒号『:』来隔开拥有者与群组!此外,chown也能单纯的修改所属群组!例如『chown .sshd install.log』就是修改群组。 |
需要变更文件的拥有者:在复制文件给你之外的其他人时:
[root@www ~]# cp 来源文件 目标文件
|
假设你今天要将.bashrc这个文件拷贝成为.bashrc_test,且是要给bin这个人,你可以这样做:
[root@www ~]# cp .bashrc .bashrc_test [root@www ~]# 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 <==新文件的属性没变 |
由于复制行为(cp)会复制执行者的属性与权限,所以bashrc_test还是属于root所拥有,如此一来,即使你将文件拿给bin这个使用者,那他仍然无法修改的,所以你就必须要将这个文件的拥有者与群组修改一下
r:4每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为:[-rwxrwx---] 分数则是:
w:2
x:1
owner = rwx = 4+2+1 = 7所以等一下我们修改权限时,该文件的权限数字就是770!变更权限的指令chmod的语法是这样的:
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
[root@www ~]# chmod [-R] xyz 文件或目录 选项与参数: xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。 -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更 |
[root@www ~]# ls -al .bashrc -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc [root@www ~]# chmod 777 .bashrc [root@www ~]# ls -al .bashrc -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc |
例题:
将刚刚你的.bashrc这个文件的权限修改回-rw-r--r--的情况吧!
答:
-rw-r--r--的分数是644,所以指令为:
chmod 644 .bashrc |
chmod | u g o a |
+(加入) -(除去) =(设定) |
r w x |
文件或目录 |
[root@www ~]# chmod u=rwx,go=rx .bashrc # 注意!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格! [root@www ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc |
[root@www ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc [root@www ~]# chmod a+w .bashrc [root@www ~]# ls -al .bashrc -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc |
[root@www ~]# chmod a-x .bashrc [root@www ~]# ls -al .bashrc -rw-rw-rw- 1 root root 395 Jul 4 11:45 .bashrc |