Linux系统下用户与组的管理

一、用户及组基本概述

Linux 系统上,用户管理是基于用户名和密码的方式进行资源的分配。

1、uid(用户身份标识)

(1)root用户

 uid为0

(2)普通用户:1--65535

    系统用户 系统已经已经存在专门用来对系统服务或者系统资源进行管理的

              1--499(CentOS 6.X)

              1--999 (CentOS 7.X)

    登录用户(平时专门做系统管理的用户)

              500+ (CentOS 6.X)

              1000+ (CeentOS 7.X)

2、gid(用户组身份标识)

(1)root组

    gid为0

(2)普通组

    系统组:1-499(CentOS 6.X), 1-999(CENTOS7)

普通组:500+(CentOS 6.x),1000+(CENTOS7)

3、用户和组的关系

(1)每个用户必须属于一个与用户同名的组(默认的情况)这个组一般叫做基本组(主组)

(2)一个用户可以属于除基本组之外的其他组,这个组就叫做(附加组)(辅助组)

二、用户和组的配置文件

1、用户的配置文件和用户的信息文件/etc/passwd

[root@localhost yum.repos.d]#cat /etc/passwd

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

共有七个字段以“:”分隔,作用为:

第一字段root:用户名

第二字段x:密码占位符

第三字段0:用户UID

第四字段0: GID

第五字段root: 用户说明信息

第六字段 /root: 用户家目录

第七字段 /bin/bash 用户的shell

2、用户的配置文件/etc/shadow

[root@localhostyum.repos.d]# cat /etc/shadow

root:$6$NJND277cVP5/NHvE$tH3CGuhyQJ.btAswXYkcJUNr62LjEy24hXlvu.AA2fVLSfNwrSrIHhcBrZM5N61XkiE5M/t6x3k/XDkdcBObO1::0:99999:7:::bin:*:16659:0:99999:7:::

共有九个字段以“:”分隔,作用为:

第一字段 root:用户名

第二字段 为加密后的密码(密码这一段 如果是! * 说明这个账号是不可用被锁定)

第三字段 密码的最后一次修改日期(使用1970年1月1日作为标准时间,每过一天,时间戳加一)

第四字段 两次密码修改的时间间隔

第五字段 密码的有效期,为99999时表示永不过期

第六字段 密码到期几天时提示修改密码,此处表示密码到期之前7天提醒修改密码

第七字段 密码到期后的宽限天数,即密码到期后这个账户还可以使用几天 

        0 代表密码过期后立即失效

        -1 代表密码过期后用户失效

第八字段 账号的失效时间,用时间戳表示

第九字段 保留

3、用户的组信息文件/etc/group

[root@localhost~]# cat /etc/group

root:x:0:

    共有四个字段以“:”分隔,作用为:

       第一字段 组名

第二字段 密码占位符

第三字段 组ID即GID

第四字段 组里附加的用户

4、组密码文件/etc/gshadow

[root@localhost~]# cat /etc/gshadow

root:::

    共有四个字段以“:”分隔,作用为:

       第一字段 组名

第二字段 组密码

第三字段 组管理员用户名

第四字段 组中附加用户

三、用户和组的管理

1、用户管理的重要目录

(1)用户的家目录

    普通用户:/home/UserName,所有者和所属组都是此用户权限是700

    超级用户:/root/,所有者和所所属组都是root用户,权限是550

(2)用户的模板目录:

/etc/skel目录:用来存放新用户配置文件的目录,当我们添加新用户时,这个目录下的所有文件会被复制到新添加的用户的家目录下,/etc/skel目录下的所有文件都是隐藏文件。

    /etc/default/useradd:

       作用:在使用useradd添加用户时的一个需要调用的一个默认配置文件

       内容:# useradddefaults file

GROUP=100

HOME=/home           默认家目录

INACTIVE=-1            密码失效日期,shadow第7列

EXPIRE=                账号失效日期第8列

SHELL=/bin/bash

SKEL=/etc/skel           家目录下面的隐藏文件的模板

CREATE_MAIL_SPOOL=yes 是否创建一个邮箱账户

    /etc/login.defs :

作用:用来定义创建用户时需要的一些用户配置信息

内容:MAIL_DIR        /var/spool/mail

PASS_MAX_DAYS   99999                #密码有效期

PASS_MIN_DAYS   0                 #密码修改间隔

PASS_MIN_LEN    5                 #密码最小为5位

PASS_WARN_AGE   7                 #密码到期警告

UID_MIN                  1000        #最小的uid范围

UID_MAX                 60000        #最大的uid范围

SYS_UID_MIN               201       

SYS_UID_MAX               999       

GID_MIN                  1000       #最小的GID范围

GID_MAX                 60000       #最大GID范围

SYS_GID_MIN               201

SYS_GID_MAX               999

CREATE_HOME     yes

UMASK           077

USERGROUPS_ENAB yes

ENCRYPT_METHOD SHA512              #密码的加密算法

2、添加用户命令useradd

(1)useradd命令格式:useradd [选项] UserName

(2)选项: -u 指定UID (默认500|1000开头)

    -o 新建用户前不检查指定的UID是否存在(一般不要使用这个选项)

    -g  GID|组名  指明用户所属的基本组 (使用比较多)

    -G  指明用户所属的附加组

    -d  指定某个目录作为家目录,默认/home

    -s  指明用户默认的shell 默认/bin/bash  通常会指定/sbin/nologin(使用较多)

    -c  “ ”  指定用户注释信息

    -r  新建系统用户

    -m  默认选项 创建用户家目录

-M  不创建用户家目录(使用较多)

-D 修改用户的默认选项(修改的是/etc/default/useradd中的选项)

(3)指定选项添加用户:

    useradd –u 550 –g dayi123 –G root –d /home/dayi123 –c “test user”–s /bin/bash dayi123

3修改用户属性usermod

(1)用法:usermod [选项] UserName

(2)选项:参数同useradd,部分不同参数如下:

          -G GROUP1,GROUP2:新附加组,原来的附加组将会被覆盖,若要保留原有,则           要同时使用-a选项,表示追加

          -l login_name:新的名字

          -L 锁定指定用户

          -U 解锁指定用户

          -e YYYY-MM-DD:指定用户的过期日期

          -f INACTIVE:指定非活动期限

          -d 修改用户的家目录

4、给用户设定密码:

(1)用法:password [选项] UserName

(2)选项: -l:锁定指定用户

           -u:解锁指定用户

           -e:强制用户下次登录修改密码

           -nmindays: 指定最短使用期限

           -x maxdays:最大使用期限

           -wwarndays:提前多少天开始警告

           -i inactivedays:非活动期限

           --stdin 可以通过管道符输的数据作为用户密码

(3)应用

    修改root用户密码:passwd 回车即可修改

[root@dayi123~]# passwd

Changingpassword for user root.

Newpassword:

BADPASSWORD: it is based on a dictionary word

Retypenew password:

passwd:all authentication tokens updated successfully.

    修改普通用户密码:passwd [选项] UserName 

[root@dayi123~]# passwd dayi123

Changingpassword for user dayi123.

Newpassword:

BADPASSWORD: it is based on a dictionary word

Retypenew password:

passwd:all authentication tokens updated successfully.

    通过管道符修改密码(不需要确认):echo“password@123” | passwd –stdin dayi123

[root@dayi123~]# echo 'dayi123' | passwd --stdin dayi123

Changingpassword for user dayi123.

passwd:all authentication tokens updated successfully.

    注意:注意字符串有一个$符号 会把后面的内容给替换成变量而这个变量为空,所以切记改密码的时候要使用单引号 强引用

5、修改用户密码的状态chage

(1)用法:chage [选项] 用户名

(2)选项:-l 列出用户详细密码状态

          -d 日期:修改密码最后一次修改日期(shadow3字段)

          -m 天数:两次密码修改间隔(shadow中四字段)

          -M 天数:密码有效期(shadow中5字段)

          -W 天数:密码过期前警告天数(shadow中6字段)

          -I 天数:密码过期后宽限天数(shadow第7字段)

          -E 日期:账号失效时间(shadow中8字段)

(3)应用:

     要求用户在第一次登陆的时候必须强制一定要修改密码:chage -d 0 dayi123

6、删除用户userdel

(1)用法:userdel [参数] UserName

(2)参数:-f:强制删除用户,即使用户当前已登录;

-r:删除用户的同时,删除与用户相关的所有文件。

(3)应用:

     删除dayi123用户及所有相关文件:userdeldayi123

7、组管理命令groupadd、groupdel、groupmod、gpasswd

(1)groupadd 新建用户组

     语法:groupadd [参数]GroupName

     参数: -g:指定新建工作组的id;

-r:创建系统工作组,系统工作组的组ID小于500;

     应用举例:新建组dayi并指定GID为555

[root@dayi123~]# groupadd -g 555 dayi

[root@dayi123~]# cat /etc/group | grep dayi

dayi:x:555:

(2)groupdel 删除用户组(首先删除对应的用户  然后才能执行对应的组的删除操作)

     语法:groupdel GroupName

(3)groupmod修改组信息

     语法:groupmod [参数]GroupName

     参数:-n 新的名字

          -g 新的GID

     修改组dayi名称为dy,修改GID为666:

[root@dayi123~]# groupmod -g 666 -n dy dayi

[root@dayi123~]# cat /etc/group | grep dy

dy:x:666:

(4)gpasswd给组新建一个密码

(5)groupmems用户主组的管理员成员

     用法:groupmems [选项] [动作]

     参数:-g 组  -a 用户名

           -g 组  -d 删除

           -g组  -p 清空

           -g组  -l 列出组内所有的用户

     应用:把test添加到dayi123用户组,并列出dayi123组内所有成员

      [root@dayi123 ~]# groupmems -g dayi123 -atest

 [root@dayi123 ~]# groupmems -g dayi123 -l

test

7、用户和组管理的其他命令

(1)chfn命令

    1)作用:改变finger命令显示的信息
    2)用法: chfn [参数]

    3)应用举例:

[root@localhostdata]# chfn

Changingfinger information for root.

Name[root]: root

Office[]: mgedu

OfficePhone []: 123456

HomePhone []: 23456

 

Fingerinformation changed.

(2)chsh命令

    1)作用:更换登录系统时使用的shell
    2)语法:chsh [参数]

    3)应用举例:

[root@localhostdata]# chsh

Changingshell for root.

Newshell [/bin/bash]:

(3)finger命令

    1)作用:用于查找并显示用户信息
    2)语法:finger [ 参数]

    3)应用举例:

[root@localhostdata]# finger

Login     Name      Tty      Idle  Login Time  Office     Office Phone   Host

root      root      tty1    22:23  Mar 30 13:16 mgedu      123456       

root      root      pts/0          Mar 31 08:54mgedu      123456         

四、用户身份切换su

1、作用:进行用户身份的切换

2、语法:su – UserName  #切换用户身份,所有的环境都会切过去

         su UserName     #切换用户身份,某些环境变量可能不会切换过去

su - UserName -c "date +'%Y %m'"  #以某个用户的身份执行命令但不切换用户

3、使用su的一些注意事项:

1)使用root切换到其他普通的时候 是不需要密码的

2)通用户切换到root或者切换到其他用户的时候是需要密码登录的

3)su - root 用户名可以省略 但是仅限于root用户

4)如果想切换到root用户不用输密码,可以只用visudoer编辑

xian    ALL=(ALL)       NOPASSWD: ALL1

4、应用

    1)用户身份的切换

[root@localhostdata]# su - dayi123

Lastlogin: Fri Mar 31 10:49:16 EDT 2017 on pts/0

[dayi123@localhost~]$ su -

Password:

Lastlogin: Fri Mar 31 10:51:18 EDT 2017 on pts/0

[root@localhost~]# su -

Lastlogin: Fri Mar 31 12:45:12 EDT 2017 on pts/0

[root@localhost~]# su  dayi123

2)不切换身份,以其他用户执行命令

[dayi123@localhost~]$ su - root -c "ls /root"

Password:

anaconda-ks.cfg  baoding.log dayi123.txt  EOF  instll.log sn.txt  test  tr

[dayi123@localhost~]$ exit

exit

[root@localhost~]# su - dayi123 -c "mkdir /root/dayi123"

mkdir:cannot create directory ‘/root/dayi123’: Permission denied

[root@localhost~]# su - dayi123 -c "mkdir /tmp/dayi123"

 [root@localhost ~]# su - dayi123 -c "ls/tmp/dayi123 -d"

/tmp/dayi123