完成这一章,你可以做以下的事情:
※描述和更改文件的属主和组。
※描述和更改一个文件的许可权限。
※描述和建立新文件的默认权限。
※描述如何更改文件的用户和组的身份。
5.1 文件的权限和存取
存取一个文件需要用户的身份,和与文件相关的权限。这一章会介绍如何存取文件
权限 理解文件的读,写,和执行权限
ls (ll,ls –l) 确定文件被赋予的存取权限。
chmod 改变文件的存取权限。
chown 改变一个文件的属主。
umask 改变默认的文件存取权限
chgrp 改变一个文件的组。
su 转换你的用户的身份。
newgrp 转换你的组的身份
每一个文件都属于系统中的一个用户。文件的属主控制谁可以来存取文件这个文件。文件的属主有权力允许或是拒绝其它的用户存取文件。
5.2 谁有存取一个文件的权利
UNIX系统为一个文件提供三层存取结构:
user 代表文件的所有者
group 代表对文件有存取权限的组
other 代表系统中的其他所有的用户
每一个文件都属于系统中的一些用户。文件的属主有完全控制权决定什么人有什么权限存取文件,属主能允许或拒绝其系统中的其他用户存取文件。属主决定什么组有权限存取他的文件,属主也能将文件给系统中的其他用户,但是一旦文件的所有权被转换,文件原始的属主不再能够控制这个文件。
由于文件属于用户,并且与组相关联,你可以使用id命令来显示你的身份和你对系统中文件的存取权限。
上图中的文件的属主是用户user3,class组的成员也可以存取这些文件,另外,user3能够允许系统中的其他用户也存取这些文件。
5.3 存取权限的类型
文件和目录有三种类型的存取权限:
※read(读)
※write(写)
※execute(执行)
不同的unix系统命令在存取程序或文件的时候会要求某种权限,例如:cat一个文件,要求要有可读的权限,因为cat命令必须能够读取文件的内容,才能将其显示在屏幕上。类似,在使用ls命令的时候,要求一个目录要读的权限,才能够列出目录中的内容。
请注意,存取权限决定于是否你正在存取一个文件或目录。例如,一个文件的“写”的权限意味着文件的内容可以被改变。取消“写”权限会禁止用户改变一个文件的内容。但是并不保护文件不被删除。目录的“写”权限控制一个目录中的内容能否被改变。如果一个目录没有“写”
的权限,它的内容就不会被改变。目录中的文件就不能被删除,添加,或是重命名。
注释:想要作为一个程序一样运行一个文件,要求文件要有读和执行的权限。
5.4 权限
你对一个文件的存取权限是在以下部分定义的:你的用户身份,你的组,和与文件关联的权限设置。文件的权限在mode
(模式)中指明,文件的模式是一个包含九个字符的字段,其中定义了文件属主的权限,文件所属的组的权限,和其他系统中的用户的权限。
5.5 chmod 改变一个文件的权限
chmod命令被用来更改一个文件或目录的权限,只有文件的属主(或root-系统管理员)才能改变权限,
为了保护一个文件不被删除和破坏,文件所在的目录和文件本身一定不能有写的权限。文件写的权限允许用户改变(或是覆盖)文件的内容,如果一个目录有写的权限,会允许用户删除目录中的文件。chmod命令支持一种字母的方式定义文件的权限。
你可以指定你想要更改的权限:
r 读的权限
w 写的权限
x 执行的权限
和你如何更改权限:
+ 增加权限
- 减少权限
= 将权限设置为
你同时可以指明你想要修改哪一组的权限:
u 用户(文件的属主) g 组(文件关联的组)
o 其他用户
a 所有用户(系统中的每个用户)
none 分配权限给所有的域
注释:想要禁止一个文件的所有的权限,键入以下的命令:
chmod = 文件名
例子:
$ ls -l f1
-rw-r--r-- 1 user3 class 37 Jul 24 11:06 f1
$chmod g=rw,o= f1
$ ls –l f1
-rw-rw-rw- 1 user3 class 37 Jul 24 11:06 f1
$ls –l f2
-rw-rw-rw- 1 user3 class 37 Jul 24 11:08 f2
$chmod u+x,g=rx,o-rw f2
$ls –l f2
-rwxr-x--- 1 user3 class 37 Jul 24 11:-8 f2
chmod命令也支持数值的(八进制)表达式来指定文件的权限。这种表达式十分陈旧,但这是一种十分通用的格式。
1)要改变文件的权限,你必须将权限的每一个域转变成适当地数字表达式。对属主,组,和其他用户都有存取定义。每种类型的存取赋值可用以下的数字来表示:
read=4
write=2
execute=1
2)将这些关联到存取权限的数字加起来。
3)将三个值合起来的数字就是chmod命令的参数。
举个例子,如果你期望的权限:属主是rw-,组是r--,其他是---:
属主 组 其他 转变成数字形式
rw- r-- ---
4+2+0 4+0+0 0+0+0
6 4 0
因此:chmod命令是:
chmod 640 filename
注释:想要禁止所有的权限,你可以使用一下命令:
chmod 000 file
5.6 umask -权限掩码
语法:
umask [-s] [mode] 用户文件创建模式掩码
例子:
原先默认的权限: rw- rw- rw-
设置默认权限: rw- r-- ---
$umask g=r,o=
[-S]选项以符号的格式显示当前的文件创建的掩码,[-S]选项和符号格式在Bourne 和C shell无效。
选项a-rwx是u-rwx,g-rwx,o-rwx的一个缩写。一个常用的新建文件的默认权限是rw-rw-rw-,这意味着系统中的任何用户都能修改文件中的内容。新建目录的默认权限是rwxrwxrwx,这意味着任何用户能更改这个目录,和删除这个目录中的任何东西。
为了保护你的创建的文件,你可以使用umask命令,这个命令会取消你创建的文件和目录的默认权限设置。组用户的写权限和其他用户的写权限大概是最重要的需要取消的权限。你指定的掩码在你登录系统时一直有效,umask
对已经存在的文件没有任何作用。
5.7 touch - 更新文件的时间标志
touch 命令可以用来创建新文件,空文件。如果指定的文件已经存在,touch会更新文件的时间标志。它对文件的内容没有影响。
touch 命令有以下选项:
-a time 更改存取(Access)时间为指定的时间
-m time 更改修改(Modify)时间为指定的时间
-t time 使用指定时间(time)来代替当前时间。
-c 如果文件不存在,不创建新文件。
例子:
$ touch test_file1
$ ls –l test_file1
-rw-rw-rw- 1 user3 class 0 Jul 24 11:08 test_fiile1
$ umask a-rwx,u=rw,g=r (或 umask 137)
$ umask –S (或 umask)
u=rw,g=r,o= (或 137)
$ touch test_file2
$ ls –l test_file2
$-rw-r----- 1 user3 class 0 Jul 24 11:10 test_file1
5.8 chown 更改文件的所有权
语法:
chown owner [:group] filename... 更改一个文件的属主,和可选地,组ID
例子:
$ id
uid=303 (user3), gid=300 (class)
$cp f1 /tmp/user2/f1
$ls –l /tmp/user2/f1
-rw-r----- 1 user3 class 3976 Jan 24 13:13 f1
$ chown user2 /tmp/user2/f1
$ ls –l /tmp/user2/f1
-rw-r----- 1 user2 class 3976 Jan 24 13:13 f1
只有文件的属主和root才能更改一个文件的所有权。
只有文件的属主才能控制文件的属性和存取,如果你想要将一个文件的所有权给系统中的另外一个用户,你可以使用chown命令。例如,user3拷贝他的文件f1给user2。User2对他个人的文件应该有完全的控制权,于是user3将/tmp/user2/f1的所有权转换给user2。可选地,chown可以改变一个或多个文件的组ID。要改变的组可以是一个数字的组ID,或者是一个passwd(group)文件中的登录名。
注释:一旦一个文件的属主已经被改变,只有新的属主或root可以更改文件的所有权和模式。
属主是一个系统认可的用户标识。文件/etc/passwd 中包含有系统中所有用户的ID。
例子:
在上图中,在user3将文件/tmp/user2/f1的所有权转换给user2后,他仍然有读的权限,因为class组中的任何成员对这个文件对都有读的权限。
5.9 chgrp 命令
语法:
chgrp newgroup filename.... 更改一个文件的组的存取。只有文件的属主和root能更改文件的组。
例子:
$ id
uid=303(user3) ,gid=300(class)
$ ls –l f3
-rw-r----- 1 user3 class 3967 Jan 24 13:13 f3
$chgrp class2 f3
$ls –l f3
-rw-r----- 1 user3 class2 3967 Jan 24 13:13 f3
$chown user2 f3
$ls –l f3
-rw-r----- 1 user2 class2 3967 Jan 24 13:13 f3
在长列表中的组域确定什么用户组可以存取这个文件。你可以用chgrp 命令来更改。
new_group(新组)是一个系统认可的组的标识,在文件/etc/group中有系统中所有用户的组ID,
如果指定的新组不存在,chgrp命令不会产生作用。组和组的成员是由系统管理员来控制的。
注释:只有文件的属主和root才能更改一个文件的组。
例子:
在上图中,当user3将文件f1的组转变为class2组,他的存取权限没有受到影响,因为他仍然是这个文件的属主。在user3将文件的所有权给了user2,他不再能够存取这个文件,因为user3当前的组是class组。
5.10 su – 转变用户ID
语法:
su [user_name] 更改你的用户ID和组ID
例子:
$ ls –l /usr/local/bin/class_setup
-rwxr-x--- 1 class_admin teacher 3967 Jan 24 13:13 class_setup
$ id
$uid=303(user3), gid=300(class)
$su class_admin
$passwd
$id
uid=400(class_admin), gid=300(class)
$ /usr/local/bin/class_setup
$
退出su对话线程。
$ ctrl + D
su 命令可以用来交互地更改你的用户ID和组ID。 Su是switch user 或set user
id的一个缩写。这个命令让你开启一个子进程,成为新的用户ID和赋予你存取与这个用户ID关联所有文件的存取权限。因此,出于安全的考虑,你在实际转换身份时,会被要求输入这个用户帐号的密码。
如果没有参数,su命令将你转换为root(系统管理员)。root帐号有时也被称为超级用户,因为这个用户可以存取系统中的任何文件。也正是这个原因,许多人将su命令看成是supper-user(超级用户)的一个缩写。当然,你必须要提供root密码。
注释:想要回到你原先的用户身份,不要再使用su命令,你只需要使用exit命令退出你使用su命令而生成的新的对话进程。
例子
在上图中,user3没有程序/usr/local/bin/class_setup的存取权限,因为她不是teacher组的成员。如果她输入命令
su class_admin,他就可以存取这个程序。作为用户class_admin,她还可以修改程序
class_setup的内容。当她运行完成这个程序后退出su 的对话,就恢复自己原先的用户状态。
su – username
一些配置文件是为你的的对话线索而设立的。。当你使用命令su
username时,你的对话特征和你原始的登录身份一样。如果你想要你的对话进程拥有转换后的用户ID一致的特征,你要使用短斜杠: su –
username.
5.11 newgrp 命令
newgrp 命令同su 命令十分相似。这个命令可以更改你的组的ID号。
系统管理员会定义你能转变的组。通过查看文件/etc/group,你能确定你有权改变到那些组。如果你没有被允许成为指定的组的成员,你会得到一条信息:Sorry.
由于newgrp命令没有开启一个新的对话线索,你只需要使用newgrp来回到你最初的组的状态。
例子:
在以上的图中,user3仍旧无权存取程序/usr/local/bin/class_setup,因为他被初始化定义为组class中,user3能newgrp
teacher到teacher组,因为系统管理员已经赋予属于他teacher的一员。现在他可以允运行这个程序,因teacher组的所有成员对为这个程序都有执行权限,但是他不能更改这个程序的内容,只有用户class_admin可以更改这个程序。当user3完成他的工作,他可以newgrp回到他原始的组状态。
/etc/group文件的例子:
teacher: : 33: class_admin,user3
class: : 300 :user1,user2,user3,user4,user5,user6,class_admin
5.12 文件权限和存取-总结
关于文件权限需要注意的有:
※文件的路径名中指出的所有的目录必须要有执行的权限,否则文件不能得到存取。
※要保护一个文件,可以取消文件和文件所在目录的写的权限。
※只有文件的属主(或root)才能更改文件模式(chmod),所有权(chown),和文件的组(chgrp)
阅读(1014) | 评论(0) | 转发(0) |