目录
一、账号管理
1. 用户账号
1.1 概述
用户账户是用来记录用户的用户的和口令、隶属的组、可以访问的资源,以及用户的个人文件和设置。每个用户在系统中都有一个用户账号。
1.2 用户账号类型
普通用户:权限受到限制的用户
超级管理员:拥有至高无上的权限
程序用户:不是给用户使用的,供程序使用(不允许登录,安全性考虑)
1.3 用户账号区分
系统根据用户身份使用的uid号来辨识
超级管理员:默认是0
普通用户:centos7:1000-60000;centos6之前:500开始
程序用户:centos7:1-999;centos6之前:1-499
2. 组账号
2.1 概述
按照一定的宗旨和系统建立起来的集体。linux和windows中的组就是将多个用户集合起来,统一分配某种相同的权限(开通或关闭)。
2.2 区分
基本组:“主岗位”,私有组,有且唯一;用户所属组中的第一个组称为基本组
附加组:公共组,可有可无,可能有多个;除了第一个组外的其他组为附加组或公共组
附加组说明:
[root@localhost ~]# id zhangsan; id lisi
uid=1001(zhangsan) gid=1001(zhangsan) 组=1001(zhangsan)
uid=1002(lisi) gid=1002(lisi) 组=1002(lisi)
[root@localhost ~]# gpasswd -a lisi zhangsan
正在将用户“lisi”加入到“zhangsan”组中
[root@localhost ~]# id zhangsan; id lisi
uid=1001(zhangsan) gid=1001(zhangsan) 组=1001(zhangsan)
uid=1002(lisi) gid=1002(lisi) 组=1002(lisi),1001(zhangsan)
相对于用户lisi,zhangan组是他的附加组,用户lisi拥有lisi组和zhangsan组权限。
3. 用户账号管理
3.1 重要文件存放位置
/etc/passwd:存放用户的信息
/etc/shadow:存放用户的密码信息
3.2 基本信息
- passwd分为七段,每段用:隔开
[root@localhost ~]# cat /etc/passwd | head -n1
root:x:0:0:root:/root:/bin/bash
① 用户名,登录系统的名字,唯一
② 密码占位符,具体内容不在这里
③ uid,用户的身份证
④ gid,group组号
⑤ 备注信息,如经理、职员
⑥ 家目录位置
⑦ 默认的shell类型,/bin/bash
- shadow分为九段,每段用:隔开
[root@localhost ~]# head -1 /etc/shadow
root:$6$Mx……8vV/L0Hxd1::0:99999:7:::
① root,用户名
② 加密的密码,*或!!代表不可以登录
③ 最近一次修改密码的时间,使用:date -d "1970-01-01 19717 days"可以查看具体时间
④ 如果这里是7,代表7天后才可以修改密码,0代表随时可以修改
⑤ 密码有效期,99999永久有效
⑥ 7代表密码过期前7天会提醒你一次
⑦ 如果这里是7,代表密码过期7天后会被锁定
⑧ 失效时间,如:19718代表明天过期,超过有效期也无法登录
⑨ 保留字段,未使用
3.3 添加用户
3.3.1 通式
useradd [选项]…… 用户名
[root@localhost ~]# useradd zhangsan #创建用户zhangsan
[root@localhost ~]# tail -1 /etc/passwd
zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
3.3.2 选项示例
-u:指定uid
-M:不生成家目录
-s:指定shell类型
-e:指定失效时间
-c:备注信息
-d:指定家目录
-g:指定基本组
-G:指定附加组
-p:指定密码
[root@localhost ~]# useradd -u 1500 -M -s /sbin/nologin lisi
#添加用户李四指定uid1500,不生成家目录且不允许登录
[root@localhost ~]# tail -1 /etc/passwd
lisi:x:1500:1500::/home/lisi:/sbin/nologin
3.4 密码管理
3.4.1 通式
passwd [选项] 用户
[root@localhost ~]# passwd zhangsan
更改用户 zhangsan 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
3.4.2 选项示例
-l:锁定用户
-u:解锁用户
-S:查看当前用户状态
-d:清空密码,直接登录
[root@localhost ~]# passwd -l zhangsan
锁定用户 zhangsan 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -S zhangsan
zhangsan LK 2023-12-26 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# passwd -u zhangsan
解锁用户 zhangsan 的密码。
passwd: 操作成功
3.4.3 免交互修改密码
[root@localhost ~]# echo 123456 | passwd zhangsan --stdin
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
3.4.4 随机生成密码
[root@localhost ~]# cat /dev/random | tr -cd [a-zA-Z0-9] | head -c 12
F2Py]]O[ei6F[root@localhost ~]#
#随机生成内容 | 删除字符取补集(取反) | 前面12个字符
3.5 修改用户账号的属性
3.5.1 通式
useradd [选项]…… 用户
3.5.2 选项示例
-l:修改用户名
-L:锁定用户
-U:解锁用户
选项与useradd基本一致
[root@localhost ~]# usermod -l wangwu zhangsan | id wangwu
uid=1001(wangwu) gid=1001(zhangsan) 组=1001(zhangsan)
3.6 删除用户
userdel [选项] 用户
[root@localhost ~]# userdel -r wangwu #-r将宿主(家)目录一起删除
[root@localhost ~]# id wangwu
id: wangwu: no such user
4. 组账号管理
4.1 组账号文件
/etc/group:保存组帐号基本信息
/etc/gshadow:保存组帐号的密码信息基本不使用
4.2 添加组
groupadd [-g GID] 组账号名
[root@localhost ~]# groupadd fql
[root@localhost ~]# tail -1 /etc/group
fql:x:1501:
4.3 组内管理
4.3.1 通式
gpasswd [选项] 用户、组成员
4.3.2 选项示例
-a:向组内添加一个用户
-d:从组内删除一个用户成员
-M:定义组成员列表,以逗号分隔
[root@localhost ~]# useradd zhangsan
[root@localhost ~]# groupadd fql
[root@localhost ~]# gpasswd -a zhangsan fql
正在将用户“zhangsan”加入到“fql”组中
[root@localhost ~]# id zhangsan
uid=1001(zhangsan) gid=1001(zhangsan) 组=1001(zhangsan),1002(fql)
4.4 删除组
groupdel 组账号名
5. 手动删除指定用户
#建立新 user01用户
[root@localhost ~]# useradd user01
[root@localhost ~]# passwd user01
#为user01用户设置密码,由此user01用户才算是创建成功
#下面开始手动删除 user01
[root@localhost ~]# vi /etc/passwd
user01:x:501:501::/home/user01:/bin/bash <--删除此行
#修改用户信息文件,删除user01用户行
[root@localhost ~]#vi /etc/shadow
user01:$6$KoOYtcOJ $56Xk9vp3D2vMRBxibNOn.21cVJ9onbW8IHx4WrOx6qBqfGa9U3mjMsGjqYnj L/4t3zt3YxElce2X8rbb12x4a0:15716:0:99999:7::: <--删除此行
#修改影子文件,删除user01用户密码行,注意,这个文件的权限是000,所以要强制保存;
[root@localhost ~]#vi /etc/group
user01:x:501: <--删除此行
#修改组信息文件,删除user01群组信息
[root@localhost ~]#vi /etc/gshadow
user01:!:: <--删除此行
#修改组影子文件,删除user01群组密码信息。同样注意需要强制保存
[root@localhost ~]# rm -rf /var/spod/mail/user01 #删除用户邮箱
[root@localhost ~]# rm -rf /home/user01/ #删除用户的家目录
#至此,用户彻底删除,再新建用户user01。如果可以正常建立,则说明我们手工删除干净了
[root@localhost ~]# useradd user01
[root@localhost ~]# passwd user01
#重新建立同名用户,没有报错,说明前面的手工删除是可以完全删除用户的
6. 查询
- finger命令:查询用户帐号的详细信息(finger [用户名])
[root@localhost ~]# finger zhangsan
Login: zhangsan Name:
Directory: /home/zhangsan Shell: /bin/bash
Never logged in.
No mail.
No Plan.
- 补充:finger命令,本地yum仓库rpm安装,这个命令不需要依赖包
[root@localhost ~]# rpm -ivh /mnt/Packages/finger-0.17-52.el7.x86_64.rpm
准备中... ################################# [100%]
软件包 finger-0.17-52.el7.x86_64 已经安装
[root@localhost ~]# finger
Login Name Tty Idle Login Time Office Office Phone Host
root root pts/0 Dec 27 09:48 (192.168.190.1)
- w命令:查询已登录到主机的用户信息
[root@localhost ~]# w
23:25:58 up 1:38, 2 users, load average: 0.22, 0.06, 0.06
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.190.1 21:47 1:02 17.29s 17.04s /usr/bin/python
root pts/1 192.168.190.1 23:25 5.00s 0.08s 0.01s w
标题 | 含义 |
---|---|
USER | 登录到系统的用户。 |
TTY | 登录终端。 |
FROM | 表示用户从哪里登陆进来,一般显示远程登陆主机的 IP 地址或者主机名。 |
LOGIN@ | 用户登陆的日期和时间。 |
IDLE | 表示某个程序上次从终端开始执行到现在所持续的时间。 |
JCPU | 和该终端连接的所有进程占用的 CPU 运算时间。这个时间里并不包括过去的后台作业时间,但是包括当前正在运行的后台作业所占用的时间。 |
PCPU | 当前进程所占用的 CPU 运算时间。 |
WHAT | 当前用户正在执行的进程名称和选项,换句话说,就是表示用户当前执行的是什么命令。 |
- who命令:相比较 w 命令,who 命令只能显示当前登陆的用户信息,但无法知晓每个用户正在执行的命令。 who 命令的基本格式: who [选项] [file]
[root@localhost ~]# who
root pts/0 2023-12-26 21:47 (192.168.190.1)
root pts/1 2023-12-26 23:25 (192.168.190.1)
选项 | 含义 |
---|---|
-a | 列出所有信息,相当于所有选项。 |
-b | 列出系统最近启动的时间日期。 |
-l | 列出所有可登陆的终端信息。 |
-m | 仅列出关于当前终端的信息,who -m 命令等同于 who am i 。 |
-q | 列出在本地系统上的用户和用户数的清单。 |
-r | 显示当前系统的运行级别。 |
-s | 仅显示名称、线路和时间字段信息,这是 who 命令的默认选项。 |
-u | 显示当前每个用户的用户名、登陆终端、登陆时间、线路活动和进程标识。 |
-T 或 -w | 显示 tty 终端的状态,“+”表示对任何人可写,“-”表示仅对 root 用户或所有者可写,“?”表示遇到线路故障。 |
- user命令
[root@localhost ~]# users
root root
二、权限管理
1. 权限查看与修改
1.1 访问人群分为了三类
- 所属主(u)
- 所属组(g)
- 其他人 (o)
1.2 权限分为三种
- 读(r,4)
- 写(w,2)
- 执行(x,1程序,脚本)
1.3 对文件的权限
- r 可使用文件查看类工具,比如:cat,可以获取其内容
- w 可修改其内容
- x 可以把此文件提请内核启动为一个进程,即可以执行(运行)此文件(此文件的内容必须是可执行)
1.4 对目录的权限
- r 可以使用ls查看此目录中文件列表
- w 可在此目录中创建文件,也可删除此目录中的文件,而和此被删除的文件的权限无关
- x 可以cd进入此目录,可以使用ls -l查看此目录中文件元数据(须配合r权限),属于目录的可访问的最小权限
1.5 权限修改
1.5.1 模式法
chmod 对谁(ugoa) 操作(+-=)权限(rwx) 文件
[root@localhost ky35]# touch 1.txt | ll
总用量 0
-rw-r--r--. 1 root root 0 12月 27 10:24 1.txt
[root@localhost ky35]# chmod u+x 1.txt | ll #给1.txt属主增加执行权限
总用量 0
-rwxr--r--. 1 root root 0 12月 27 10:24 1.txt
[root@localhost ky35]# chmod o-rwx 1.txt | ll
总用量 0
-rwxr-----. 1 root root 0 12月 27 10:24 1.txt
[root@localhost ky35]# chmod a+rwx 1.txt | ll
总用量 0
-rwxrwxrwx. 1 root root 0 12月 27 10:24 1.txt
1.5.2 数字法
chmod (421)(421)(421) 文件
[root@localhost ky35]# ll 1.txt
-rwxrwxrwx. 1 root root 0 12月 27 10:24 1.txt
[root@localhost ky35]# chmod 666 1.txt | ll #给1.txt文件赋予读取,修改权限
总用量 0
-rw-rw-rw-. 1 root root 0 12月 27 10:24 1.txt
2. umask应用
umask 的值可以用来保留在创建文件权限:默认文件夹权限777,默认文件权限666(为了安全性考虑,文件默认去掉执行权限);新建文件夹默认权限755,新建文件默认权限644。
- 实现过程:
[root@localhost ~]# umask
0022
新建文件夹默认权限=777-022=755
新建文件默认权限=666 -022=755
- 自定义umask值
[root@localhost ~]# umask 123 | umask
0123
新建文件夹默认权限=777-123=754
由于文件已经去掉执行权限,这里没有1,666即42-,42-,42-,只能减去022
新建文件默认权限=666 -022=644
或者遇到umask值为有奇数位,文件默认权限666减去umask奇数位值后+1即可
3. 特殊权限管理
3.1 sticky位(沾滞位、冒险位)
- 作用:只有自己和超级管理员可以删除该文件,只能对文件夹有效
- 权限设定:
[root@localhost ky35]# chmod o+t a #a为文件夹,为文件夹a添加sticky位
[root@localhost ky35]# ll
总用量 0
drwxr-xr-t. 2 root root 19 12月 27 15:39 a
3.2 suid权限
- 作用:加了此权限能否打开文件就和用户无关了,以下权限s表示当使用这个命令程序时,把当前用户当成文件的所属主,把当前用户当成文件的主人
- 权限设定:没有给vim添加suid权限前,普通用户无法通过vim工具修改用户信息文件内容,添加权限后可以强制修改
[root@localhost ~]# chmod u+s /usr/bin/vim #给vim命令加上suid权限
[root@localhost ~]# ll /usr/bin/vim
-rwsr-xr-x. 1 root root 2289640 8月 2 2017 /usr/bin/vim
3.3 sgid权限
- 作用:给文件加上sgid权限后,代表开放该文件所属组的权限给其他用户使用,即其他用户会拥有该文件所属组的权限
- 权限设定:
[root@localhost ~]# ll /usr/bin/vim
-rwxr-xr-x. 1 root root 2289640 8月 2 2017 /usr/bin/vim
[root@localhost ~]# chmod g+s /usr/bin/vim #为vim命令添加sgid权限
[root@localhost ~]# ll /usr/bin/vim
-rwxr-sr-x. 1 root root 2289640 8月 2 2017 /usr/bin/vim
4. 权限访问控制列表ACL
- 作用:对具体用户进行访问规则
- 权限设定:
[root@localhost ~]# ll /etc/passwd
-rw-r--r--. 1 root root 2105 12月 27 16:13 /etc/passwd
[root@localhost ~]# setfacl -m u:fql:rw /etc/passwd
#-m代表添加规则,更改文件的访问控制列表;即:给用户添加对文件passwd查看修改权限
[root@localhost ~]# su fql #切换用户fql,并编辑/etc/passwd末行内容
[fql@localhost root]$ tail -n1 /etc/passwd #用户fql已经获得修改权限,可以修改内容
qqqqqqqqqqqq
三、总结
Linux系统账号权限管理方式多种多样,可以根据具体需求,选择合适的管理规则。