用户和用户组

今天搭建在自己的阿里云服务器上搭建git服务器,参考的博客上说最好有一个专门用户管理的git的用户,所以写一篇关于linux用户组的博客加深下印象。

用户相关操作

添加用户
adduser 选项 用户名
  -c comment 指定一段注释性描述。
  -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。默认会自动在  /home目录下建立和用户名一样的专属目录
  -g 用户组 指定用户所属的用户组(初始组)。 默认会自动创建与用户名同名的用户组,初始组一个用户只能有一个
  -G 用户组,用户组 指定用户所属的附加组(可以多个)。
  -s Shell文件 指定用户的登录Shell。/bin/bash 是基本shell
  -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

id 用户名  -- 查看用户信息
[root@root ~]# id git
uid=1002(git) gid=1002(git) groups=1002(git)
uid 用户id, gid 初始组id, groups=附加组id

添加一个用户实质上就是在/etc/passwd 新增加一条记录,同时也会在/etc/shadow, /etc/group等文件中增加记录

添加用户如果不写选项,那么他会自动去使用默认配置,默认配置一般在两个文件中

1. /etc/default/useradd
[root@root ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

[root@root ~]#

GROUP  (已废弃) 以前默认加入100的组,现在会创建和用户名相同的初始组
HOME  用户默认家目录
INACTIVE  用户密码过期后的宽限时间,-1代表永不过期,0代表时效结束即刻过期
EXPIRE   帐号终止日期,不设置表示不启用  日期的指定格式为MM/DD/YY
SHELL 默认执行的shell脚本
SKEL  模板目录,添加新用户时创建家目录都是从这里配置的路径复制过去
CREATE_MAIL_SPOOL  是否给每个用户都创建邮箱,具体配置用下面的文件决定
2. /etc/login.defs
中文为个人注释
[root@root ~]# cat /etc/login.defs
# 创建邮箱路径
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    #密码有效期,单位为天
PASS_MIN_DAYS   0        #是否可修改密码,0-可修改,非0表示多少天后才可修改,修改密码后必须等待当前配置天数才可修改
PASS_MIN_LEN    5        # (已废弃)密码长度
PASS_WARN_AGE   7        # 密码失效前通知用户密码快要失效去修改密码的天数

#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                  1000    # 添加用户初始uid
UID_MAX                 60000    # 添加用户最大uid
# System accounts
# 伪用户,lnuix内部系统创建的用于启动各项服务,为这些预留的范围
SYS_UID_MIN               201 
SYS_UID_MAX               999

#
# Min/max values for automatic gid selection in groupadd
# 添加用户组是自动gid选择的值
GID_MIN                  1000
GID_MAX                 60000
# System accounts
# lnuix内部系统添加用户组时自动gid选择的值
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  # 权限掩码077   所以用户主目录默认权限为 700

# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes # 在不存在成员的情况下删除用户组

# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512  # 指定用户密码使用的加密算法

参考: 权限掩码

删除用户
userdel -r 用户名
  -r 删除用户关联文件
修改用户
usermod 选项 用户名
 选项值与useradd一样
用户密码管理

添加了用户以后,如果没有设置密码,那么这个用户是处于锁定状态无法正常使用。
如果是ROOT用户可以修改当前系统所有人的密码,所以可以选择用户名

对账户密码的操作:
passwd 选项 用户名
 -l 禁用账号
 -u 解锁账号
 -d 账号无口令
 --stdin 批量修改密码,可以使用管道符去设置密码

设置密码:
passwd 用户名

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

如果只是普通用户则只能设置自己的密码

普通用户需要设置比较复杂的密码,一般长度需要超过8位
passwd 

要求用户第一次登陆的时候必须要修改密码

change -d 0 用户名
切换用户
 - 的作用切换用户时,彻底改变用户的环境变量配置,不加 - 切换用户环境变量中还会有一些切换之前的用户配置
su - 用户名

用户组相关操作

每一个用户都会有一个初始组,也可以没有附加组或者多个附加组。用户组的管理操作有添加、删除,实际上就是对 /etc/group 文件进行修改

添加用户组
groupadd 组名
删除用户组
删除初始组的时候必须要把所有初始用户删除后才可以删除
groupdel 组名
用户组- 添加/删除用户
gpasswd 选项 用户名 组名
  -a 用户名   把用户加入用户组
  -d 用户名   把用户从用户组删除

gpasswd -a user1 group1
gpasswd -d user1 group1
切换用户组
newgrp 组名    -- 所切换组名必须是当前用户的初始组或附加组

相关系统文件

1. /etc/passwd

该文件中的单个用户的示例 如:root:x:0:0:root:/root:/bin/bash,根据:隔开有七个字段,分别代表

用户名:口令:用户标识号:组标识号:注释性描述:用户主目录:命令解释程序(shell)

(1)用户名:用于区分不同的用户。在同一系统中注册名是惟一的。在很多系统上,该字段被限制在8个字符(字母或数字)的长度之内;并且要注意,通常在Linux系统中对字母大小写是敏感的。这与MSDOS/Windows是不一样的。

(2)口令(passwd):系统用口令来验证用户的合法性。超级用户root或某些高级用户可以使用系统命令passwd来更改系统中所有用户的口令,普通用户也可以在登录系统后使用passwd命令来更改自己的口令。

    现在的Unix/Linux系统中,口令不再直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个“x”来代替,将/etc /shadow作为真正的口令文件,用于保存包括个人口令在内的数据。当然shadow文件是不能被普通用户读取的,只有超级用户才有权读取。

    此外,需要注意的是,如果passwd字段中的第一个字符是“*”的话,那么,就表示该账号被查封了,系统不允许持有该账号的用户登录。

(3)用户标识号(UID):UID是一个数值,是Linux系统中惟一的用户标识,用于区别不同的用户。在系统内部管理进程和文件保护时使用 UID字段。在Linux系统中,注册名和UID都可以用于标识用户,只不过对于系统来说UID更为重要;而对于用户来说注册名使用起来更方便。在某些特 定目的下,系统中可以存在多个拥有不同注册名、但UID相同的用户,事实上,这些使用不同注册名的用户实际上是同一个用户。

(4)组标识号(GID):这是当前用户的缺省工作组标识。具有相似属性的多个用户可以被分配到同一个组内,每个组都有自己的组名,且以自己的组标 识号相区分。像UID一样,用户的组标识号也存放在passwd文件中。在现代的Unix/Linux中,每个用户可以同时属于多个组。除了在 passwd文件中指定其归属的基本组之外,还在/etc/group文件中指明一个组所包含用户。

(5)注释性描述:包含有关用户的一些信息,如用户的真实姓名、办公室地址、联系电话等。在Linux系统中,mail和finger等程序利用这些信息来标识系统的用户。

(6)用户主目录(home_directory):该字段定义了个人用户的主目录,当用户登录后,他的Shell将把该目录作为用户的工作目录。 在Unix/Linux系统中,超级用户root的工作目录为/root;而其它个人用户在/home目录下均有自己独立的工作环境,系统在该目录下为每 个用户配置了自己的主目录。个人用户的文件都放置在各自的主目录下。

(7)命令解释程序(Shell):Shell是当用户登录系统时运行的程序名称,通常是一个Shell程序的全路径名

2. /etc/shadow
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

(1)用户名:同 /etc/passwd 文件的用户名有相同的含义。

(2)加密密码:这里保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是 MD5 或 DES 加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。
注意,这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。很多软件透过这个功能,在密码串前加上 "!"、"*" 或 "x" 使密码暂时失效。
    所有伪用户的密码都是 "!!" 或 "*",代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 "!!",代表这个用户没有密码,不能登录。

(3)最后一次修改时间:此字段表示最后一次修改密码的时间,可是,为什么 root 用户显示的是 18450呢?
    这是因为,Linux 计算日期的时间是以 1970 年 1 月 1 日作为 1 不断累加得到的时间,到 1971 年 1 月 1 日,则为 366 天。这里显示 15775 天,也就是说,此 root 账号在 1970 年 1 月 1 日之后的第 18450天修改的 root 用户密码。

那么,到底 18450代表的是哪一天呢?可以使用如下命令进行换算:
[root@localhost ~]# date -d "1970-01-01 18450 days"
Tue Jul 7 00:00:00 CST 2020
可以看到,通过以上命令,即可将其换算为我们习惯的系统日期。

(4)最小修改时间间隔:最小修改间隔时间,也就是说,该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。
此字段是为了针对某些人频繁更改账户密码而设计的。

(5)密码有效期:经常变更密码是个好习惯,为了强制要求用户变更密码,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。
该字段的默认值为 99999,也就是 273 年,可认为是永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。

(6)密码需要变更前的警告天数:与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 "再过 n 天你的密码就要过期了,请尽快重新设置你的密码!"。

(7)密码过期后的宽限天数:也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。

比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。

(8)账号失效时间:同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!
该字段通常被使用在具有收费服务的系统中。

(9)保留:这个字段目前没有使用,等待新功能的加入。

3. /etc/group
组名:口令:组标识号:组内用户列表

(1)组名:组名是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。

(2)口令:口令字段存放的是用户组加密后的口令字。一般Linux系统的用户组都没有口令,即这个字段一般为空,或者是*。

(3)组标识号: 组标识号与用户标识号类似,也是一个整数,被系统内部用来标识组。别称GID.

(4)组内用户列表:是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。

你可能感兴趣的:(用户和用户组)