美文网首页
用户和组

用户和组

作者: linceln | 来源:发表于2021-07-12 07:24 被阅读0次

UID 和 GID

虽然我们登陆 Linux 系统时,输入的是帐号,但是其实电脑并不会直接识别帐号名称,它仅认识 ID 而已。
每个登陆用户至少都会取得两个 ID,一个是用户ID(User ID ),一个是群组ID(Group ID)。文件是如何知道它是属于哪个用户和群组呢?其实就是通过 UIDGID

用户

/etc/passwd

这个文件的结构:每一行代表一个用户帐号,每一行的内容使用冒号 : 隔开,总共有 7 项内容:
1.用户名称
2.密码,由于历史原因,密码栏都是 x,真正的密码在 /etc/shadow 中;
3.UID,特别的,root 用户的 UID01-999 是系统帐号;
4.GID,对应 /etc/group 中的 GID
5.备注
6.家目录
7.Shell

/etc/shadow

这个文件主要与用户密码相关,结构和 /etc/passwd 类似,每一行代表一个用户密码和限制条件:
1.用户名称;
2.密码,注意是经过加密的密码;
3.最近更换密码的日期;
4.密码不可更换的天数;
5.密码需要更换的天数;
6.密码需要更换期限前的警告天数;
7.密码过期后的帐号宽限时间;
8.帐号失效日期;
9.保留;

群组

/etc/group

这个文件记录 GID 与群组名称的对应关系。

vi /etc/group

root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:

每一行代表一个群组,以冒号 : 作为分隔符,总共有 4 栏,每个栏位的意义是:

  1. 群组名称
  2. 群组密码
  3. GID
  4. 该群组所包含的用户名称,如果有多个用户,用逗号 , 隔开,不要有空格

有效群组和初始群组

初始群组(Initial group)

当用户一登陆系统,立刻就拥有这个群组的相关权限。
可以通过查看 /etc/passwd 文件里面用户的 GID 确定初始群组。使用者一登陆就会主动取得,不需要在 /etc/group 文件的第 4 个栏位中写入该群组。

CentOS 用 useradd <username> 命令创建用户时默认会创建一个和 username同名的用户组,所以一般用户的初始群组就是和用户名同名的群组。

有效群组(Effective group)

假如有一个用户 lc,由于是使用 useradd <username> 命令创建的,现在 lc 这个用户的初始群组是 lc。如果它要加入到 users 组中,那么必须要在 /etc/group 文件中找到 users 那一行,将 lc 这个用户加到第 4 栏当中,这样 lc 就加入了 users 群组中。如果一个用户不止加入一个群组,用逗号 , 隔开即可。

切换有效群组

groups

如何知道一个用户属于哪些群组呢?可以使用命令 groups ,结果如下:

[lc@localhost~]$ groups
lc users

上面输出的信息显示用户 lc 同时属于 lcusers 两个群组。同时,还有一个隐含的信息:第一个输出的群组为有效群组。也就是说, 目前用户 lc 的有效群组是 lc。此时,如果我以 touch <filename> 新建一个文件,这个文件的拥有者是 lc,群组也是 lc

[lc@localhost~]$ touch test
[lc@localhost~]$ ll test
-rw-rw-r-- lc lc test

通常有效群组的作用就是新建文件时。

newgrp

那么有效群组是否可以切换呢?
我想把有效群组切换到 users,此时可以使用 newgrp 命令,这个命令可以变更目前用户的有效群组。

[lc@localhost~]$ newgrp users
[lc@localhost~]$ groups
users lc
[lc@localhost~]$ touch test2
[lc@localhost~]$ ll
-rw-rw-r-- lc lc test
-rw-r--r-- lc users test2
[lc@localhost~]$ exit # !!!注意,要离开 newgrp 的环境!

上面输出的信息显示有效群组已经变更为 users

newgrp 命令也是有限制的,切换的群组必须是该用户所属的群组。如果想切换的 sshd 群组,但是因为 lc 并不属于 sshd 群组,此时是无法完成切换的。
另外,newgrp 命令是以另外一个 shell 来提供功能的,这个新的 shell 中用户 lc 的有效 GIDusers。所以想要回到原来的环境中,输入 exit 即可回到原来的 shell

/etc/gshadow

这个文件的作用是建立群组管理员,和 /etc/group 一样也是使用冒号 : 作为分隔符,每一栏的含义如下:
1.群组名称
2.密码栏。密码栏为叹号 ! 或者为表示该群组没有群组管理员
3.群组管理员的帐号
4.该群组所属的用户

由于目前有类似 sudo 这样的工具,所以群组管理员的功能已经很少使用了。

帐号管理

新增和删除用户

新增用户

使用系统默认值新增用户,操作如下:

useradd <username>

默认值内容包括:

  • /etc/passwd 裡面建立一行與帳號相關的資料,包括建立 UID/GID/家目錄等;
  • /etc/shadow 裡面將此帳號的密碼相關參數填入,但是尚未有密碼;
  • /etc/group 裡面加入一個與帳號名稱一模一樣的群組名稱;
  • /home 底下建立一個與帳號同名的目錄作為使用者家目錄,且權限為 700

useradd -D 命令可以查看默认值

有特殊需求的新增用户操作如下:

useradd -u <uid> -g <groupname> <username>

这里我们指定了新增用户的 uid,指定了一个已经存在的群组作为使用者的初始群组。

密码设定

以上新增了用户之后,在默认情况下,该用户是锁定无法登陆的,需要使用 passwd 命令设定密码才可以使用

passwd <username>

特别的,如果 passwd 不加参数,意思是修改 root 用户的密码。

设置密码校验:PAM模块

Pluggable Authentication Modules
PAM 是独立的 API,任何程序有验证需求时,都可以向 PAM 发出验证请求,PAM 经过一系列的验证之后,将验证结果返回给程序。
passwd 使用的就是 pam_cracklib.so 模块,如果我们输入字典中可以找到的字符串, passwd 就会有报错提示。

passwd 验证执行流程:
1.执行 /usr/bin/passwd 命令;
2.passwd 调用 PAM 模块进行验证;
3.PAM 模块会到 /etc/pam.d/ 寻找与 passwd 同名的配置文件;
4.根据 /etc/pam.d/passwd 内的配置,引用相关的 PAM 模块逐步进行验证;
5.将验证结果会传给 passwd
6.passwd 程序会根据 PAM 会传的结果决定下一步动作(重新设置密码或者通过验证)。

pam.pwquality.so 已经取代 pam_cracklib.so,完全兼容,并且提供 /etc/security/pwquality.conf 配置文件额外提供默认值。

设置密码复杂度

pam_cracklib.so 支持的部分选项:
retry=N:定义登录/修改密码失败时,可以重试的次数
minlen=N:新密码的最小长度
dcredit=N:当 N>0 时表示新密码中数字出现的最多次数;当N<0时表示新密码中数字出现最少次数;
ucredit=N: 当 N>0 时表示新密码中大写字母出现的最多次数;当N<0时表示新密码中大写字母出现最少次数;
lcredit=N: 当N>0 时表示新密码中小写字母出现的最多次数;当N<0时表示新密码中小写字母出现最少次数;
ocredit=N:当N>0 时表示新密码中特殊字符出现的最多次数;当N<0时表示新密码中特殊字符出现最少次数;
maxrepeat=N:拒绝包含多于N个相同连续字符的密码。 默认值为0表示禁用此检查
maxsequence=N:拒绝包含长于N的单调字符序列的密码。默认值为0表示禁用此检查。实例是 '12345''fedcb'。除非序列只是密码的一小部分,否则大多数此类密码都不会通过简单检查。
enforce_for_root: 如果用户更改密码是root,则模块将在失败检查时返回错误。默认情况下,此选项处于关闭状态,只打印有关失败检查的消息,但 root 仍可以更改密码。不要求root用户输入旧密码,因此不会执行比较旧密码和新密码的检查

修改 /etc/pam.d/system-auth 文件:

[root@localhost~]$ vi /etc/pam.d/system-auth

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 ucredit=-1 lcredit=-1 ocredit=-1 dcredit=-1 enforce_for_root
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

找到 pam_pwquality.so 后面加上需要验证的参数:
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 ucredit=-1 lcredit=-1 ocredit=-1 dcredit=-1 enforce_for_root

设置密码到期时间

修改 /etc/login.defs 文件:

PASS_MAX_DAYS   180  #密码最长过期天数
PASS_MIN_DAYS   0  #密码最小过期天数
PASS_MIN_LEN    8  #密码最小长度
PASS_WARN_AGE   7   #密码过期警告天数

以上是针对新增用户的设置,如果是已有用户不受影响,需要使用以下命令修改已有用户的密码到期时间:

# 先查看密码过期和失效策略
passwd -S lc
# 也可以使用 chage 命令查看
chage -l lc
# 修改密码过期时间,设置180天过期
passwd -x 180 lc
设置多次输入密码错误锁定用户

编辑 /etc/pam.d/sshd 文件:

[root@localhost~]$ vi /etc/pam.d/sshd

#%PAM-1.0  
auth required pam_tally2.so deny=5 unlock_time=1200 even_deny_root root_unlock_time=1200
...

参数说明:

even_deny_root:也限制 root 用户;

deny:设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户

unlock_time:设定普通用户锁定后,多少时间后解锁,单位是秒;

root_unlock_time:设定root用户锁定后,多少时间后解锁,单位是秒;

注意,配置需要写在第一行

$ ssh root@120.25.226.1
# 错误密码
root@120.25.226.1's password:
Permission denied, please try again.
root@120.25.226.1's password:
Permission denied, please try again.
root@120.25.226.1's password:
Permission denied, please try again.
root@120.25.226.1's password:
Permission denied, please try again.
root@120.25.226.1's password:
Permission denied, please try again.
# 正确密码
root@120.25.226.1's password:
Permission denied, please try again.

从上面的输出信息可以看到 ,在尝试 5 次错误密码登录之后,几十使用正确密码也无法登录了,需要的等待 20 分钟解锁。

设置终端连接超时时间

设置 TMOUT 环境变量,30 分钟超时:

[root@localhost~]$ echo $TMOUT # 先确定是否有该环境变量
[root@localhost~]$ vi /etc/profile
export TMOUT=1800 # 30分钟超时
[root@localhost~]$ source /etc/profile
锁定和解锁用户
# 使某个用户失效,无法登陆
passwd -l lc
# 恢复
passwd -u lc

修改用户资料

usermod [-cdegGlsuLU] <username>
参数:
-c  :後面接帳號的說明,即 /etc/passwd 第五欄的說明欄,可以加入一些帳號的說明。
-d  :後面接帳號的家目錄,即修改 /etc/passwd 的第六欄;
-e  :後面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 內的第八個欄位資料啦!
-f  :後面接天數,為 shadow 的第七欄位。
-g  :後面接初始群組,修改 /etc/passwd 的第四個欄位,亦即是 GID 的欄位!
-G  :後面接次要群組,修改這個使用者能夠支援的群組,修改的是 /etc/group 囉~
-a  :與 -G 合用,可『增加次要群組的支援』而非『設定』喔!
-l  :後面接帳號名稱。亦即是修改帳號名稱, /etc/passwd 的第一欄!
-s  :後面接 Shell 的實際檔案,例如 /bin/bash 或 /bin/csh 等等。
-u  :後面接 UID 數字啦!即 /etc/passwd 第三欄的資料;
-L  :暫時將使用者的密碼凍結,讓他無法登入。其實僅改 /etc/shadow 的密碼欄。
-U  :將 /etc/shadow 密碼欄的 ! 拿掉,解凍啦!

删除用户

userdel [-r] <username>
参数:
-r :同时删除用户的家目录

# 删除用户 `lc`,同时删除家目录
[root@localhost~]$ userdel -r lc

想要彻底清除某个用户留下的痕迹,可以在删除之前通过 find / -user <username> 命令查找整个系统中数据该用户的文件,然后再删除,这样可以比较彻底地删除用户文件。

新增和删除群组

新增群组

groupadd [-g] [-r] <groupname>
参数:
-g : 指定特定的 GID
-r : 新增系统群组

groupadd lcgroup

删除群组

groupdel <groupname>

相关文章

  • Linux操作系统--用户和用户组(八)

    一、用户和用户组 用户和用户组管理,顾名思义就是添加用户和用户组、更改密码和设定权限等操作。 Linux用户和组的...

  • Linux用户及用户组

    用户、组和权限管理 组 Linux用户和组管理

  • Linux学习第五天

    用户账户的管理 一、用户账户和组账户概述 用户和用户组管理,顾名思义就是添加用户和用户组、更改密码和设定权限等操作...

  • 第3章 用户和用户组管理

    1.Linux用户和用户组管理 用户和用户组 Linux用户归属于用户组,归属于同一用户组的Linux用户对一些公...

  • 用户和组

    3A认证 Authentication:认证,传统的认证方式比如密码,其他的比如使用公钥和私钥来认证Authori...

  • 用户和组

    1、配置文件/etc/passwd中存放着用户名和用户ID对应关系的数据库 2、用户的加密密码通常被存放在/etc...

  • 用户和组

    用户和组 一:安全3A 二:用户user Linux用户:Username/UID 管理员:root,UID=0 ...

  • 用户和组

    每个用户都有一个唯一的用户ID,且每个用户可以属于多个组;每个组都有唯一一个名称和一个组ID 用户和组ID是为了确...

  • 用户和组

    工作组管理 创建工作组 语法 groupadd [options] GROUP 代码示例 删除工作组 语法 gro...

  • 用户和组

    Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,...

网友评论

      本文标题:用户和组

      本文链接:https://www.haomeiwen.com/subject/ndqkpltx.html