首页 > 代码库 > Linux系统用户与组的基本命令

Linux系统用户与组的基本命令

 用户和组的管理主要是出于对人员的管理,在多用户多任务分时操作系统中;所有一个要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面能帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也能帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个惟一的用户名和用户密码。用户在登录时键入正确的用户名和密码后,才能进入系统和自己的主目录。用户和组的管理就是要对员工的账号进行不同程度的管理,一个用户属于什么组对应的使用这个组所给予用户的权限,限制了用户对系统的操作,让用户不能“为所欲为”;为了保证安全对那些不能登录系统但需要在后台运行的用户,以非管理员的身份运行;即为系统用户;对那些能够正常使用系统资源的用户称为登录用户;

 所谓多用户多任务就是对用户分配一定的资源,避免资源滥用的情况发生;而能够在系统中使用资源和完成任务的实体是应用程序进程;而进程是以发起者的身份来运行的,可以理解为进程的所有者就是发起者;会将发起者的信息标志在进程上;当进程试图访问资源的时候,安全上下文会去比较进程所有者和资源所有者的关系;首先查看进程的所有者是不是资源的所有者,如果是就按照属主的权限来使用资源;如果不是,则判断进程所有者是否属于资源所属组,如果是,按照属组的权限使用资源;如果不是,则直接使用资源的其他人访问权限来使用资源;

 用户账号:就是计算机操作者在操作系统中的身份映射;

 用户分类:

       超级用户(root)

       普通用户:

       系统用户:为了保证安全,必须要让那些运行在后台的进程或者服务类进程以非管理员的身        份运行;(不能登录系统但需要在后台运行的用户)

       登录用户:能够正常使用整个系统资源的用户;

 用户的标识:

用户登陆名称:为操作者准备的简单易记的字符标识;

用户的ID(UID):为计算机系统准备的数字标识;

超级用户:ID为0;ID号为0,即便是用户也相当于超级用户;

系统用户与登录用户之间还可以利用用户ID号进行区别;

在centos7的环境下系统用户的ID号为1-999,登录用户的ID号为1000-60000;

在centos5,6的环境下系统用户的ID号为1-499,登录用户的ID号为500-60000;

 解析库:/etc/passwd

       /etc/group

     /etc/passwd:在此文件中的每一行内容都代表一个用户;

    格式:name:password:UID:GID:GECOS:directory:shell

      name:登录名

    password:密码字段,现做在使用shadow机制的系统中,通常使用“x”作为占位符;

    UID:用户ID;

    GID:此用户主要组的ID;

    GECOS:commont,注释类的信息,现在一般都会用来存放用户的说明信息或全名;可以留空;

    directory:用户的家目录的路径;

    shell:登陆成功后启用的shell,默认登陆shell的启用路径;

[root@localhost wjq]# head-1 /etc/passwd

root:x:0:0:root:/root:/bin/bash


/etc/group:将用户分组是Linux 系统中对用户进行管理及控制访问权限的一种手段。每个用户      都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。当一个用户同      时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的      默认组,而其他组称为附加组。

格式:group_name:password:GID:user_list

group_name:组名

password:组密码占位符,默认为空;

GID:组的ID

user_list:以该组为附加组的用户的列表;


    

  认证库:用户的认证信息库:/etc/shadow

      组的认证信息库:/etc/gshadow

   /etc/shadow:它由pwconv命令根据/etc/passwd中的数据自动产生

格式:Login name:encrypted password:Date of last password charge:minimum            passwordage:maximum password age:passwordwarning period:password inactivity        period:

login name:用户的登录名;

encrypted password:加了密的密码;

格式:$算法$salt$真正意义的加密密码

如果该位置为!,则表明用户的密码被禁用;

如果该位置为*,则表明该用户为系统用户,不能登录;

如果该字段为空,则表明用户可以无需密码既可登录系统;

Date of last password charge:

相对时间概念,相对于1970年一月一日到最后一次修改密码的那天的天数;

minimum password age:

在多长时间之内无法修改密码,默认值为0;即随时可修改;

如非0,则在这个时间内不可修改,针对普通用户,root用户不受限制;

maximum password age:

在多长时间之后密码过期,这个时间的默认值为99999;即永久有效;

password warning period:

密码过期之前的友善提醒天数。默认为七天

password inactivity period:

密码过期之后的宽限期;默认不启用;默认值-1;

account expiration data:

用户账户密码过期的日期;一旦到了这一天,即使密码还有效也不能在访问系统了,这是一个绝      对过期的期限;

Reserve field:

保留字段,以便日后使用;

/etc/gshadow:

group name:encrypted password:administrators:members

 

在对用户进行认证采用密码认证机制:

   设置密码的一般策略:

     1.尽量使用随机字串作为密码;

     2.密码的长度一般不要少于八个字;

     3.密码中尽量包括大小写字母,数字和标点符号四类字符中的三类;

     4.不定期更换,每隔一段时间更换换一个密码;(推荐42天改一次)

    在Linux中,保存到认证库最终的密码信息是经过加密保存的;

      hash单向加密算法,抽取原始数据的特征信息,数据指纹;

    单向加密算法特征:

     1.只要数据相同其加密结果必然相同;

     2.无论数据多大,其加密结果定长输出;

     3.雪崩效应(修改一个加密内容结果千差万别);

     4.不可逆;

    单向加密常用算法:

    1.md5:message digest,消息摘要,128bit定长输出;

    2.sha1:Secure Hash Algorithm,安全的哈希算法,168bit定长输出;

    3.sha224

    4.sha256

    5.sha384

    6.sha512

salt:随机数

/dev/random:仅仅只是从熵池中返回随机数;熵池搜集随机数的设备;熵池的数据是来源于中断所产生的随机数;如果熵池随机数耗尽,则进程被阻塞;什么时候进程有了才拿去运行;

/dev/urandom:先试图从熵池中返回随机数,如果熵池耗尽,则利用伪随机数生成器生产伪随机数;

[root@localhost wjq]# echo"qwerr"|sha512sum

12fdedd678bd067ffb3904228babb25e17211b09478a9436c438bab1dd2545034139c44f705769b397ad22b885d610442b16c960c40ce094cbd9d53adc2e1e50  -

 

最终认证字符串:算法+salt+密码

在认证库中存放的算法:$6$salt$crytped_password


下面阐述一下关于组的概念

组类别:

 管理员组

 普通用户组:

  系统组

 登陆组

 组的标识方法:

       组名:

         方便操作者使用;

      组的ID:

            为系统操作提供标识;

       管理员组:0

      系统组:Centos5,6;1-499

       Centos7; 1-999

       登陆组: Centos5,6;500-6000

             Centos7;1000-60000

组也需要认证,所以组也有认证库:/etc/gpasswd

组也需要密码保护:

如果组没有设置密码保护的话就不能随时加入;


以用户为核心,来对组进行分类:

用户的主要组(基本组):primary group,对于用户来讲必须要有,而且只能有一个。

用户的附加组(附属组,额外组):AdditionGroup这样的组可以有,也可以有多个;

 

根据组所容纳的用户来分:

私有组:组名与用户登录名相同,并且组中只有此用户;

公共组:组中可以包含其他多个不同的用户;

注意:默认情况下,用户的主要组都是其私有组;


组管理命令:

groupadd:新建组账户,添加组;

groupadd [选项] group

-g gid:在创建组账户时,指定组账户的GID,如果不用该选项指定,则系统会选择在组解析文件中不大于60000最大GID加1作为新组的组ID;

-r:创建系统组,意思就是创建GID在1-999(1-499)之间的组;


groupmod:修改组的相关属性信息;

groupmod [选项] group

-g gid:修改组账户ID;

-n NEW_GROUPNAME 旧名;修改组名;

 

groupdel:删除组账户

groupdel [选项] GROUPNAME

注意:如果某个组是某个用户的主要组,则改组无法删除;


用户管理的命令:

useradd:

useradd [选项] 登录名;

系统为我们改了很多东西,具体保存在配置中(/etc/defaultsfile)

/etc/default/useradd

/etc/login.defs

/etc/skel

以上三个文件和目录能够帮助管理员在未指定任何选项时,也能创建用户,为用户赋予默认的属性;

选项:

-c:--comment ‘COMMENT‘在创建用户时,为用户添加注释信息,一般为全名;


-d:--home PATH/TO/HOME_DIR,在创建用户的时候为用户提供家目录的绝对路径,被指定的目录应该是事先不存在的目录;

     [root@localhost ~]# useradd -d /usr/wq wq

-E:在创建用户时,为用户指定主组;(主组只能有一个)

-G:--groups GROUP1[,Group2,…[,GROUP3,…[…]]]在创建用户时添加附加组(把用户添加到该组下);

     [root@localhost/]# adduser -s /bin/sh -G aAc,aAC wq

-m:--creat-home 强制性的为用户创建家目录;

-M:在创建用户时绝对不会创建用户的家目录;即使在

/etc/login.defs中CREATE_HOME的值为yes时也不创建;

-r:创建系统用户;

-u:--uid UID,在创建用户的时候,为用户指定UID,这个UID可以超过60000的界限;

-s:--shell,SHELL,/PATH/TO/SHELL;如/bin/csh在创建用户时,为用户指定默认shell;必须使用绝对路径;可以使用

[root@localhostwjq]# cat /etc/shells查看shell路径;

     -D:显示或修改用户默认属性值;

   -s:直接修改默认属性文件中的用户指定shell;

[root@localhost wjq]#useradd -D -s /bin/csh

[root@localhost wjq]# cat/etc/default/useradd

# useradd defaults file

GROUP=100

HOME=/home

INACTIVE=-1

EXPIRE=

SHELL=/bin/csh

SKEL=/etc/skel

CREATE_MAIL_SPOOL=yes

 

[root@localhostwjq]#tail -n1  /etc/{passwd,group,shadow,gshadow}

==> /etc/passwd <==

d:x:1003:1003::/home/d:/bin/bash

 

==> /etc/group <==

d:x:1003:

 

==> /etc/shadow <==

d:!!:17243:0:99999:7:::

 

==> /etc/gshadow <==

d:!::

[root@localhost wjq]#

 

 

usermod:

usermod [选项] 登录名

选项:

-c:修改用户注释信息;

-g:修改用户主要组;

-G:添加附加组,使用-G后修改用户的附加组为列表中的组。将用户追加到某些组中;

-a:在原有附加组的基础上再增加附加组,只能跟-G一起用;

-d:修改用户的家目录;-m,在-d的同时使用-m把原来家目录里的文件一起移动到新的家目录里头去;

-l:改名,更改用户账号的登录名;

-s:修改用户账户的登陆shell,要加绝对路径;

-u:修改账户的UID;

-L:锁定用户密码;

-U:解锁用户密码;

使用方式与useradd相似;

 

userdel:删除用户账户

userdel [选项] 登录名

选项:

-r:删除用户的同时,删除用户的家目录;

     [root@localhost wq]# userdel -r wq


用户认证相关命令:

passwd:设置查看用户的密码信息的命令(密码锁定后为!号)

passwd  [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-     iinactivedays] [-S] [--stdin] [username]

    1.如果省略用户名,意味着更改当前登录用户的密码;

    2.如果指定用户名,更改指定用户的密码只能是root使用;

选项:

-l:--lock;锁定用户密码;

-u:--unlock;解锁用户密码;

注意:相比较usermod –L|-U,其优先级更高,如果使用usermod –L锁定密码,可以使用passwd –u解锁,而使用passwd –l锁定密码,无法使用usermod –U解锁;

-d:--delete,删除用户密码,将/etc/shadow文件中第二字段清空;

-S:查看用户的密码状态;

--stdin:借助于管道,将输入数据流当作标准输入信息送给passwd命令;

#echo “pasdff”|passwd –stdin USERNAME(更改密码操作)

 

组认证相关命令:

gpasswd [选项] groupname

选项

-a:--adduser,向名为group的组中添加用户user;

-d:从名为group的组中删除user;

 

其他命令:

su:切换用户身份;

su username:部分切换,半切换,不会重新读取目标用户的配置文件,因此用户并没有登陆行为,所以工作环境不初始化;

su – username:登陆式切换,在切换用户时会重新读取目标用户配置文件,并且初始化工作环境;

相当于su –l username

-c COMMAND:并不会切换用户身份,而是以目标用户的身份执行某命令;

使用su命令时,从root切换到其他普通用户,不需要密码,但普通登录用户进行切换时必须给出目标用户密码,否则切换失败;

 

进行用户切换之后,不要连续切换,而是用exit命令,返回之前的用户;

su – root –c ls /root

 

newgrp GROUPNAME :临时更改当前登录的主要组;使用exit返回之前的状态;

 

id:显示真实的有效的用户和组的ID

      真实的ID:在/etc/passwd定义的用户的UID和GID;

      有效的ID:当前生效的用户的UID和GID;

      Id [option] 。。。[user]

      -u:显示有效的UID;

      -g:显示有效的GID;

      -n:显示名字;

      -G:显示用户所有组的ID;

    

     chsh:修改用户的默认shell,相当于usermod –s;

 





 



 




 





 


Linux系统用户与组的基本命令