第三天(7月21日)
今天的主要内容是对用户和组的管理,以及如何设置权限。
一、管理用户和组
1
、先建manager
组,创建两个用户natasha
、harry
,将它们的附属组设为manager
,创建第三个用户strlt
不允许login
,再建一个用户susa
,指定UID
号为4000
。
对用户和组的管理在图形界面下操作非常简单,通过“系统/管理/用户和组群”就可以完成。
先创建manager组:
下面再创建用户:
默认情况下在Linux中建用户的同时会自动创建一个同名的用户组,题目要求将manager作为用户的附属组,也就是还要将用户加入到manager组中去。这个操作就像在Windows里面一样的简单,打开用户的属性设置界面,选择要加入的组即可。
再创建第三个用户strlt,因为这个用户不允许登录,所以将他的登录shell设为/sbin/nologin。
再建一个用户susa,并且指定UID为4000,系统默认的UID是从500开始递增的。
再用命令完成上述操作,呵呵,感觉还是用命令更干脆利索:
[root@localhost ~]#groupadd manager
#创建manager组
[root@localhost ~]#useradd –G manager natasha
#创建用户,同时指定附属组。
[root@localhost ~]#useradd –G manager harry
#创建用户,同时指定附属组。
[root@localhost ~]#useradd –s /sbin/nologin strlt
#创建用户,但不允许登录。
[root@localhost ~]#useradd –u 4000 susa
#创建用户,并指定UID。
2
、创建指定的用户和组。
这里我就全部用命令来做了。
增加usergrp
组,GID
号为6000
。
[root@localhost ~]# groupadd -g 6000 usergrp
新增user1
用户,UID
为6000
,密码为空,附属组为usergrp
。
[root@localhost ~]# useradd -u 6000 -G usergrp user1
新增user2
用户,密码为password
,将用户的附属组加入root
组和usergrp
组,用户的主目录指定为/user2
目录。
[root@localhost ~]# useradd -d /user2 -G root -G usergrp user2
设密码可以直接使用passwd命令,但需要输入两遍密码进行确认,为了简化操作可以执行下面的命令:
[root@localhost ~]#echo “password” | passwd –stdin user2
新增user3
用户,不为用户建立并初始化主目录,用户不允许登录系统shell
。
[root@localhost ~]# useradd -M -s /sbin/nologin user3
-M参数不建立主目录。
3
、设置用户的密码期限。
这部分操作在图形界面下操作很简单,用命令就很麻烦了。
设置user1
用户,在下次登录时必须强制更改密码。
在“用户和组群”管理工具中打开用户属性界面,勾选相应的选项即可。
设置user2用户,密码30天必须更改,密码在2012年10月10日过期。
这个操作仍然是要在上面那幅图中的操作界面完成,其中各个设置项目的含义:
“允许更换前的天数”,指密码必须使用的最少天数,比如将这项设为3,那么在3天之内将无法更改密码。设为0,则表示无限制。
“需要更换的天数”,指密码的有效使用期限,按题目要求,这里就是30了。
“更换前警告的天数”,这个好理解,就是密码到期前提前几天警告。
“账号被取消激活前的天数”,这项是设置当密码到期后,用户账号是否还可以继续使用。比如设为3,就表示账号还可以继续使用3天。设为0,表示密码到期后,用户账号也立即失效。这项的默认值为-1,也就是账号永不失效。
密码在2012年10月10日过期,这个要求可以在“账号信息”项里设置,如下图所示。
二、设置权限
这部分内容比较麻烦,尤其是设置set位和粘滞位,但又是考试的必考内容,比较重要。
1
、新建目录/var/www/user1
,并设置如下权限:
将此目录的所有者设为user1
,并设置读写执行权限。
[root@localhost tmp]# mkdir /var/www/user1
[root@localhost www]# ll
drwxr-xr-x. 2 root root 4096 7月 20 20:39 user1
#目录user1默认的所有者是root,具有完全控制权限。
[root@localhost www]# chown user1 user1
#改变目录的所有者为user1,并且自动继承了完全控制权限。
将此目录的组设置为usergrp
,并设置读、执行权限,将其他用户的权限设置为只读。
[root@localhost www]#chown :usergrp user1
#改变所属组
[root@localhost www]# chmod 754 user1
#设置权限
2
、创建/test
目录,在此目录中任何用户都可以创建文件或目录,但只有用户自身和root
用户可以删除用户所创建的文件或目录。
在此目录中任何用户都可以创建文件或目录,这个要求很好满足,只要将目录的权限设为777即可。麻烦的是后面的那个要求,只有用户自身和root用户可以删除用户所创建的文件或目录,这个要求通过普通的权限设置是无法完成的,这里就必须要用到粘滞位。
粘滞位主要是为公共目录(例如权限为777的)设置,权限字符为“t”,作用是用户不能删除该目录中其他用户的文件。如:
[root@localhost ~]# ls -ld /tmp
/var/tmp
drwxrwxrwt 8 root root 4096 09-09 15:07 /tmp
drwxrwxrwt 2 root root 4096 09-09 07:00 /var/tmp
系统中的这两个目录就设置了粘滞位,粘滞位放在最后一组。
粘滞位的权限数字为1,理解了粘滞位的用途之后,上面的操作就很好完成了:
[root@localhost ~]#mkdir /test
[root@localhost ~]#cd /
[root@localhost ~]#chmod 1777 test
#前面的1就表示要设置粘滞位
[root@localhost ~]#ll
drwxrwxrwt 2 root root 4096 7月 20 21:07 test
3
、将/etc/fstab
复制到/var/tmp/fstab
,设置用户harry
可以读写,用户natasha
不能做任何操作,其他用户可读,设置manager
组为fstab
所属组(harry
和natasha
都是manager
组的成员)。
[root@localhost ~]#cp /etc/fstab /var/tmp/
[root@localhost ~]#cd /var/tmp
[root@localhost tmp]#ll
#查看fatab文件的默认权限
-rw-r—r-- 1 root root 779 7月 19 21:07 fstab
[root@localhost tmp]#chown :manager fstab
#改变fstab的所属组
[root@localhost tmp]#ll
#再次查看fatab文件的权限
-rw-r—r-- 1 root manager 779 7月 19 21:07 fstab
此时因为harry和natasha都属于manager组的成员,所以他们都具有只读权限。而题目中要求harry可以读写、natasha没有任何权限,这属于对某些用户进行细部权限设置,用传统的权限设置方法也是无法完成的,所以这里必须要用到权限控制列表ACL。ACL的主要作用就是针对某些用户或某些组进行细部权限设置。
[root@localhost tmp]#setfacl -m u:harry:6 fstab
[root@localhost tmp]#setfacl -m u:natasha:0 fstab
setfacl命令用于设置或修改ACL,-m参数是创建acl,u:指定对哪个用户设置权限,如果要针对某个组设权限,就应改为g:。
4
、设置用户natasha
对目录/home/cnrts
(自己创建)有完全控制权限,在目录中创建的文件自动继承组的权限,设置manager
组用户对目录有读写执行权限,其他人没有权限(root
除外)。
[root@localhost ~]#mkdir /home/cnrts
[root@localhost ~]#cd /home
[root@localhost home]#ll
drwxr-xr-x. 2 root root 4096 7月 20 20:39 cnrts
[root@localhost home]#chown :manager cnrts
#将所属组改为manager
再下面的操作就有点麻烦了。因为题目中要求manager组对目录有读写执行权限,而natasha是manager组的成员,在上面的操作中又已经将manager设置为了cnrts的所属组,所以只要为cnrts的所属组设置读写执行权限就可以满足这两个要求了。麻烦的是这个要求:在目录中创建的文件要自动继承组的权限。也就是说,无论什么用户在这个目录中创建的文件,manager组都要对它具有读写执行权限。我们知道,默认情况下,用户创建的文件默认的所有者和所属组都是自己,比如我们执行下面的操作:
[natasha@localhost home]$ touch natasha
#以natasha用户的身份创建一个文件
-rw-rw-r--. 1 natasha natasha 0 7月 20 22:05 natasha
这个文件的所属组是natasha,manager组的成员对它只有读权限。要实现上面的要求,方法是让cnrts目录的所属组继承下去,即无论谁在cnrts目录里创建的文件,它的所属组都继承cnrts目录的所属组,也就是manager。这就要用到set位。
set位的权限字符为“s”,它可以对文件设置,也可以对目录设置。当对文件设置时,set位放在第一组权限,当对目录设置时,set位放在第二组权限。如:
[root@localhost ~]# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 19876 2006-07-17 /usr/bin/passwd
rwsr-xr-x,set位设在第一组,表示当其他用户要执行这个文件时,会自动使用文件所有者也就是root用户的身份去执行。
[root@localhost ~]# ls -l /tmp/test
-rw-rwsr-x 1 harry root 19876 2008-07-17 /tmp/test
rw-rwsr-x,set位设在第二组,表示无论哪个组的用户在/tmp/test目录中创建的文件都将属于root组。
set位的设置仍然使用chmod命令,4对应第一组中的set位,2对应第二组中的set位,1对应最后一组中的粘滞位,这三种特殊权限可叠加。
明白了道理之后,上面的要求用一条命令就可以完成:
[root@localhost home]#chmod -R 2770 /home/cnrts
2770表示在第二组设置set位,也就是继承所属组,同时将目录所有者和所属组的权限设为完全控制,其它用户没有权限。-R参数表示递归,也就是对cnrts目录中的所有子目录也都执行相同操作。