Linux学习笔记(10)——Linux账号管理与ACL权限设置
Linux账号管理与ACL权限设置
- Linux账号管理与ACL权限设置
一、Linux的账号与用户组
1.1 用户标识符:UID与GID
Linux主机仅认识ID(一组号码),每个登录的用户至少都会获取两个ID
- 用户ID(User ID,简称UID)
- 用户组ID(Group ID,简称GID)
1.2 用户账户
用户输入账号密码后,系统处理了什么?
- 先查找/etc/passwd里是否有你输入的账号,若有的话则读取UID与GID,此外,将该账号的家目录与shell设置也一并读出
- 核对密码表,Linux进入/etc/shadow里进行核对
- 一切通过,进入shell管理阶段
-
/etc/passwd文件每一行代表一个账号
[root@localhost ~]# head -n 4 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin 账号名称:密码:UID:GID:用户信息说明栏:家目录:shell
- UID范围
- 0:系统管理员
- 1~999:系统账号(除了0之外的UID权限相同,保留1000以下的数字留给系统作为保留账号是一个习惯)
- 1~200:由Linux发行版自行建立的系统账号
- 201~999:若用户有系统账号需求,可以使用的用户ID
- 1000~60000:可登录账号
- UID范围
-
/etc/shadow文件结构
[root@localhost ~]# head -n 4 /etc/shadow root:$6$m/Uw7TAhFRyWJr.3$GTxC4qNEszBQ/ QXNu0PT1ue3ubkxpZ2O0T. UM2rCud6MEKXb996fBTn10EkasOmv/ H5E3HFWZrJPpdyzitXOt0::0:99999:7::: bin:*:18353:0:99999:7::: daemon:*:18353:0:99999:7::: adm:*:18353:0:99999:7::: 账号名称:密码(经过编码的密码):最近修改密码的日期(1970-1-1累加):密码不可被修改的天数:密码需要重新修改的天数:密码需要修改期限前的警告天数:密码过期后的账号宽限时间(密码失效日):保留
-
目前加密机制
[root@localhost ~]# authconfig --test | grep hashing password hashing algorithm is sha512
1.3 关于用户组:有效与初始用户组,groups,newgr
-
/etc/group文件结构
[root@localhost ~]# head -n 4 /etc/group root:x:0: bin:x:1: daemon:x:2: sys:x:3: 组名:用户组密码:GID:此用户组支持的账号名称
-
有效用户组(effective group)与初始用户组(initial group)
/etc/passwd第四栏的GID就是【初始用户组】,登录系统时即有该用户组的相关权限[root@localhost ~]# usermod -a -G users admin [root@localhost ~]# grep admin /etc/passwd /etc/group /etc/gshadow /etc/passwd:admin:x:1000:1000:admin:/home/admin:/bin/bash /etc/group:wheel:x:10:admin <=次要用户组的设置:安装时指定 /etc/group:users:x:100:admin <=次要用户组的设置 /etc/group:admin:x:1000:admin <=初始用户组 /etc/group:printadmin:x:994: /etc/gshadow:wheel:::admin <=次要用户组的设置 /etc/gshadow:users:::admin <=次要用户组的设置 /etc/gshadow:admin:!!::admin /etc/gshadow:printadmin:!::
- groups:有效与支持用户组的观察
[admin@localhost ~]$ groups admin wheel
第一个输出的用户组即为有效用户组
- newgrp:有效用户组的切换
[root@localhost admin]# head -n 4 /etc/gshadow root::: bin::: daemon::: sys::: 组名:密码栏(开头为!表示无合法密码,所以无用户组管理员):用户组管理员的账号:有加入该用户组支持的所属账号
二、账号管理
2.1 新增与删除用户:useradd、相关配置文件、passwd、usermod、userdel
-
useradd
useradd [-u UID] [-g 初始用户组] [-G 次要用户组] [-mM] [-c 说明栏] [-d 家目录绝对路径] [-s shell] 使用者账号名 选项与参数: -m :强制,要建立使用者家目录(一般账号默认值) -M :强制,不要建立使用者家目录(系统账号默认值)
# 完全参考默认值建立一个新用户 [root@localhost admin]# useradd sino1 [root@localhost admin]# ll -d /home/sino1/ drwx------. 3 sino1 sino1 78 Nov 11 08:44 /home/sino1/ # 默认建立使用者家目录,权限700 [root@localhost admin]# grep sino1 /etc/passwd /etc/shadow /etc/ group /etc/passwd:sino1:x:1001:1001::/home/sino1:/bin/bash /etc/shadow:sino1:!!:19307:0:99999:7::: /etc/group:sino1:x:1001:
由于/etc/shadow内仅会有密码参数而不会有加密过的密码数据,所以在建立用户时 还需要使用
passwd 账号
来设置密码,才算完成了用户建立的流程# 范例二:假设已存在用户组users,且UID 1500不存在,建立一个新用户 [root@localhost admin]# useradd -u 1500 -g users sino2 [root@localhost admin]# ll -d /home/sino2 drwx------. 3 sino2 users 78 Nov 11 08:49 /home/sino2 [root@localhost admin]# grep sino2 /etc/passwd /etc/shadow /etc/ group /etc/passwd:sino2:x:1500:100::/home/sino2:/bin/bash /etc/shadow:sino2:!!:19307:0:99999:7:::
因为用户组已经存在,所以在/etc/group里面就不会主动建立与账号同名的用户组了
# 建立一个系统账号 [root@localhost admin]# useradd -r sino3 [root@localhost admin]# ll -d /home/sino3 ls: cannot access /home/sino3: No such file or directory <=不 会主动建立家目录 [root@localhost ~]# grep sino3 /etc/passwd /etc/shadow /etc/ group /etc/passwd:sino3:x:987:981::/home/sino3:/bin/bash /etc/shadow:sino3:!!:19307:::::: /etc/group:sino3:x:981:
-
useradd参考文件
[root@localhost ~]# useradd -D GROUP=100 <=默认的用户组 HOME=/home <=默认的家目录所在目录 INACTIVE=-1 <=密码失效日,在shadow内的第七栏 EXPIRE= <=账号失效日,在shadow内的第八栏 SHELL=/bin/bash <=默认的shell SKEL=/etc/skel <=使用者家目录的内容数据参考目录 CREATE_MAIL_SPOOL=yes <=是否主动帮使用者建立邮箱(mailbox)
- 私有用户组机制
- 公共用户组机制
-
UID/GID密码参数:/etc/login.defs
-
用户删除与密码设置值
- 用户删除:
userdel [-r] 用户名
- -r表示连同家目录一起删除
- 密码设置:
passwd 用户名
(只有paddwd代表修改自己的密码) - chage:显示详细的密码参数
- 用户删除:
-
usermod:修改账号相关设置
2.2 用户功能
id
:查询某人或自己的相关UID/GID等信息finger
:查看很多用户相关的信息chfn
chsh
:change shell
2.3 新增与删除用户组
groupadd
- 新建与用户私有用户组无关的其他组时,使用小于1000的GID
groupdel
gpasswd
:建立用户组管理员
三、主机的详细权限规划:ACL的使用
使用外部身份认证系统需要进行相关学习与配置
暂时略过。
四、用户身份切换
4.1 su
su [-lm] [-c 命令] [username]
选项与参数:
- :单纯使用,如【su -】代表使用login-shell的变量文件读取方式登录系统
-l :与-类似,但后面加欲切换的使用者账号,也是login-shell方式
-m :使用目前的环境配置,不读取新使用者的配置文件
-c :仅进行一次命令,-c后可加命令
单纯使用【su】切换为root,读取的变量设置方式为非登录shell方式,很多原本的变量不会修改
【su】方式:
[admin@localhost ~]$ su
Password:
[root@localhost admin]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@localhost admin]# env | grep 'admin'
USER=admin
MAIL=/var/spool/mail/admin
PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/admin/.local/bin:/home/admin/bin
PWD=/home/admin
LOGNAME=admin
XDG_DATA_DIRS=/home/admin/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
[root@localhost admin]# exit
exit
【su -】方式:
[admin@localhost ~]$ su -
Password:
Last login: Sat Nov 12 07:54:01 CST 2022 on pts/0
[root@localhost ~]# env | grep root
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
HOME=/root
LOGNAME=root
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
XAUTHORITY=/root/.xauth2wQUfA
[root@localhost ~]# exit
logout
仅想执行一次命令,【su - -c "命令串"】
[admin@localhost ~]$ su - -c "head -n 3 /etc/shadow"
Password:
root:$6$m/Uw7TAhFRyWJr.3$GTxC4qNEszBQ/QXNu0PT1ue3ubkxpZ2O0T.UM2rCud6MEKXb996fBTn10EkasOmv/H5E3HFWZrJPpdyzitXOt0::0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
[admin@localhost ~]$ <= 身份依然是admin
root切换为任何用户时,不需要输入新用户的密码
[admin@localhost ~]$ su -l sino1
Password:
[sino1@localhost ~]$ su -
Password:
Last login: Sat Nov 12 08:00:26 CST 2022 on pts/0
[root@localhost ~]# id sshd
uid=74(sshd) gid=74(sshd) groups=74(sshd)
[root@localhost ~]# su -l sshd
This account is currently not available.
[root@localhost ~]# finger sshd
bash: finger: command not found...
[root@localhost ~]# exit
logout
[sino1@localhost ~]$ exit
logout
[admin@localhost ~]$
多人共用环境下,使用su
,每个人都要知道root密码,有密码泄露的问题
4.2 sudo
并非所有人都能执行sudo,仅有规范到/etc/sudoers
内的用户才能够执行,使用时仅需输入当前用户自己的密码
sudo [-b] [-u 新使用者账号]
选项与参数:
-b :将后续的命令放到后台让系统自动执行,不与目前的shell参数影响
-u :后面接欲切换的使用者,若无此项代表切换为root
[admin@localhost ~]$ sudo -u sshd touch /tmp/mysshd
[sudo] password for admin:
[admin@localhost ~]$ ll /tmp/mysshd
-rw-r--r--. 1 sshd sshd 0 Nov 12 08:09 /tmp/mysshd
4.3 visudo与/etc/sudoers
-
单一用户可使用root所有命令,与sudoers文件语法
执行visudo: ... ## Allow root to run any commands anywhere root ALL=(ALL) ALL sino1 ALL=(ALL) ALL ...
-
利用wheel用户组以及免密码的功能处理visudo
... ## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL ## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL ...
-
有限制的命令操作
【!】代表不可执行myuser1 ALL=(root) !/usr/bin/passwd, /user/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
-
通过别名创建visudo
User_Alias ADMPW = pro1, pro2 ... Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /user/bin/passwd [A-Za-z]*, !/usr/bin/passwd root ADMPW ALL=(root) ADMPWCOM
-
sudo的时间间隔问题
-
sudo搭配su的使用方式
实现使用自己的密码切换为root身份,【sudo su -】[root@localhost ~]# visudo User_Alias ADMINS = pro1, pro2, pro3, myuser1 ADMINS ALL=(root) /bin/su -
五、用户的特殊shell与PAM模块
5.1 特殊的shell,/sbin/nologin
编辑/etc/nologin.txt,说明不能登录的原因
5.2 PAM模块简介
Pluggable Authentication Modules,插入式验证模块
该模块可进行某些程序的验证,与PAM模块有关的配置文件位于/etc/pam.d/*及/etc/security/*
六、Linux主机上的用户信息传递
6.1 查询用户:w、who、last、lastlog
[admin@localhost ~]$ w
08:56:37 up 1 day, 1:52, 2 users, load average: 0.01, 0.05, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
admin tty1 02Nov22 9days 3:44 0.00s xinit /etc/X11/xinit/xinitrc -- /usr/bin/X :0 vt1 -keeptty -
admin pts/0 :0 07:53 5.00s 0.07s 0.02s w
[admin@localhost ~]$ who
admin tty1 2022-11-02 09:24
admin pts/0 2022-11-12 07:53 (:0)
[admin@localhost ~]$ lastlog
Username Port From Latest
root pts/0 Sat Nov 12 08:17:47 +0800 2022
bin **Never logged in**
.....
6.2 用户对谈:write、mesg、wall
系统内在线用户即时通讯
6.3 用户邮箱:mail
脱机状态下使用mail发邮件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】