Linux学习笔记-5. 用户和用户组管理

5.用户和用户组管理

5.1.用户配置文件

越是对服务器安全性要求高的服务器,越是需要建立合理的用户权限等级制度和服务器操作规范。

在Linux中主要是通过用户配置文件 来查看和修改用户信息

5.1.1.用户信息文件/etc/passwd

每一行代表一个用户,通过冒号分隔出7个字段

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

 

1个字段:root 用户名称

2个字段:x 密码标识,相当于密码占位符,真正存储在/etc/shadow

3个字段:0 UID,用户UID

         0:超级用户,系统以ID来识别是否为超级用户,默认为root,如果一个用户变成超级用户,只需要将其UID改为0即可。

         1-499:系统用户,伪用户,这些用户不能删除,不能登录

         500-65535:普通用户,的centos7中添加了一个普通用户,默认ID1000

4个字段:0 GID 用户初始组ID

         初始组:就是指用户一登录就立刻拥有这个用户组相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。不建立修改初始组,不符合常用规范。初始组只能有一个。

         附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。

 

5个字段:root 用户说明

6个字段:/root 家目录

         普通用户:/home/用户名/

         超级用户:/root/

7个字段:/bin/bash 登录之后的Shell

         Shell就是Linux的命令解释器

         /etc/passwd当中,除了标准的Shell/bin/bash之外,还可以是/sbin/nologin,表示禁止登录。

         这个Shell如果改错了,就麻烦了,命令就解释不了,就无法登录了。

 

 

5.1.2.影子文件/etc/shadow

shadow只有root用户才能改

[root@localhost etc]# ll shadow

----------. 1 root root 686 Apr 26 23:22 shadow

 

可以理解为passwd的影子,保存的是用户的经过加密的密码

每一行代表一个用户的密码信息,通过冒号分隔出9个字段

 

test:$6$10O6OnRx$zWQIJ3sdfassdN6pE/Bc0Lwiw.3xmFkbXt2SF8gwNLB7IEu2.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVasdh1:17647:0:99999:7:::

 

1个字段:test 用户名

2个字段:表示的是加密密码

$6$10O6OnRx$zWQIJ3sdfassdN6pE/Bc0Lwiw.3xmFkbXt2SF8gwNLB7IEu2.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVasdh1

         加密算法升级为SHA512散列加密算法

         如果密码位是!!* 代表没有密码,不能远程登录。ssh协议禁止空密码远程登录

         可以加密密码前加上!号,把密码换算失败,相当于临时禁用用户登录。

3个字段:17647 密码最后一次修改日期

         使用1970-01-01作为标准时间,每过1 时间戳加117647表示从1970-01-01年到修改密码的那1天总共过的天数。

4个字段:0 两次密码修改间隔时间的天数,和第3个字段相比

5个字段:99999 密码有效期的天数,和第3个字段相比

6个字段:7 密码修改到期前后警告天数,和第5个字段相比

7个字段:密码过期之后宽限的天数,如果没有用户过期则直接禁止

         0:代表密码过期后立即失效,和不写是一样的

         -1:则代表密码永远不会失效

8个字段:帐号失效时间

         要用时间戳表示。

        

把时间戳换算为日期:

                  date -d "1970-01-01 17647 days"

                 

[root@localhost ~]# date -d "1970-01-01 17647 days"

Thu Apr 26 00:00:00 CST 2018

[root@localhost ~]#

 

         把日期换算为时间戳:

                   echo $(($(date --date="2018/04/30" +%s)/86400+1))

                  

                   [root@localhost ~]# echo $(($(date --date="2018/04/30" +%s)/86400+1))

17651

[root@localhost ~]# echo $(($(date --date="2018/04/26" +%s)/86400+1))

17647

[root@localhost ~]#

 

9个字段:保留

 

 

 5.1.3.组信息文件/etc/group和组密码文件/etc/gshadow

组信息文件/etc/group

 

root:x:0:

 

1个字段:root 组名,默认和用户名是一样的

2个字段:x 组的密码标志位,密码是在gshadow文件中存放

3个字段:GID,组ID

4个字段:组中附加用户

 

 

 

密码文件/etc/gshadow

 

root:::

 

1个字段:组名

2个字段:组密码

3个字段:组管理员用户名

4个字段:组中附加用户

 

 

组管理员一般不使用

 

 

 5.2.用户管理相关文件

 

用户的家目录:

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

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

 

 

test用户变成超级用户

passwd中,将其UID修改为0即可

 

 

超级用户的提示符是:#

普通用户的提示符是:$

 

[root@localhost ~]#

 

 

用户的邮箱

/var/spool/mail/用户名/

添加用户时,邮件默认自动创建

 

[root@localhost ~]# cd /var/spool/mail

[root@localhost mail]# ls

root  test

 

 

用户模板目录

当创建一个用户,用户自动创建许多目录和文件,都是从这个模板里面生成的。

用户的home目录都是从这里复制过来的,所以放在这里面的文件会复制到新创建用户的家目录中

 

 

/etc/skel

 

 

5.3.用户管理命令

 

 

 

5.3.1.用户添加命令useradd

useradd [选项] 用户名

 

-u UID 手工指定用户的UID

-d 家目录 手工指定用户的家目录,不建议手动指定。

-c 用户说明,手工指定用户的说明

-g 组名,手工指定用户的初始组

-G 组名,指定用户的附加组

-s sheel,指工指定用户的登录shell,默认是/bin/bash

 

 

添加用户test

user test

 

添加用户时,系统都执行什么操作?

1passwd文件

[root@localhost skel]# grep test /etc/passwd

test:x:1000:1000::/home/test:/bin/bash

2shadow文件

[root@localhost skel]# grep test /etc/shadow

test:$6$10O6OnRx$zWQIJ3WtmLRN6pE/asdfsadfs.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVph1:17647:0:99999:7:::

3、组文件

[root@localhost skel]# grep test /etc/group

test:x:1000:

4gshadow文件

[root@localhost skel]# grep test /etc/gshadow

test:!::

5、家目录

[root@localhost skel]# ll -d /home/test/

drwx------. 2 test test 83 Apr 26 23:04 /home/test/

6、邮件

[root@localhost skel]# ls /var/spool/mail

root  test

 

 

用户默认值文件

/etc/default/useradd

 

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

# useradd defaults file

GROUP=100                                          #用户默认组

HOME=/home                                      #用户家目录

INACTIVE=-1                                         #密码过期宽限天数,shadow文件的7字段

EXPIRE=                                                  #密码失效时间,shadow文件的字段8

SHELL=/bin/bash                                  #默认shell

SKEL=/etc/skel                                               #模板目录

CREATE_MAIL_SPOOL=yes               #是否建立邮箱

 

 

用户默认值文件

/etc/login.defs

 

 

[root@localhost ~]# cat /etc/login.defs

#

# Please note that the parameters in this configuration file control the

# behavior of the tools from the shadow-utils component. None of these

# tools uses the PAM mechanism, and the utilities that use PAM (such as the

# passwd command) should therefore be configured elsewhere. Refer to

# /etc/pam.d/system-auth for more information.

#

 

# *REQUIRED*

#   Directory where mailboxes reside, _or_ name of file, relative to the

#   home directory.  If you _do_ define both, MAIL_DIR takes precedence.

#   QMAIL_DIR is for Qmail

#

#QMAIL_DIR      Maildir

MAIL_DIR        /var/spool/mail

#MAIL_FILE      .mail

 

# Password aging controls:

#

#       PASS_MAX_DAYS   Maximum number of days a password may be used.

#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.

#       PASS_MIN_LEN    Minimum acceptable password length.

#       PASS_WARN_AGE   Number of days warning given before a password expires.

#

PASS_MAX_DAYS   99999               #密码有效期,shadow文件字段5

PASS_MIN_DAYS   0                         #密码修改间隔,shadow文件字段4

PASS_MIN_LEN    5                         #密码最小5位,PAM

PASS_WARN_AGE   7                       #密码到期警告,shadow文件字段6

 

#

# Min/max values for automatic uid selection in useradd

#

UID_MIN                  1000               #UID最小值

UID_MAX                 60000              #UID最大值

# System accounts

SYS_UID_MIN               201

SYS_UID_MAX               999

 

#

# Min/max values for automatic gid selection in groupadd

#

GID_MIN                  1000

GID_MAX                 60000

# System accounts

SYS_GID_MIN               201

SYS_GID_MAX               999

 

#

# If defined, this command is run when removing a user.

# It should remove any at/cron/print jobs etc. owned by

# the user to be removed (passed as the first argument).

#

#USERDEL_CMD    /usr/sbin/userdel_local

 

#

# If useradd should create home directories for users by default

# On RH systems, we do. This option is overridden with the -m flag on

# useradd command line.

#

CREATE_HOME     yes

 

# The permission mask is initialized to this value. If not specified,

# the permission mask will be initialized to 022.

UMASK           077

 

# This enables userdel to remove user groups if no members exist.

#

USERGROUPS_ENAB yes

 

# Use SHA512 to encrypt password.

ENCRYPT_METHOD SHA512            #密码加密模式

 

[root@localhost ~]#

 

 

 5.3.2.修改用户密码passwd

 

语法:

passwd [选项] 用户名

 

-S 查询用户密码的密码状态,仅root用户可以用。

-l 暂时锁定用户。仅root可用。

-u 解锁用户。仅root可用。

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

 

 

查询test用户密码的密码状态

[root@localhost ~]# passwd -S test

test PS 2018-04-26 0 99999 7 -1 (Password set, SHA512 crypt.)

 

test 用户名

PS

2018-04-26 密码最后修改时间

0密码修改间隔时间

99999 密码有效期

7 密码过期前几天提示警告

-1 密码失效时间,-1表示不失效

 

 

锁定用户时,是在密码前增加了两个感叹号:!!,相当于暂时锁定用户

[root@localhost ~]# passwd -l test

Locking password for user test.

passwd: Success

[root@localhost ~]# grep test /etc/shadow

test:!!$6$10O6OnRx$sSDFSDAF/Bc0Lwiw.3xmFkbXt2SF8gwNLB7IEu2.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVph1:17647:0:99999:7:::

 

解锁用户时,是把!!去掉就行了,可以用命令,也可以直接修改shadow文件

 

管道设置密码

echo "123" | passwd --stdin test

这种方式一般在脚本文件中使用,这种密码是明文,需要登录后修改,确保安全。

 

 

普通用户只能改自己的密码,超级用户可以自己和别人的密码。

 

给当前用户设置密码时,用户名就不需要输入了

 

 

 5.3.3.修改用户信息usermod

 

 

英文原意:user modify

 

语法:

usermod [选项] 用户名

 

-u UID 手工指定用户的UID

-c 用户说明,手工指定用户的说明

-G 组名,指定用户的附加组

-L 临时锁定用户Lock

-U 解锁用户Unlock

 

useradd中的选项在usermod中基本都可以使用

 

 

用户test的用户说明修改:

[root@localhost ~]# usermod -c "This is a test user" test

[root@localhost ~]# grep test /etc/passwd

test:x:1000:1000:This is a test user:/home/test:/bin/bash

 

 

 5.3.4.修改用户密码状态chage

 

 

  

语法:

chage  [选项] 用户名

 

-l 列表用户的详细密码状态

-d 日期:修改密码最后一次更改日期,shadow文件字段3

-m 天数:两次密码修改间隔,shadow文件字段4

-M 天数:密码有效期,shadow文件字段5

-W 天数:密码过期前警告天数,shadow文件字段6

-I 天数:密码过期后宽限天数,shadow文件字段7

-E 日期:帐号失效时间,shadow文件字段8

 

 

[root@localhost ~]# chage -l test

Last password change                                    : Apr 26, 2018

Password expires                                        : never

Password inactive                                       : never

Account expires                                         : never

Minimum number of days between password change          : 0

Maximum number of days between password change          : 99999

Number of days of warning before password expires       : 7

[root@localhost ~]#

 

 

把密码最后修改日期设置为0shadow文件字段3,这样用户一登录就要修改密码。

chage –d 0 test

 

 5.3.5.删除用户userdel

 

英文愿意:user delete

语法:

userdel  [选项] 用户名

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

 

 

手工删除用户,这样删除并不方便,这里只是说明一下删除时都删除什么内容

vim /etc/passwd

vim /etc/shadow

vim /etc/group

vim /etc/gshadow

rm –rf /var/spool/mail/test

rm –rf /home/test

 

id命令

查看用户ID

id 用户名

[root@localhost ~]# id test

uid=1000(test) gid=1000(test) groups=1000(test)

 

 

 

 5.3.6.用户切换命令su

 

 

英文愿意:switch user?

语法:

su  [选项] 用户名

 

<!--[if !supportLists]-->-          <!--[endif]-->表示将用户的环境变量一起切换。如果不加个选项,会导致只切换了一部分过去,例如家目录,邮件等信息还是切换之前用户的。

-c  仅执行一次命令,而不切换用户身份

 

 

不切换root用户的身份,只是执行root用户的命令,添加一个用户test2

su - root -c "useradd test2"

 

 

 5.4.用户组管理命令

 

 

 

添加用户组

groupadd [选项] 组名

-g GID 指定组ID

 

groupadd group1

 

修改用户组

groupmod [选项] 组名

-g GID 修改组ID

-n 新组名:修改组名

 

groupmod –n newgroup group1

 

 

删除用户组

groupdel 组名

 

如果组中有初始用户存在,则组是删除不掉的。

 

 

把用户添加入组或从组中删除

gpasswd  选项 组名

-a 用户名:把用户加入组

-d 用户名:把用户从组中删除

 

 

 

 

猜你喜欢

转载自wlcacc.iteye.com/blog/2422646