Linux用户管理

2019-06-23 0 条评论 612 次阅读 1 人点赞

Linux用户管理及一些操作,包括个人的理解

Linux创建用户的过程

以下内容为仅使用useradd user_name创建用户时的大概过程,这里写的先后顺序不代表系统在执行时的先后顺序,当然以下的这段内容其实也是是本人根据实际操作通过系统返回的效果得出的,也并不代表系统就是这样执行的:

  1. 读取/etc/default/useradd文件,获取用户的家目录位置,使用的shell,以及是否进行用户邮箱的创建等信息,读取/etc/login.defs文件,获取用户的uid范围gid范围,以及用户的密码有效期,用户有效期的值等

  2. 根据以上两个文件创建在/etc/group文件创建一条记录,该记录是组信息记录,(组名:组密码:组id:组成员)大致内容为组名,组密码,组id,组成员(不包括将此组作为主组的用户),组名和用户名相同,如果该组已经存在则创建失败,密码为x表示密码没有存在这个文件中,而是被存在了/etc/gshadow文件中,即其他用户无法将此组切换为临时主组,组id,正常情况下会取上一个最大的id然后加1作为该组的id,组成员默认为空

  3. 在/etc/gshadow中创建一条记录,(组名:组密码:组管理员:组成员)大概内容为组名,组密码,组管理员,组成员,组密码格式为使用三个\$符号分割三组内容,第一个\$后表示的是加密的类型用一个数字表示,第二个\$后面是密码加密时用的盐即随机数,加了这个盐之后即使两个用户的密码相同那么最后得到的加密字符串也是不同的,然后\$后面是密码加密后的字符串!即用户无法通过newgrp命令临时切换该组为主组,组管理员默认为空可以使用gpasswd的-A选项指定管理员员,组成默认也为空,组成员和/etc/group中的组成员内容相同,添加组成员可以使用gpasswd命令的-a选项添加,-d选项删除,当然必须有操作权限,即组管理员和root

  4. 在/etc/passwd中创建一条记录,(用户:用户密码:uid:gid:描述信息:家目录:默认shell)该记录是用户信息记录,大致内容为,用户名,密码,uid,gid,描述信息,家目录,默认shell,用户名即创建用户时指定的用户名,passwd为x表示密码存放在了/etc/shadow/这个文件中,由于/etc/passwd文件普通用户也可以读取到,所以特将密码存到另外的文件中当然是可以用pwconv和pwuncounv命令改变密码存位置的 uid为系统根据当前用户id分配情况分配一个id,gid为步骤3中创建组信息时的gid,描述信息默认为空,可以使用chfn命令写入描述信息,家目录为从/etc/default/useradd中读取的家目录的路径然后在其下创建一个和user_name同名的目录,默认shell也是从/etc/default/useradd中读取的,默认为/bin/bash

  5. 在/etc/shadow中创建一条记录,(用户名:密码:上一次修改密码的时间:修改密码后几天内不允许再次修改:密码有效期:密码过期前提下的天数:宽限期:用户有效期:保留字段)该记录主要存放了,用户名,密码,上一次修改密码的时间,该时间的格式为从1970年1月1日到修改日期所经过的天数,修改密码后几天内不可以修改密码,密码的有效期,密码过期前的提醒的天数,宽限的期限即密码过期后还可以登录的天数,用户的有效期即过了这个时间后用户就会被锁定,以上几个有效期相关的时间可以使用chage修改保留字段可能以后的系统会添加其他功能就可以使用这个字段了

  6. 创建家目录,并且将/etc/skel/中的文件拷贝到用户的家目录下,这些文件主要的作用是初始化登录环境,设置某些系统变量的

  7. 在邮箱目录中创建邮箱文件文件名和用户名同名

以上四个文件(passwd,group,shadow,gshadow)的格式为:分割的字符串

如果家目录不存在,则登录系统后的当前目录是/

系统必须有0id的用户

用户,组介绍

用户(user)

管理员: root,0

通用户: 1-65535
系统用户:1-499,1-999(CentOS7.x),主要是对一些服务,应用等使用的

组(group)

管理员组 root,0
普通组:
系统组:1-499,1-999(CentOS7.x)
普通组:500+,1000+(CentOS7.x)
Linux默认创建一个用户就会创建一个相同名称的组,且这个用户默认属于这个组
进程所能够访问的文件由创建进程的用户权限决定
用户和组可以是多对多的关系

Linux组的类别

主要组(primary group)
用户至少属于一个组,必须有一个主组
附加组(supplementary group)
一个用户可以属于0个或多个附加组

用户和组的主要配置文件

  • /etc/passwd:(用户信息)

​ name:password:UID:GID:GECOS:directory:shell
​ GECOS:描述字段

  • /etc/group:(组信息)

    ​ group_name
    ​ password: 普通用户也可以自己把自己加到某个组中,需要使用这个密码
    ​ GID
    ​ user_list: 附加组是该组的user_name

  • /etc/shadow:(用户口令)

    ​ login name: 用户名
    ​ encrypted password: !!表示账户锁定,新建的账号不能登录是锁定状态
    ​ 密码的格式:$加密算法$盐$加密后的字符串
    ​ 加密算法:1:md5,6:sha512
    ​ 修改加密算法

    ​ # authconfig --passalgo={sha512|...} --update

    ​ date of last password change:
    ​ 上一次修改密码的时间,格式为距离1970年到现在的天数,如果值为0系统在下次登录时提醒你改密码
    ​ minimum password age: 最短的密码生命期,最短口令有效期,单位为天,0为随时可以改
    ​ maximum password age: 口令有效期
    ​ password warning period: 口令过期前提示时间
    ​ password inactivity period: 宽限期,过期后的时限,过期之后再过了这几天就被系统锁定了
    ​ account expiration date: 账号的有效期
    ​ reserved field: 保留字段

  • /etc/gshadow:(组口令)

    group name 组名
    encrypted password 加密后的密码
    administrators: 组管理员
    members: 组成员

用户和组的管理命令

  • 用户管理

    # useradd:(添加用户)

    选项 作用
    -o 强制创建已存在的id的用户,使用这种用户登录系统时虽然两个账号都能登录但是系统在登录后会以在passwd文件中靠前的用户信息作为用户等信息
    -u 指定uid
    -g 指定gid或者组名
    -G 指定附加组id
    -d 指定家目录
    -s 指定shell,一般服务所用的账号都应该将shell设置为/sbin/nologin即不允许该用户登录系统
    -r 创建系统用户
    -m 创建系统用户的时候创建家目录
    -M 不创建家目录
    -D 此选项不是在创建用户的时候使用的,主要的作用是使用该命令去查看,修改配置文件/etc/default/useradd
    -N 不创建该用户名相同的组为主组而将其加入到配置文件指定的组中默认是user组

# usermod:修改用户

选项 作用
-u 更改uid
-g 指定新的主组
-G 指定附加组,默认是覆盖行为,如果要追加要使用-a选项""为将附加组设为空,或者将该用户设为附加组,这样覆盖了其他所有的附加组
-l 修改组名,new_name old_name
-d 更换家目录,需要创建新的家目录并且移动文件时需要-m选项
-L 锁定用户
-U 解锁用户
-e 指定过期日期
-f 设置宽限期

# userdel:(删除用户的同同时也会尝试去删除他的主组)

选项 作用
-r 删除家目录以及邮箱文件

# passwd:修改用户密码

选项 作用
-e 立即过期用户口令,且用户再次登录时必须设置一个比较复杂的密码
  • 组管理:

    \# groupadd (添加组)
    -g:指定gid
    -r:创建系统组

    # groupmod:
    -n new_name old_name:改名
    -g:指定新的id
    # groupdel:如果某个组是某个账号的主组,那这个组在账号存在的情况下不能删除
    # gpasswd:
    -a user 将某个账号加入某个组
    -d 从该组删除某个账号
    -A 设置组管理员

其他和用户,组相关的命令

​ # groupmems:允许组管理员管理其组成员,查看将该组设置为附加组的组成员
​ -g:指定组名
​ -l:列出组员列表
​ -d:将指定用户踢出该组
​ -a:为该组添加用户
​ -p:清除该组中所有成员
​ # groups:查看账号属于哪个组,主组和附加组
​ # chfn:为用户添加描述信息
​ # finger:查看用户信息
​ # chsh -s /bin/bash user_name:更用户的默认shell,不加用户为修改当前用户shell
​ # newusers /path/to/user_list 批量创建用户
​ # chpasswd < /path/to/usre:pass_list:批量修改用户密码pass_list格式为user_name:password
​ # chage 修改用户有效期相关信息,交互式修改各个参数
​ -d 0 user_name:立即过期用,且下次登录会强制用户改一个复杂度较高的密码

​ # newgrp 临时切换当前用户的主组,可以使用exit命令退出,仍然使用之前的主组
​ # authconfig --passalgo={sha512|...} --update 修改加密算法
​ # getent passwd [user_name]:只显示某个user的信息,
​ # su:切换用户
​ -c:以某个用户身份执行命令
完全切换
# su - user_name
# su - 直接切换到root用户,当然非root用户需要密码才可以切换
不完全切换:
# su user_name
完全切换就和新用户登录一样,而不完全切换则不同,shell的某些变量还保存的是之前用户的信息
​ 而且目录也不会切换到当前用户的家目录
​ # id:显示用户的id信息以及判断该用户是否存在
​ -u:显示uid
​ -g:显示gid
​ -G:显示附加组的id
​ -n:显示名称
​ # vipw == vi /etc/passwd
​ # vigr == vi /etc/group
​ 修改了文件后vipw,vigr可以使用相关选项同步其他文件
​ # pwck 检查/etc/passwd,/etc/shadow配置文件
​ # grpck 检查/etc/group,/etc/gshadow配置文件
​ # pwconv:将密码存入shadow文件
​ # pwunconv:将密码存入passwd文件
​ # grpconv:将组密码存入gshadow文件
​ # grpuncoun:将组密码存入group文件

相关的其他配置文件

​ /etc/skel:创建用户时会将这个目录里的文件复制到用户的家目录中,创建用户时的家目录模板文件夹
​ /etc/default/useradd:主要定义了用户家目录的位置,shell类型等
​ /etc/login.defs:主要定义了用户的uid起始,已经账号,密码有效期等信息

bighero

这个人太懒什么东西都没留下

文章评论(0)