文件及目录的权限管理
上篇简单介绍了下文件和目录的一些简单的操作,接下来介绍用户和文件权限的管理。首先了解用户和组账号的配置文件,然后是管理用户和组账号,最后要会设置文件和目录权限和归属。
Linux基于用户身份对资源访问进行控制。用户账号分为超级用户root(相当于windows下的Administrator),然后是普通用户。Linux中是不建议使用root登录系统执行管理任务的,因为这很不安全。要是误删了系统中某个重要的文件,那就玩完了。
用户账号文件——passwd
用于保存用户的账号的基本信息,文件位置:/etc/passwd,每一行对应一个用户的账号记录,下面是取出最后两行记录的账号信息,然后来分析它每个字段的含义(字段之间用冒号分隔)。
字段1 jzhou:用户账号的名字;
字段2 x :密码占位符
字段3 500:用户账号的UID号(RedHat和CentOS中默认从500开始)
字段4 500:用户所属主账号的GID号(也是默认从500开始)
字段5 zhoujie:用户全名
字段6 /home/jzhou :用户的宿主目录,即家目录
字段7 /bin/bash :登录shell信息
基于系统运行和管理需要,所有用户都可以访问passwd文件中的内容,但只有root用户才能更改
用户密码文件——shadow
用于保存密码串、密码有效期等信息,文件位置:/etc/shadow,每一行对应一个用户的密码记录。下面列出最后两行记录并解释每个字段的含义:
字段1 :用户账号的名称
字段2 :加密的密码字串信息(采用MD5加密)
字段3 :上次修改密码的时间
字段4:密码的最短有效天数,默认值为 0
字段5:密码的最长有效天数,默认值为 99999
字段6:提前多少天警告用户口令将要过期,默认值为 7
字段7:在密码过期后多少天禁用此用户(默认为空)
字段8:账号失效时间(默认为空)
字段9 :保留字段(未使用)
默认只要root用户能够读取该文件中的内容,并且不允许root直接编辑该文件中的内容。那么添加用户时如何来指定选项以实现这些功能呢?下面将简单介绍如何添加用户、组。
添加用户账号——useradd
用户账号的初始配置文件
文件来源——新建用户账号时,从/etc/skel目录中复制而来
主要的用户初始配置文件有 :
[jzhou@localhost ~]$ su - root 口令: [root@localhost ~]# passwd -l jzhou ==>锁定用户jzhou的账号 Locking password for user jzhou. passwd: Success [root@localhost ~]# passwd -S jzhou ==>查看用户状态 jzhou LK 2013-02-03 0 99999 7 -1 (Password locked.) ==>为锁定状态 [root@localhost ~]# tail -2 /etc/shadow ==>账号锁定后,有木有发现密码位前面多了两个!!,表示密码不可用 jzhou:!!$1$XRmjIBM9$SgXA00pPfvhjvxt/9..Lh.:15739:0:99999:7::: user1:!!:15771:0:99999:7::: [root@localhost ~]# passwd -u jzhou ==>为账号jzhou解锁 Unlocking password for user jzhou. ==>已被成功解锁 passwd: Success. [root@localhost ~]# passwd -S jzhou ==>再次查看用户状态 jzhou PS 2013-02-03 0 99999 7 -1 (Password set, MD5 crypt.) [root@localhost ~]# tail -2 /etc/shadow ==>观察密码位变化,没有了两个!!,表示密码可用
jzhou:$1$XRmjIBM9$SgXA00pPfvhjvxt/9..Lh.:15739:0:99999:7::: user1:!!:15771:0:99999:7::: [root@localhost ~]# passwd -d jzhou ==>清楚用户jzhou的密码 Removing password for user jzhou. ==>密码已被成功清除 passwd: Success [root@localhost ~]# tail -2 /etc/shadow ==>查看密码位有什么变化 jzhou::15771:0:99999:7::: ==>密码位变空了。。。 user1:!!:15771:0:99999:7::: [root@localhost ~]# passwd jzhou ==>为用户重新设定密码 Changing password for user jzhou. New UNIX password: BAD PASSWORD: it is based on a dictionary word Retype new UNIX password: passwd: all authentication tokens updated successfully. ==>OK,密码已经设置成功了 [root@localhost ~]#
注意,“未设置密码”的用户账号尚未完成初始化,处于不可登录状态,与“空密码”的情况不同,普通用户可以使用passwd命令,但只能更改自己的密码。另外,被锁定的账号也不能登录系统。
修改用户账号的属性——usermod
它的命令有几个功能和passwd是一样的,比如L和U参数就是锁定和解锁账户的,不过要大写。其他选项和useradd的中的一样,就是更改uid,gid等。
添加组账号——groupadd
添加一个组账号,在新建用户时,若要指定用户的gid和组名称,则必须先保证这个组要存在,所以要先建立组,简单的操作如下:
[root@localhost ~]#groupadd -g 1000 test ==>创建一个组gid为1000 [root@localhost ~]#tail -3 /etc/group jzhou:x:500: user1:x:504: test:x:1000: [root@localhost ~]#
删除组账号——groupdel
很简单,直接接用户名作为参数,删除组账号后,从/etc/group文件中将查不到相应的记录。
用户和组账号查询:
id命令——查询用户身份标识
groups命令——查询用户所属的组
finger命令——查询用户的详细信息
users、w、who命令查询已登录到主机的用户信息
文件/目录的权限和归属
将ls带上参数l或直接打ll命令,则可以查看用户对文件的使用权。
第一列权限位由10位(比如d rwx rwx r-x)组成,其中第一位表示文件类型,d表示目录,l表示链接文件,b表示块文件,c表示字符文件,-表示普通文件。关于rwx-分别表示读、写、执行、无权限,r w x - 四个权限字符分别可表示为8进制数字4,2,1,0,即 rwx rwx r-x权限也可表示为775,其中前三位rwx(7)表示文件所有者(owner)对该文件的权限,中间3位rwx(7)表示文件所在的组(group)对该文件的权限,最后三位r-x(5)表示其他用户(other)对该文件的权限,也即ugo权限。
设置文件/目录的权限——chmod
[jzhou@localhost dirtest]$ ll 总计 36 drwxrwxr-x 2 jzhou jzhou 4096 03-05 22:43 dirtest1 lrwxrwxrwx 1 jzhou jzhou 8 03-05 22:45 linkfile -> testfile -rw-rw-r-- 1 jzhou jzhou 67 03-05 22:40 testfile [jzhou@localhost dirtest]$ chmod g-w,o+x testfile ==>设置文件testfile的组权限和其他人权限,注意权限变化 [jzhou@localhost dirtest]$ ls -l 总计 36 drwxrwxr-x 2 jzhou jzhou 4096 03-05 22:43 dirtest1 lrwxrwxrwx 1 jzhou jzhou 8 03-05 22:45 linkfile -> testfile -rw-r--r-x 1 jzhou jzhou 67 03-05 22:40 testfile ==>看,权限变化了 [jzhou@localhost dirtest]$ chmod 644 dirtest1/ ==>改变目录dirtest1的权限,即读写|读|读 [jzhou@localhost dirtest]$ ll 总计 36 drw-r--r-- 2 jzhou jzhou 4096 03-05 22:43 dirtest1 ==>发现它的变化了没 lrwxrwxrwx 1 jzhou jzhou 8 03-05 22:45 linkfile -> testfile -rw-r--r-x 1 jzhou jzhou 67 03-05 22:40 testfile [jzhou@localhost dirtest]$ chown jzhou:root testfile ==>普通用户没有权限更改 chown: 正在更改 “testfile” 的所有者: 不允许的操作 [jzhou@localhost dirtest]$ su root ==>切换到root用户 口令: [root@localhost dirtest]# ll 总计 36 drw-r--r-- 2 jzhou jzhou 4096 03-05 22:43 dirtest1 lrwxrwxrwx 1 jzhou jzhou 8 03-05 22:45 linkfile -> testfile -rw-r--r-x 1 jzhou jzhou 67 03-05 22:40 testfile [root@localhost dirtest]# chown root:root testfile ==>将文件testfile的拥有者和属组都改为root [root@localhost dirtest]# ll 总计 36 drw-r--r-- 2 jzhou jzhou 4096 03-05 22:43 dirtest1 lrwxrwxrwx 1 jzhou jzhou 8 03-05 22:45 linkfile -> testfile -rw-r--r-x 1 root root 67 03-05 22:40 testfile ==>看,它的文件拥有者和所属组都变为root了 [root@localhost dirtest]#
修改目录的权限和所属组时可以指定-R选项以实现目录里的文件或者目录也可以递归变化。若只修改文件/目录所有者只需指定前者,即chown root testfile,若只修改文件/目录所属组的权限,前面的用户可不写,即chown :root testfile。
附加权限位
普通用户并没有权限修改“/etc/shadow”文件,那为什么可以修改自己的登录密码呢?因为passwd命令程序被设置了SUID权限,普通用户在执行该命令时临时获得相当于属主用户(root)的权限。
set位权限的主要用途:
为可执行(有 x 权限的)文件设置,权限字符为“s”;
其他用户执行该文件时,将拥有属主或属组用户的权限。
[root@localhost ~]# ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 19876 2006-07-17 /usr/bin/passwd
==>普通用户以root用户的身份,间接更新了shadow文件中自己的密码
注意:不要轻易为可执行文件设置SET位权限,特别是对于那些属主、属组是root的执行程序,使用SET位权限时更应该慎重。例如,若为vim编辑器程序设置SUID权限,将导致普通用户也可以使用vim编辑器修改系统中的任何配置文件
粘滞位(Sticky)
[root@localhost ~]# ls -ld /tmp /var/tmp drwxrwxrwt 8 root root 4096 09-09 15:07 /tmp ==>就是将t位代替执行位x drwxrwxrwt 2 root root 4096 09-09 07:00 /var/tmp
其实这些特殊权限位用的不多,我认为只不过是为那几种特殊的文件作个解释罢了,不用深究的,知道派什么用的就行了吧。
使用附加权限