/etc
1、linux 用户和用户组管理
http://c.biancheng.net/view/840.html
1.1 linux /etc/passwd
存储了系统中所有用户的基本信息,并且所有用户有读权限。
每行记录对应一个用户,为甚有这么多用户?
这种用户通常称为系统用户或伪用户,不能登陆系统,不能删除,因为这些用户中的绝大多数是系统或服务正常运行所必需的用户。一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
1.2 linux /etc/shadow
系统中用户的密码信息,只有root 有读权限。
文件中每行代表一个用户,使用“:”分隔,每行被划分成9个字段
**用户名**:**加密密码**:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
root:\$y\$j9T\$DD/vIIOVlZgqRCvNVXBvrU7l\$tpjDZgI7p7rXI8qvwahj8cxpsrYUvcdneN254HIGKb.::0:99999:7:::
加密密码:目前linux采用SHA512散列加密算法。
注意,这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。很多软件透过这个功能,在密码串前加上 "!"、"*" 或 "x" 使密码暂时失效。
所有伪用户的密码都是 "!!" 或 "*",代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 "!!",代表这个用户没有密码,不能登录。
忘记密码怎么办
对于普通账户的密码遗失,可以通过 root 账户解决,它会重新给你配置好指定账户的密码,而不需知道你原有的密码(利用 root 的身份使用 passwd 命令即可)。
如果 root 账号的密码遗失,
1、需要重新启动进入单用户模式,系统会提供 root 权限的 bash 接口,此时可以用 passwd 命令修改账户密码。
2、也可以通过挂载根目录,修改 /etc/shadow,将账户的 root 密码清空的方法,此方式可使用 root 无需密码直接登陆。
在root权限下,手动创建用新账号
[root@Ambarella plia]\# vi /etc/group
末尾添加 bruce : x :521:
[root@Ambarella plia]\# grpconv
[root@Ambarella plia]\# grep "bruce" /etc/gshadow /etc/group
/etc/gshadow:bruce:x::
/etc/group:bruce:x:521:
[root@Ambarella plia]\# vi /etc/passwd
末尾添加 bruce: x:701:521::/home/bruce:bin/bash
[root@Ambarella plia]\# pwconv
[root@Ambarella plia]\# grep "bruce" /etc/shadow /etc/passwd
/etc/shadow:bruce:x:19069:0:99999:7:::
/etc/passwd:bruce:x:701:521::/home/bruce:/bin/bash
[root@Ambarella plia]\# passwd bruce
更改用户 bruce 的密码 。
新的密码:
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
[root@Ambarella plia]\# cp -a /etc/skel /home/bruce
[root@Ambarella plia]\# chown -R bruce:bruce /home/bruce
[root@Ambarella plia]\# chmod 700 /home/bruce
有效和初始用户组:
[plia@Ambarella \~]\$ groups
plia
[plia@Ambarella ~]$ newgrp plia
账号管理:
[plia@Ambarella \~]\$ useradd -u 700 -g bruce bruce2
[plia@Ambarella \~]\$ useradd -r bruce3
[root@Ambarella \~]\# passwd bruce
[root@Ambarella \~]\# passwd -S bruce
bruce PS 2022-03-17 0 99999 7 -1 (Password set, unknown crypt variant.)
[root@Ambarella \~]\# passwd -l bruce
[root@Ambarella \~]\# passwd -u bruce
[root@Ambarella \~]\# chage -l bruce
[root@Ambarella \~]\# usermod --help
[root@Ambarella \~]\# userdel -r bruce
[plia@Ambarella \~]\$ id
用户id=700(plia) 组id=520(plia) 组=520(plia)
[plia@Ambarella \~]\$ groupadd bruce5
[plia@Ambarella \~]\$ groupmod -g 700 -n bruce26 bruce
[plia@Ambarella \~]\$ groupdel bruce
[plia@Ambarella \~]\$ gpasswd bruce
[plia@Ambarella \~]\$ gpasswd -rR bruce
[plia@Ambarella \~]\$ su
密码:
[root@Ambarella **plia**]\# **cd //执行cd后,才在root目录下**
**[root@Ambarella \~]\#**
[root@Ambarella \~]\#
[plia@Ambarella etc]\$ **su - //直接进入 root 目录下**
密码:
[root@Ambarella \~]\#
[root@Ambarella etc]\# vi sudoers //添加 bruce ALL=(all) ALL
============================================================================================================
2. /etc/fstab
用UUID
vartmp /var/tmp tmpfs defaults 0 0
UUID=ece52258-e92c-477f-9ac5-a5c5a3409f64 /boot ext4 defaults,norelatime 0 1
在/etc/fstab中,可以用LABLE 不一定用UUID。
LABEL=writable / ext4 discard,noatime,x-systemd.growfs 0 1
LABEL=system-boot /boot/firmware vfat defaults 0 1
查看挂载情况:
df -h /dev/mmcblk1
\xfa\xbf\x9aV\xa0\xaa
├─mmcblk1p1
│ ext4 1.0 boot 4dbb5cf3-33b3-4263-a493-9f680e4a9c5d 276.3M 33% /boot
├─mmcblk1p2
│ ext4 1.0 rootfs
│ 5c996d22-5408-4c32-a4f6-0286a0bc811d 1.6G 83% /
└─mmcblk1p3
ext4 1.0 usr d5138476-660e-4833-9290-e3f7a0b7532e 40.7G 2% /home
3. /etc/pam.d
(1) pam 配置文件
https://www.cnblogs.com/kevingrace/p/8671964.html
1、介绍
PAM(Pluggable Authentication Modules)可动态加载 验证 模块
像我们使用su命令时,系统会提示你输入root用户的密码.这就是su命令通过调用PAM模块实现的
PAM配置文件放到/etc/pam.d/目录下
认证模块放置在/lib/security下,以加载动态库的形式
2、/etc/pam.d/配置文件说明
1)第一列:PAM的四种模块类型
认证管理(auth) :识别身份,提示输入密码
账号管理(account) :账号是否允许登陆,是否达到最大登陆数量
会话管理(session) :为用户提供服务之前/后需要做的些事情。包括:开启/关闭交换数据的信息,监视目录等,设置用户会话环境等
密码管理(password):控制用户更改密码的全过程
2)第二列:PAM的控制标记 , 使用控制标记 来 处理和判断 各个模块 的返回值,鉴别 认证成功 或者 失败之后 会发生什么事,如何进行控制。
required:表示 通过鉴别的 必要条件。
如果任何带required标记的模块 出现了错误,PAM并不 立刻 将错误消息返回给应用程序,
而是在 所有模块 都调用完毕后 才将 错误消息返回调用他的程序。
这样做的目的 就是不让用户知道 自己 被哪个模块拒绝,通过一种隐蔽的方式来保护系统服务。
requisite:与required相似,不同之处在于 一旦失败就不再执行堆中后面的其他模块,并且鉴别过程到此结束,同时也会立即返回错误信息。
sufficient:表示通过鉴别的充分条件。
一旦验证成功,那么PAM便立即向应用程序返回成功结果而不必尝试任何其他模块。即便后面的层叠模块使用了requisite或者required控制标志也是一样。
失败时,sufficient模块会当做 optional对待。
optional:表示即便该行所涉及的模块验证失败用户 仍能 通过认证。
include:表示 在验证过程中调用 其它 PAM配置文件。
“关键字”模式下,有以下几种控制模式:
required:如果本条目没有被满足,那最终本次认证一定失败,但认证过程不因此打断。整个栈运行完毕之后才会返回(已经注定了的)“认证失败”信号。
requisite:如果本条目没有被满足,那本次认证一定失败,而且整个栈立即中止并返回错误信号。
sufficient:如果本条目的条件被满足,且本条目之前没有任何required条目失败,则立即返回“认证成功”信号;如果对本条目的验证失败,不对结果造成影响。
optional:该条目仅在整个栈中只有这一个条目时才有决定性作用,否则无论该条验证成功与否都和最终结果无关。
include:将其他配置文件中的流程栈包含在当前的位置,就好像将其他配置文件中的内容复制粘贴到这里一样。
substack:运行其他配置文件中的流程,并将整个运行结果作为该行的结果进行输出。该模式和 include 的不同点在于认证结果的作用域:如果某个流程栈 include 了一个带 requisite 的栈,这个 requisite 失败将直接导致认证失败,同时退出栈;而某个流程栈 substack 了同样的栈时,requisite 的失败只会导致这个子栈返回失败信号,母栈并不会在此退出。
3)模块路径
要调用模块的位置. 一般保存在/lib64/security
4)模块参数
传递给模块的参数.参数可以有多个,之间用空格分隔开
3、工作原理和流程
当某一个有认证需求的应用程序需要验证的时候,
以vsftpd为例,在它的配置文件/etc/vsftpd/vsftpd.conf中就有这样一行定义:
pam_service_name=vsftpd
表示登录FTP服务器的时候进行认证是根据/etc/pam.d/vsftpd文件定义的内容进行。
不同应用程序 通过配置文件 在认证过程 中调用不同的pam模块 来定制 具体的 认证流程。
4、常用的PAM模块
pam_unix.so
auth 提示用户输入密码,并与/etc/shadow文件相比对.匹配返回0
account 检查用户的账号信息(包括是否过期等).帐号可用时,返回0.
password 修改用户的密码. 将用户输入的密码,作为用户的新密码更新shadow文件
pam_shells.so
auth
account 如果用户想登录系统,那么它的shell必须是在/etc/shells文件中之一的shell
pam_deny.so 该模块可用于拒绝访问
pam_permit.so 模块任何时候都返回成功.
pam_securetty.so auth 如果用户要以root登录时,则登录的tty必须在/etc/securetty之中.
pam_listfile.so 访问应用程的控制开关
pam_cracklib.so 这个模块可以插入到一个程序的密码栈中,用于检查密码的强度.
pam_limits.so session 定义使用系统资源的上限,root用户也会受此限制,可以通过/etc/security/limits.conf或/etc/security/limits.d/*.conf来设定
5、常见的实例操作
1)怎样才能强迫用户设置的密码不能与过去3次内的密码重复?(特别注意:/etc/pam.d/system-auth下的配置针对的是普通用户,在root用户下是无效的)
2)如何要求用户设置的密码必须至少包含5个数字和3个特殊符号?
3)如何限制kevin用户最多同时登陆4个?(同时可以限制root用户)
4)某用户连续登陆失败2次就锁定该账号,禁止登陆?(默认只能尝试登录三次,由retry=N决定的)
5)如何限制root只能从kevin.com这台计算机使用ssh远程登陆?
(2) pam 禁止 root 图形界面登陆
Fedora项目出于安全性考虑,在PAM模块中默认情况下禁止root用户登录图形界面,所以只好创建新用户了,按Ctrl+Alt+F2切换到tty2,登录root用户,(不要输密码 ),
然后运行命令:
useradd 用户名
再运行:
passwd 用户名
root:!locked::0:99999:7:::
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY