本节主要内容:
1、 文件和目录的权限。
2、 setuid。
3、 chown和chgrp
4、 umask
5、 符号链接
(一)文件
在linux中无论什么都可以作为一个文件。当你创建一个文件的时候,系统将保存有关该文件的全部信息,其中包括:
1、 文件的位置。
2、 文件的类型
3、 文件长度
4、 哪位用户拥有该文件,哪些用户可以访问该文件
5、 i结点
6、 文件的权限
(二) 文件类型和权限
我们可以通过ls –l,来看看典型的文件
其中每一列的属性如下:
总用量(total):这一行告诉我们这个文件所占的空间
1、 d 表示文件类型,有一下几种情况:
a) d 目录
b) l 符号链接(指向另一个文件)
c) s套接字文件
d) b 块文件
e) c 字符设备文件
f) p命名管道文件
g) —普通文件,或者更加精确的说,不属于以上的文件类型
2、 rwxrwxr-x表示该文件的权限(-表示没有本该在这个位的权限)
a) rwx 文件拥有者的权限(前三位)
b) rwx 同组用户权限(中间三位)
c) r-x其他用户权限(最后三位)
3、2 该文件的硬链接数目
4、dsf 文件的属主
5、dsf 文件属主所在的缺省组
6、4096 用字节来表示文件长度。
7、5月 14 20:31 文件更新时间
8、DY03 文件名
(三)改变权限位
1、符号模式
chmod命令的一般格式为:
chmod 【who】 operator 【permission】 filename
who的含义是
u:文件属主权限
g:同组用户权限
o:其他用户权限
a:所有用户(包括前面三个)
operator的含义:
+:增加权限
-:取消权限
=:设定权限
permission的含义
r:读权限
w:写权限
x:执行权限
s:文件属主和组set-ID。
t:粘住位*在列文件或者目录是,遇到t位。只有属主可以对其删除,但是有些系统规则并没有那么严格
l:给文件加锁,使得其他用户无法访问
3、绝对模式
chomod绝对命令模式的一般形式为
chmod【mode】 file
mode是一个八进制数。在这个模式下,权限部分用着不同的含义:每个权限位都用一个八进制数表示。如下:
这个内容应该来说还是很简单的。
(四)目录
目录的权限位和文件有所不同。现在我们来看看其中的区别。目录的读权限位意味着可以列出其中的内容。写权限位意味着可以在该目录中创建文件,如果不希望其他用户在你的目录中创建文件,可以取消相应的写权限位。执行权限则意味着搜索和访问该目录:
(五)suid/guid
解释:suid意味着如果某个用户对属于自己的shell脚本设置了这种权限,那么其他用户在执行这一脚本时也会具有其属主的相应权限。于是,如果根用户的某一个脚本设置了这样的权限,那么其他普通用户在执行它的期间也同样具有根用户的权限。同样的原则也适用于guid,执行相应脚本的用户将具有该文件所属用户组中用户的权限。
为什么要用suid和guid呢?这里有一个很好的例子。我管理着几个大型的数据库系统,而对它们进行备份需要有系统管理权限。我写了几个脚本,并设置它们的guid,这样我指定的一些用户只要执行这些脚本就能够完成相应的工作而无须以数据库管理员的身份登录,以免不小心破坏了数据库服务器。通过执行这些脚本,他们可以完成数据库备份及其他管理任务,但是在这些脚本运行结束之后,他们就又回复到他们作为普通用户的权限。
如果想找出这些命令:可以在/bin或者/sbin中执行下列命令
$ls –l | grep ‘^…s’ 用来查找suid文件的
$ls –l | grep ‘^…s..s’ 查找suid和guid的
现在我们明白了什么是s u i d,可是如何设置它呢?下面就来介绍这个问题。如果希望设置suid,那么就将相应的权限位之前的那一位设置为4;如果希望设置guid,那么就将相应的权限位之前的那一位设置为2;如果希望两者都置位,那么将相应的权限位之前的那一位设置为4+2。例如
$chmod6741 myfile
(六)chown/chgrp
chown命令的形式如下:
chmod –R–h owner file
- R选项意味着对所有子目录下的文件也都进行同样的操作。
- h选项意味着在改变符号链接文件的属主时不影响该链接所指向的目标文件。
例如:
将文件myfile的权限给root用户
寻找自己的groups和id
同时可以使用 groups 【用户名】寻找那个用户组成员
(七)umask(权限屏蔽字)
当最初登录到系统中时, umask命令确定了你创建文件的缺省模式。这一命令实际上和chmod命令正好相反。你的系统管理员必须要为你设置一个合理的umask值,以确保你创建的文件具有所希望的缺省权限,防止其他非同组用户对你的文件具有写权限。
只要理解为这些权限被屏蔽了,即便你设置了也是没用的。
使用如下:
umasknnn 其中nnn从000-777
(八) 符号链接
下面我们就解释一下符号链接是怎么回事。比方说在/ usr / local / aamin / sales目录下有一个含有销售信息的文件,销售部门的每一个人都想看这份文件。你可以在每一位用户的$ H O M E目录下建立一个指向该文件的链接,而不是在每个目录下拷贝一份。这样当需要更改这一文件时,只需改变一个源文件即可。每个销售$home目录中的链接可以起任何名字,不必和源文件一致。
如果有很多子目录,而进入这些目录很费时间的话在这种情况下链接就非常有用了。
这个命令的一般形式如下:
ln 【-s】 source_path targrt_path
其中目录也可以是文件