用户帐户 定义在/etc/passwd 文件里面,用户组定义在/etc/group 文件里面。
当用户帐户和用户组创建以后, 这些文件随着文件/etc/shadow 的变动而修改,文件/etc/shadow 包含了关于用户密码的信息。
对于每个用户帐号,文件/etc/passwd 定义了用户(登录)名,uid,gid,帐号的真实姓名,家目录, 和登录 shell。
文件类型
- - 一个普通文件
- d 一个目录
- l 一个符号链接。注意对于符号链接文件,剩余的文件属性总是"rwxrwxrwx",而且都是 虚拟值。真正的文件属性是指符号链接所指向的文件的属性。
- c 一个字符设备文件。这种文件类型是指按照字节流,来处理数据的设备。 比如说终端机,或者调制解调器
- b 一个块设备文件。这种文件类型是指按照数据块,来处理数据的设备,例如一个硬盘,或者 CD-ROM 盘。
chmod
更改文件模式
八进制数字表示法 如: chmod 600 foo.txt
符号表示法 如: u+x,go=rw 给文件拥有者执行权限并给组和其他人读和执行的权限。多种设定可以用逗号分开。
chmod 命令符号表示法
- u "user"的简写,意思是文件或目录的所有者。
- g 用户组。
- o "others"的简写,意思是其他所有的人。
- a "all"的简写,是"u", "g"和“o”三者的联合。
如果没有指定字符,则假定使用”all”。
执行的操作可能是一个“+”字符,表示加上一个权限, 一个“-”,表示删掉一个权限,或者是一个“=”,表示只有指定的权限可用,其它所有的权限被删除。
权限由 “r”,“w”,和 “x” 来指定。
要注意chmod的"--recursive"
选项: 它可以同时作用于文件和目录,所以它并不是如我们期望的那么有用处,因为我们很少希望文件和 目录拥有同样的权限。
umask
设置默认权限
当创建一个文件时,umask 命令控制着文件的默认权限。
umask 命令使用八进制表示法来表达 从文件模式属性中删除一个位掩码。
例如:1
2
3Original file mode rw- rw- rw-
Mask 000 000 010 010
Result rw- r-- r--
一些特殊权限
虽然我们通常看到一个八进制的权限掩码用三位数字来表示,但是从技术层面上来讲, 用四位数字来表示它更确切些。
为什么呢?因为,除了读取,写入,和执行权限之外,还有 其它的,较少用到的权限设置。
其中之一是 setuid 位(八进制4000)。
当应用到一个可执行文件时,它把有效用户 ID 从真正的用户(实际运行程序的用户)设置成程序所有者的 ID。
这种操作通常会应用到 一些由超级用户所拥有的程序。
当一个普通用户运行一个程序,这个程序由根用户(root) 所有,并且设置了 setuid 位,这个程序运行时具有超级用户的特权,这样程序就可以 访问普通用户禁止访问的文件和目录。
很明显,因为这会引起安全方面的问题,所有可以 设置 setuid 位的程序个数,必须控制在绝对小的范围内。
第二个是 setgid 位(八进制2000),这个相似于 setuid 位,把有效用户组 ID 从真正的 用户组 ID 更改为文件所有者的组 ID。
如果设置了一个目录的 setgid 位,则目录中新创建的文件 具有这个目录用户组的所有权,而不是文件创建者所属用户组的所有权。
对于共享目录来说, 当一个普通用户组中的成员,需要访问共享目录中的所有文件,而不管文件所有者的主用户组时, 那么设置 setgid 位很有用处。
第三个是 sticky 位(八进制1000)。这个继承于 Unix,在 Unix 中,它可能把一个可执行文件 标志为“不可交换的”。
在 Linux 中,会忽略文件的 sticky 位,但是如果一个目录设置了 sticky 位, 那么它能阻止用户删除或重命名文件,除非用户是这个目录的所有者,或者是文件所有者,或是 超级用户。
这个经常用来控制访问共享目录,比方说/tmp。
这里有一些例子,使用 chmod 命令和符号表示法,来设置这些特殊的权限。首先, 授予一个程序 setuid 权限。
chmod u+s program
下一步,授予一个目录 setgid 权限:
chmod g+s dir
最后,授予一个目录 sticky 权限:
chmod +t dir
当浏览 ls 命令的输出结果时,你可以确认这些特殊权限。这里有一些例子。首先,一个程序被设置为setuid属性:
-rwsr-xr-x
具有 setgid 属性的目录:
drwxrwsr-x
设置了 sticky 位的目录:
drwxrwxrwt
chown
更改文件所有者和用户组
chown参数
- bob 把文件所有者从当前属主更改为用户 bob。
- bob:users 把文件所有者改为用户 bob,文件用户组改为用户组 users。
- :admins 把文件用户组改为组 admins,文件所有者不变。
- bob: 文件所有者改为用户 bob,文件用户组改为用户 bob 登录系统时,所属的用户组。
chgrp
更改用户组所有权
passwd [user]
更改用户密码