Linux用户管理

6 Linux用户和组

6.1 Linux用户分类

在Linux系统中,由于角色不同,每个用户的权限和所能完成的任务各不相同。Linux用户分为如下的三类:

root用户在Linux系统中,root用户的权限是最高的。普通用户无法执行的操作,root用户都能完成,所以root用户也被称为超级管理用户。在Linux系统中,每一个文件、目录和进程都是归属于某一个用户的,如果没有获得用户的许可,其它普通用户是无法进行操作的。但root用户不受限制。root用户还可以超越任何用户和用户组群对文件或目录进行读取、修改和删除。可以控制程序的执行、中止;可以对硬件设备进行添加、创建和删除等操作。虚拟用户这类用户也被称为伪用户或假用户,这类用户不具备登录系统的能力,但却是系统运行不可缺少的用户。比如 bin、daemon、adm、ftp、mail等,这类用户都是系统自身拥有的。
普通用户这类用户能够登录系统,只能擦欧总自己目录的内容,权限有限,这类用户都是系统管理员创建的。

6.2 用户文件

用户的配置文件主要包括:

用户信息文件:/etc/passwd密码文件:/etc/shadow用户组文件:/etc/group用户组密码文件:/etc/gshadow

Linux系统中对于用户的管理主要通过修改配置文件来实现的。

6.2.1 /etc/passwd文件

/etc/passwd文件是系统识别用户的一个文件,系统所有的用户都在这里有登录记载。在/etc/passwd文件中,每一行都表示一个用户信息,一行有7个段位,每个段位用 :分隔,如下所示,

<code>[root@localhost etc]# cat passwd
root:x:0:0:root:/root:/
bin/bashbin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:
mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin/<code>

在文件中,各字段的含义如下:

用户名:也称为登录名,在系统内用户名具有唯一性;密码:存放加密的密码,显示的是一个 x ,密码被映射到 /etc/shadow文件中;用户标识号:系统用一个整数标识用户ID,每个用户的UID都是唯一的,root用户的UID是0,普通用户的UID从500开始;组群标识号:系统内用一个整数标识用户所属的组群ID号,每个组群的GID是唯一的;用户名全称:用户名描述,可以不设置;用户宿主目录:用户登录系统后首先进入的目录;命令解释器:用户使用的shell类型。

6.2.2 /etc/shadow文件

/etc/shadow文件是 /etc/passwd的影子文件,这个文件并不由/etc/passwd文件产生,两个文件是对应互补的。shadow文件涉及内容包括用户及被加密的密码以及其它/etc/passwd文件不能包括的信息,比如用户的有效期限等。/etc/shadow文件包括9个段位,每个段位之间用 :分隔,文件内容如下

<code>[root@localhost etc]# cat shadow
root:$6$hF5CilEiEl9bi7Nf$2zb9VcwN4m3fQL8oeRIyIAsIpJNEHx2Ktq4HuGZmH9mzIw8ZagH9DoUy345hF3SQeuNv9oJ9DMjC74ymL1Jts/::0:99999:7:::
bin:*:17834:0:99999:7:::daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
lp:*:17834:0:99999:7:::
sync:*:17834:0:99999:7:::
shutdown:*:17834:0:99999:7:::
halt:*:17834:0:99999:7:::
mail:*:17834:0:99999:7:::
operator:*:17834:0:99999:7:::
games:*:17834:0:99999:7:::
ftp:*:17834:0:99999:7:::/<code>

/etc/shadow各个字段的含义如下:


用户名:这里的用户名和/etc/passwd中的用户名一致;密码:经过加密的密码,如上所示root加密后的密码为:$6$hF5CilEiEl9bi7Nf$2zb9VcwN4m3fQL8oeRIyIAsIpJNEHx2Ktq4HuGZmH9mzIw8ZagH9DoUy345hF3SQeuNv9oJ9DMjC74ymL1Jts/上次修改秘密的时间:从1970年1月1日算起到最近以此修改密码的时间间隔(天数);两次修改密码间隔最少天数:如果设置为0,则禁用此功能。指用户可以更改密码的天数;两次修改密码间隔最多的天数:如果设置为0,则禁用此功能,指用户必须更改密码的天数;提前多少天警告用户密码将过期:用户登录系统后,系统登录程序提醒用户密码将要过期;在密码过期后多少天禁用此用户:密码过期后系统不会让此用户登录;用户过期日期:指定用户过期的天数(从1970年1月1日开始的天数),如果这个字段的数值为空,账户永久可用;保留字段:目前为空,以备将来使用。

6.2.3 /etc/group文件


具有某种共同特征的用户集合就是用户组群,/etc/group 是用户组群的配置文件,内容包括用户和用户组群,并且能够显示用户属于哪个组群或哪几个组群。一个用户可以归属于一个或多个不同的用户组群,同一用户组群的用户具有相似的特征。比如把某一个用户加入到root用户组群,那么这个用户就可以浏览root用户宿主目录的文件,如果root把某个文件的读写执行权限开放,root用户组群所有用户都可以修改此文件;如果是可执行文件,root用户组群的用户也是可以执行的。/etc/group文件内容如下:

<code>[root@localhost etc]# cat /etc/group
root:x:0:bin:x:1:
daemon:x:2:sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:
postfix/<code>

每个用户组群以添记录,一行有4个段位,每个段位用 :分隔,各个段位的定义如下:

组群名:用户组群的名称;群群密码:存放的是组群密码,显示为x,密码映射到/etc/gshadow文件中;组群标识:系统内用一个整数ID号,每个组群的UDI都是唯一的,普通组群的GID从500开始。组群成员:属于这个组群的成员;

6.2.4 /ect/gshadow文件


/etc/gshasdow文件是 /etc/group的加密文件,文件中每个用户群都有一条记录,一行有4个段位,每个段位用 :分隔,文件的内容如下,

<code>[root@localhost etc]# cat /etc/gshadow
root:::
bin:::
daemon:::
sys:::
adm:::
tty:::
disk:::
lp:::
mem:::
kmem:::
wheel:::
cdrom:::
mail:::
postfix/<code>

每个段位的定义如下:

组群名:组群的名称组群密码:组群加密后的密码组群的管理员:有权限对该组添加、删除用户组群成员:授予改组的成员列表,多个用户用 ,分隔。

6.3 实际操作
在下面的示例中,我们建立一个fruit组,并在fruit组中添加了两个用户 apple和 banana,另外我们用建了一个tomato用户。建完这三个用户后,分别给他们修改密码。

<code>[root@localhost ~]# groupadd fruit
[root@localhost ~]# useradd -g fruit apple
[root@localhost ~]# useradd -g fruit banana
[root@localhost~]#useraddtomato
[root@localhost ~]# passwd tomato
...
[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash...apple:x:1008:1008::/home/
apple:/bin/bashbanana:x:1009:1008::/home/
banana:/bin/bashtomato:x:1010:1010::/home/
tomato:/bin/bash
/<code>

可以看到,apple 的UID=1008,banana 的UID=1009,两个用户的GID=1008。tomato的UID=1010,GID=1010。apple和banana是同一个组,而tomato和他们不是同一个组。下面对/home目录下的两个目录操作,使得banana目录和apple目录对所有用户都可执行。

<code>[root@localhost home]# ls -l
总用量 0
drwx------. 2 apple fruit 114 12月 9 02:54 apple
drwx------.2bananafruit8312月902:54banana
drwx------.2tomatotomato8312月902:54tomato
[root@localhost home]# chmod 777 banana
[root@localhosthome]#chmod777apple
[root@localhost home]# ls -l
总用量 0
drwxrwxrwx. 2 apple fruit 114 12月 9 04:39 apple
drwxrwxrwx.2bananafruit8312月902:54banana
drwx------.2tomatotomato8312月902:54tomato/<code>

使用apple用户登录服务,在/home/apple目录下创建可执行程序 test.sh,并赋值执行权限,test.sh的内容如下:

<code>[apple@localhost ~]$ cat -n test.sh 1 #!/bin/bash
2 echo "-------------------------------"
3 echo "Welecom $USER"
4 echo "This is a test program"
5 echo "Gooodbye"
6 echo "-------------------------------"
[apple@localhost ~]$ chmod 754 test.sh
[apple@localhost ~]$ ls -l
总用量 4
-rwxr-xr--. 1 apple fruit 157 12月 9 02:33 test.sh/<code>


语法:chmod abc filename

其中a,b,c各为一个数字,分别表示User、Group和Other的权限。r=4,w=2,x=1,分别表示读、写和执行权限。

若要rwx属性则赋值为4+2+1=7;若要rw-属性则赋值为4+2=6;若要r-x属性则赋值为4+1=5;...

下面分别通过 root、apple、banana和tomato四个用户登录分别执行该程序,执行结果如下:

通过上述的输出结果可以看出,root、apple、banana和tomato四个用户前三个用户对于test.sh具有执行权限,而tomato只具有读的权限,这个和我们在上一节中讲的是一致的。