操作系统-多⽤户如何理解(Linux)
  单⽤户、多⽤户、单任务、多任务,这么多种操作系统容易让⼈迷糊。其实这种初看你会觉得理解了⼀点,但其实你仔细研究会发现,多⽤户到底讲的是什么⿁?
  多任务⽐较简单,就是应⽤程序都要放置到内存上去给CPU调度执⾏的,你正在使⽤的浏览器、QQ、⾳乐播放器,都放置在内存中(不⼀定此刻就在执⾏),你同⼀时刻即在浏览⽹页、玩QQ、听歌,这就是多任务。
  由于Linux继承了Unix的特性,天⽣⽀持⽤户模式,不太好对⽐,我们来看看Windows操作系统。
  个⼈计算机操作系统早期⼀般都是单⽤户操作系统,其主要特点是在某⼀时间为单个⽤户服务。早期的DOS操作系统是单⽤户单任务操作系统,Windows XP则是单⽤户多任务操作系统。现在常⽤的Windows操作系统都是多⽤户、多任务的操作系统,使⽤最⼴泛的
win7,win10都是多⽤户,多任务操作系统。
  我们平时使⽤的时候没看到什么多⽤户啊,都是我⼀个⼈在使⽤啊,难道说我坐在电脑前敲键盘,这⾥还有别的⽤户可以坐在电脑边跟我⼀起敲键盘?
  注意我们看到的是多⽤户的操作系统,⽽不是多⽤户的电脑,⼀般电脑叫什么?是不是叫个⼈计算机,是不是你⼀个⼈在使⽤,所以这⾥的多⽤户指的是操作系统的层的多⽤户,也就是不仅你输⼊密码登陆的那个账号可以使⽤系统资源(内存、磁盘、cpu),还有由你登陆的⽤户创建的新⽤户可以使⽤。多个⽤户能够同时访问和使⽤同⼀台计算机,其中的⼀个⽤户具有管理所有这些⽤户账户和整个计算机的资源的权限,在Windows上,这个具有管理其他⽤户和计算机资源的⽤户⼀般叫administrator。
  那么⽐如像Windows xp这种单⽤户系统,只能有⼀个⽤户在同⼀时间使⽤,⽐如使⽤远程桌⾯,多⽤户可以同时登录,单⽤户则会把其他⽤户挤掉。这⾥的远程桌⾯就是⼀个软件,客户端,可以对你的电脑进⾏操作。
  再举⼀个例⼦,⽤win7的管理员登录进去后,切换为账户guest执⾏关机命令,系统提⽰其他⽤户正在登录,可以说明win7是多⽤户多任务的操作系统。
  今天的主题是Linux,在Linux中是如何管理多⽤户的呢?
  ⼀、⽤户与组的概念
  1.理解linux多⽤户,多任务的特性
  Linux是⼀个真实的、完整的多⽤户多任务操作系统,多⽤户多任务就是可以在系统上建⽴多个⽤户,⽽多个⽤户可以在同⼀时间内登录同⼀个系统执⾏各⾃不同的任务,⽽互不影响,例如某台linux服务器上有4个⽤户,分别是root、www、ftp和mysql,在同⼀时间内,root ⽤户可能在查看系统⽇志,管理维护系统,www⽤户可能在修改⾃⼰的⽹页程序,ftp⽤户可能在上传软件到服务器,mysql⽤户可能在执⾏⾃⼰的SQL查询,每个⽤户互不⼲扰,有条不紊的进⾏着⾃⼰的⼯作,⽽每个⽤户之间不能越权访问,⽐如www⽤户不能执⾏mysql⽤户的SQL查询操作,ftp⽤户也不能修改www⽤户的⽹页程序,因此可知,不同⽤户具有不同的权限,每个⽤户是在权限允许的范围内完成不同的任务,linux正是通过这种权限的划分与管理,实现了多⽤户多任务的运⾏机制。
  2.linux下⽤户的⾓⾊分类
  在linux下⽤户是根据⾓⾊定义的,具体分为三种⾓⾊:
    超级⽤户:拥有对系统的最⾼管理权限,默认是root⽤户。
    普通⽤户:只能对⾃⼰⽬录下的⽂件进⾏访问和修改,具有登录系统的权限,例如上⾯提到的www⽤户、ftp⽤户等。
    虚拟⽤户:也叫“伪”⽤户,这类⽤户最⼤的特点是不能登录系统,它们的存在主要是⽅便系统管理,
满⾜相应的系统进程对⽂件属主的要求。例如系统默认的bin、adm、nobody⽤户等,⼀般运⾏的web服务,默认就是使⽤的nobody⽤户,但是nobody⽤户是不能登录系统的。
  3.⽤户和组的概念
  我们知道,Linux是⼀个多⽤户多任务的分时操作系统,如果要使⽤系统资源,就必须向系统管理员申请⼀个账户,然后通过这个账户进⼊系统。这个账户和⽤户是⼀个概念,通过建⽴不同属性的⽤户,⼀⽅⾯,可以合理的利⽤和控制系统资源,另⼀⽅⾯也可以帮助⽤户组织⽂件,提供对⽤户⽂件的安全性保护。
  每个⽤户都⽤⼀个唯⼀的⽤户名和⽤户⼝令,在登录系统时,只有正确输⼊了⽤户名和密码,才能进⼊系统和⾃⼰的主⽬录。
  ⽤户组是具有相同特征⽤户的逻辑集合,有时我们需要让多个⽤户具有相同的权限,⽐如查看、修改某⼀个⽂件的权限,⼀种⽅法是分别对多个⽤户进⾏⽂件访问授权,如果有10个⽤户的话,就需要授权10次,显然这种⽅法不太合理;另⼀种⽅法是建⽴⼀个组,让这个组具有查看、修改此⽂件的权限,然后将所有需要访问此⽂件的⽤户放⼊这个组中,那么所有⽤户就具有了和组⼀样的权限。这就是⽤户组,将⽤户分组是Linux 系统中对⽤户进⾏管理及控制访问权限的⼀种⼿段,通过定义⽤户组,在很⼤程度上简化了管理⼯作。 
  4.⽤户和组的关系:
  这⾥的⽤户和组的关系有点像数据库⾥⾯的关系:
  ⽤户和⽤户组的对应关系有:⼀对⼀、⼀对多、多对⼀和多对多;下图展⽰了这种关系:
    ⼀对⼀:即⼀个⽤户可以存在⼀个组中,也可以是组中的唯⼀成员。
    ⼀对多:即⼀个⽤户可以存在多个⽤户组中。那么此⽤户具有多个组的共同权限。
    多对⼀:多个⽤户可以存在⼀个组中,这些⽤户具有和组相同的权限。
    多对多:多个⽤户可以存在多个组中。其实就是上⾯三个对应关系的扩展。
  ⼆、⽤户配置⽂件概述
  1.⽤户和组相关的配置⽂件
  (1)/etc/passwd⽂件
  系统⽤户配置⽂件,是⽤户管理中最重要的⼀个⽂件。这个⽂件记录了Linux系统中每个⽤户的⼀些
基本属性,并且对所有⽤户可读。/etc/passwd中每⼀⾏记录对应⼀个⽤户,每⾏记录⼜被冒号分割,其格式和具体含义如下:
  ⽤户名:⼝令:⽤户标识号:组标识号:注释性描述:主⽬录:默认shell
  下⾯是/etc/passwd⽂件的部分输出:
  [root@localhost ~]# more /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin: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
  下⾯是每个字段的详细含义:
    ⽤户名:是代表⽤户账号的字符串。
    ⼝令:存放着加密后的⽤户⼝令,虽然这个字段存放的只是⽤户⼝令的加密串,不是明⽂,但是由于/etc/passwd⽂件对所有⽤户都可读,所以这仍是⼀个安全隐患。因此,现在许多Linux 版本都使⽤了shadow技术,把真正加密后的⽤户⼝令存放到/etc/shadow⽂件中,⽽在/etc/passwd⽂件的⼝令字段中只存放⼀个特殊的字符,例如⽤“x”或者“*”来表⽰。
    ⽤户标识号:就是⽤户的UID,每个⽤户都有⼀个UID,并且是唯⼀的,通常UID号的取值范围是0~65535,0是超级⽤户root的标识号,1~99由系统保留,作为管理账号,普通⽤户的标识号从100开始。⽽在Linux系统中,普通⽤户UID默认从500开始。UID是linux下确认⽤户权限的标志,⽤户的⾓⾊和权限都是通过UID来实现的,因此多个⽤户公⽤⼀个UID是⾮常危险的,会造成系统权限和管理的混乱,例如将普通⽤户的UID设置为0后,这个普通⽤户就具有了root⽤户的权限,这是极度危险的操作。因此要尽量保持⽤户UID的唯⼀性。
    组标识号:就是组的GID,与⽤户的UID类似,这个字段记录了⽤户所属的⽤户组。它对应着/etc/group⽂件中的⼀条记录。
    注释性描述:字段是对⽤户的描述信息,⽐如⽤户的住址、电话、姓名等等。
    主⽬录:也就是⽤户登录到系统之后默认所处的⽬录,也可以叫做⽤户的主⽬录、家⽬录、根⽬录等等。
    默认shell:就是⽤户登录系统后默认使⽤的命令解释器,shell是⽤户和linux内核之间的接⼝,⽤户所作的任何操作,都是通过shell传递给系统内核的。linux下常⽤的shell有sh、bash、csh等,管理员可以根据⽤户的习惯,为每个⽤户设置不同的shell。
  (2)/etc/shadow⽂件
  ⽤户影⼦⽂件,由于/etc/passwd⽂件是所有⽤户都可读的,这样就导致了⽤户的密码容易出现泄露,因此,linux将⽤户的密码信
从/etc/passwd中分离出来,单独的放到了⼀个⽂件中,这个⽂件就是/etc/shadow,该⽂件只有root⽤户拥有读权限,从⽽保证了⽤户密码的安全性。
  下⾯介绍下/etc/shadow⽂件内容的格式:
  ⽤户名:加密⼝令:最后⼀次修改时间:最⼩时间间隔:最⼤时间间隔:警告时间:不活动时间:失效时间:保留字段
例如:
  下⾯是/etc/shadow⽂件的部分输出:
  [root@localhost ~]# more /etc/shadow
    root:$1$Uvip.QJI$GteCsLrSSfpnMs.VCOvbs/:14169:0:99999:7:::
    bin:*:13934:0:99999:7:::
    daemon:*:13934:0:99999:7:::
    adm:*:13934:0:99999:7:::
  下⾯是每个字段的详细含义:
    ⽤户名:与/etc/passwd⽂件中的⽤户名有相同的含义。
    加密⼝令:存放的是加密后的⽤户⼝令字串,如果此字段是“*”、“!”、“x”等字符,则对应的⽤户不能登录系统。
    最后⼀次修改时间:表⽰从某个时间起,到⽤户最近⼀次修改⼝令的间隔天数。可以通过passwd 来修改⽤户的密码,然后查
看/etc/shadow中此字段的变化。
    最⼩时间间隔:表⽰两次修改密码之间的最⼩时间间隔。
    最⼤时间间隔:表⽰两次修改密码之间的最⼤时间间隔,这个设置能增强管理员管理⽤户的时效性。
    警告时间:表⽰从系统开始警告⽤户到密码正式失效之间的天数。
    不活动时间:此字段表⽰⽤户⼝令作废多少天后,系统会禁⽤此⽤户,也就是说系统不再让此⽤户登录,也不会提⽰⽤户过期,是完全禁⽤。
    失效时间:表⽰该⽤户的帐号⽣存期,超过这个设定时间,帐号失效,⽤户就⽆法登录系统了。如果这个字段的值为空,帐号永久可⽤。
    保留字段:linux的保留字段,⽬前为空,以备linux⽇后发展之⽤。
  (3)/etc/group⽂件
  ⽤户组配置⽂件,⽤户组的所有信息都存放在此⽂件中。
  下⾯介绍下/etc/group⽂件内容的格式:
shadow什么意思啊  组名:⼝令:组标识号:组内⽤户列表
例如:
  下⾯是/etc/group的部分输出:
  [root@localhost ~]# more /etc/group
    root:x:0:root
    bin:x:1:root,bin,daemon
    daemon:x:2:root,bin,daemon
  下⾯是/etc/group每个字段的含义:
    组名:是⽤户组的名称,由字母或数字构成。与/etc/passwd中的⽤户名⼀样,组名不能重复。
    ⼝令:存放的是⽤户组加密后的⼝令字串,密码默认设置在/etc/gshadow⽂件中,⽽在这⾥⽤“x”代替,linux系统下默认的⽤户组都没有⼝令,可以通过gpasswd来给⽤户组添加密码。
    组标识号:就是GID,与/etc/passwd中的组标识号对应。
    组内⽤户列表:显⽰属于这个组的所有⽤户,多个⽤户之间⽤逗号分隔。
  2./etc/login.defs⽂件
  ⽤来定义创建⼀个⽤户时的默认设置,⽐如指定⽤户的UID和GID的范围,⽤户的过期时间、是否需要创建⽤户主⽬录等等。
  下⾯是rhel5下的/etc/login.defs⽂件,简单介绍如下:
    MAIL_DIR        /var/spool/mail
  当创建⽤户时,同时在⽬录/var/spool/mail中创建⼀个⽤户mail⽂件
    PASS_MAX_DAYS  99999
  #指定密码保持有效的最⼤天数
    PASS_MIN_DAYS  0
  表⽰⾃从上次密码修改以来多少天后⽤户才被允许修改⼝令
    PASS_MIN_LEN    5
  指定密码的最⼩长度
    PASS_WARN_AGE  7
  表⽰在⼝令到期前多少天系统开始通知⽤户⼝令即将到期
    UID_MIN                  500
  指定最⼩UID为500 ,也就是说添加⽤户时,⽤户的UID 从500开始
    UID_MAX                60000
  指定最⼤UID为60000
    GID_MIN                  500
  指定最⼩GID为500,也就是添加组时,组的GID从500开始。
    GID_MAX                60000
  指定最⼤GID为60000
    CREATE_HOME    yes
  此项是指定是否创建⽤户主⽬录,yes为创建,no为不创建。
  3./etc/default/useradd⽂件
  当我们通过useradd命令不加任何参数创建⼀个⽤户后,⽤户默认的主⽬录⼀般位于/home下,默认使⽤的shell是/bin/bash,这是为什么呢,看看/etc/default/useradd这个⽂件的内容就完全明⽩了。
  [root@localhost ~]# more /etc/default/useradd
    # useradd defaults file
    GROUP=100
    HOME=/home  #此项表⽰将新建⽤户的主⽬录放在/home⽬录下
    INACTIVE=-1 #此项表⽰是否启⽤帐号过期禁⽤,-1表⽰不启⽤
    EXPIRE=    #此项表⽰帐号过期⽇期,不设置表⽰不启⽤
    SHELL=/bin/bash  #此项指定了新建⽤户的默认shell类型
    SKEL=/etc/skel  #此项⽤来指定⽤户主⽬录默认⽂件的来源,也就是说新建⽤户主⽬录下的⽂件都是从这个⽬录下复制⽽来的
    CREATE_MAIL_SPOOL=no
  /etc/default/useradd⽂件定义了新建⽤户的⼀些默认属性,⽐如⽤户的主⽬录、使⽤的shell等等,通过更改此⽂件,可以改变创建新⽤户的默认属性值。
  改变此⽂件有两种⽅法,⼀种是通过⽂本编辑器⽅式更改,另⼀种是通过useradd命令来更改。这⾥介绍⼀下第⼆种⽅法:
  Useradd命令加“-D”参数后,就可以修改配置⽂件/etc/default/useradd,使⽤的⼀般格式为:
    useradd -D [-g group] [-b base] [-s shell] [-f inactive] [-e expire ]
  每个选项详细含义如下:
    -g default_group
  表⽰新建⽤户的起始组名或者GID,组名必须为已经存在的⽤户组名称,GID也必须是已经存在的⽤户组GID。与/etc/default/useradd⽂件中“GROUP”⾏对应。
    -b default_home
  指定新建⽤户主⽬录的上级⽬录,也就是所有新建⽤户都会在此⽬录下创建⾃⼰的主⽬录。与/etc/default/useradd⽂件中HOME⾏对应。
    -s default_shell
  指定新建⽤户默认使⽤的shell,与/etc/default/useradd⽂件中“SHELL”⾏对应。
    -f default_inactive
  指定⽤户帐号过期多长时间后就永久停⽤,与/etc/default/useradd⽂件中“INACTIVE”⾏对应。
    -e default_expire_date
  指定⽤户帐号的过期时间。与/etc/default/useradd⽂件中“EXPIRE”⾏对应。
例⼦:
  useradd –D不加任何参数时,显⽰/etc/default/useradd⽂件的当前设置
  [root@localhost ~]# useradd -D
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/bash
    SKEL=/etc/skel
  如果要修改添加⽤户时的默认shell为/bin/csh,可以这么操作:
  [root@localhost ~]# useradd -D -s /bin/csh
  [root@localhost ~]# useradd -D
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/csh
    SKEL=/etc/skel
  4./etc/skel⽬录
  在创建⼀个新⽤户后,会在新⽤户的主⽬录下看到类似.bash_profile, .bashrc, .bash_logout等⽂件,这些⽂件是怎么来的呢,如果我想让新建⽴的⽤户在主⽬录下默认拥有⾃⼰指定的配置⽂件,该如何设置呢?
  /etc/skel⽬录就是解决这个问题的,/etc/skel⽬录定义了新建⽤户在主⽬录下默认的配置⽂件,更改/etc/skel⽬录下的内容就可以改变新建⽤户默认主⽬录的配置⽂件信息。
  ⽤户管理⼯具 
  ⼀.添加、切换、删除⽤户组命令groupadd/newgrp/groupdel
  1.groupadd命令
  ⽤来新建⼀个⽤户组。语法格式为:
    groupadd [-g -o] gid  group
  各个选项具体含义如下:
    -g:指定新建⽤户组的GID号,该GID号必须唯⼀,不能和其它⽤户组的GID号重复。
    -o:⼀般与-g选项同时使⽤,表⽰新⽤户组的GID可以与系统已有⽤户组的GID相同。
例如:
  创建⼀个linuxfans的⽤户组和⼀个fanslinux⽤户组,GID分别为1020和1030
  [root@localhost ~]# groupadd -g 1020 linuxfans
  [root@localhost ~]# groupadd -g 1030 fanslinux
  [root@localhost ~]# more /etc/group|grep  linuxfans
    linuxfans:x:1020:
  [root@localhost ~]# more /etc/group|grep  fanslinux
    fanslinux:x:1030:
  2.newgrp命令
  如果⼀个⽤户同时属于多个⽤户组,那么⽤户可以在⽤户组之间切换,以便具有其他⽤户组的权限,newgrp主要⽤于在多个⽤户组之间进⾏切换,语法格式为:
    newgrp <⽤户组>
例⼦:
  下⾯通过实例讲述newgrp的⽤法:
  ⾸先建⽴了3个⽤户组group1、group2和group3.
  [root@localhost ~]# groupadd group1
  [root@localhost ~]# groupadd group2
  [root@localhost ~]# groupadd group3
  下⾯创建了⼀个⽤户user1,同时指定user1的主⽤户组为group1,附加⽤户组为group2和group3
  [root@localhost ~]# useradd -g group1 -G group2,group3 user1
  [root@localhost ~]# more /etc/group|grep user1
    group2:x:501:user1
    group3:x:502:user1
  下⾯是对⽤户user1设置密码
  [root@localhost ~]# passwd user1
    Changing password for user user1.
    New UNIX password:
    Retype new UNIX password:
    passwd: all authentication tokens updated successfully.
  下⾯是切换到user1⽤户下,通过newgrp切换⽤户组进⾏的⼀系列操作,从中可以看出newgrp的作⽤。
  [root@localhost ~]# su - user1
  [user1@localhost ~]$ whoami
    user1
  [user1@localhost ~]$ mkdir user1_doc
  [user1@localhost ~]$ newgrp group2
  [user1@localhost ~]$ mkdir user2_doc
  [user1@localhost ~]$ newgrp group3
  [user1@localhost ~]$ mkdir user3_doc
  [user1@localhost ~]$ ll
    total 12
    drwxr-xr-x  2 user1 group1 4096 Oct 24 01:18 user1_doc
    drwxr-xr-x  2 user1 group2 4096 Oct 24 01:18 user2_doc
    drwxr-xr-x  2 user1 group3 4096 Oct 24 01:19 user3_doc
  [user1@localhost ~]$
  3.groupdel命令
  表⽰删除⽤户组,语法格式为:
    groupdel [组名称]
  当需要从系统上删除⽤户组时,可⽤groupdel指令来完成这项⼯作。如果该⽤户组中仍包括某些⽤户,则必须先删除这些⽤户后,然后才能删除⽤户组。
例如:
  删除linuxfans这个⽤户组
  [root@localhost ~]# groupdel  linuxfans
  ⼆. 添加、修改和删除⽤户命令useradd/usermod/userdel
  1.useradd建⽴⽤户的过程
  useradd不加任何参数创建⽤户时,系统⾸先读取添加⽤户配置⽂件/etc/login.defs和/etc/default/useradd,根据这两个配置⽂件中定义的规则添加⽤户,然后会向/etc/passwd和/etc/group⽂件添加⽤户和⽤户组记录,同时/etc/passwd和/etc/group对应的加密⽂件也会⾃动⽣成记录,接着系统会⾃动在/etc/default/useradd⽂件设定的⽬录下建⽴⽤户主⽬录,最后复制/etc/skel⽬录中的所有⽂件到新⽤户的主⽬录中,这样⼀个新的⽤户就建⽴完成了。
  2.useradd的使⽤语法
  useradd语法的⼀般格式为:
    useradd  [-u uid [-o]] [-g group] [-G group,...]
    [-d home] [-s shell] [-c comment]
    [-f inactive] [-e expire ] name
  各个选项具体含义如下:
    -u uid:即⽤户标识号,此标识号必须唯⼀。
    -g group:指定新建⽤户登录时所属的默认组,或者叫主组。此组必须已经存在。
    -G group:指定新建⽤户的附加组,此组必须已经存在。附加组是相对与主组⽽⾔的,当⼀个⽤户同时是多个组中的成员时,登录时的默认组成为主组,⽽其它组称为附加组。
    -d home:指定新建⽤户的默认主⽬录,如果不指定,系统会在/etc/default/useradd⽂件指定的⽬录下创建⽤户主⽬录。
    -s shell:指定新建⽤户使⽤的默认shell,如果不指定,系统以/etc/default/useradd⽂件中定义的shell作为新建⽤户的默认shell。
    -c comment:对新建⽤户的说明信息。
    -f inactive:指定帐号过期多长时间后永久停⽤。当值为0时帐号则⽴刻被停权。⽽当值为-1时则关闭此功能,预设值为-1
    -e expire:指定⽤户的帐号过期时间,⽇期的指定格式为MM/DD/YY。
    name:指定需要创建的⽤户名。
  3.usermod的使⽤语法
  usermod⽤来修改⽤户的账户属性信息,使⽤语法如下:
    usermod  [-u uid [-o]] [-g group] [-G group,...]
[-d 主⽬录 [-m]] [-s shell] [-c 注释] [-l 新名称]
[-f 失效⽇期] [-e 过期⽇期][-L|-U] Name
  各个选项具体含义如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。