
第二天,centos文件和用户管理
一、文件管理
1.Linux 目录结构
1.1 对比
- Windows:以多根的方式组织文件
C:\ D:\ E:\ - Linux:以单根的形式组织文件
/
1.2 简介
/ 目录结构:
[root@localhost /]# ls
bin boot dev etc home lib lib64 media mnt
opt proc root run sbin srv sys tmp usr var
[root@localhost /]#
1.3 目录图示
目录功能了解即可:
-
bin 普通用户使用的命令 /bin/ls, /bin/date
-
sbin 管理员使用的命令 /sbin/service
-
dev 设备文件 /dev/sda,/dev/sda1
-
root root 用户的 HOME
-
home 存储普通用户家目录
-
tmp 临时文件 (全局可写:进程产生的临时文件)
-
var 存放的是一些变化文件,比如数据库,日志,邮件....
==设备(主要指存储设备)挂载目录==
-
media 移动设备默认的挂载点
-
mnt 手工挂载设备的挂载点
-
etc 配置文件(系统相关如网络/etc/sysconfig/network
-
proc 虚拟的文件系统,反映出来的是内核,进程信息或实时状态 ,硬件的状态
==sr 系统文件,相当于 C:\Windows==
-
/usr/local 软件安装的目录,相当于 C:\Program
-
boot 存放的系统启动相关的文件,例如 kernel,grub(引导装载程序)
-
lib 库文件 Glibc
-
lib64 库文件 Glibc
-
lost+found fsck 修复时,存储没有链接的文件或目录
2.文件管理
2.1 文件管理命令
2.1.1 创建文件
语法:命令 空格 文件名。后缀 touch 文件名字
[root@localhost ~]# touch file1.txt
[root@localhost ~]# ls
anaconda-ks.cfg file1.txt initial-setup-ks.cfg
[root@localhost ~]#
2.1.2 创建目录
语法:命令 空格 路径和目录名 mkdir -p (父系,当创建目录没有上一级时,自动创建)
[root@localhost ~]# ls
anaconda-ks.cfg dir1 file1.txt initial-setup-ks.cfg
[root@localhost ~]#
2.1.3 复制
语法:命令 参数 1 参数 2 cp 源文件路径 目标文件夹 选项:cp -r 源目录 目标目录
[root@localhost ~]# cp file1.txt dir1/
[root@localhost ~]# ls dir1/
file1.txt
[root@localhost ~]# ls
anaconda-ks.cfg dir1 file1.txt initial-setup-ks.cfg
[root@localhost ~]#
2.1.4 移动
语法:命令 参数 1 参数 2 mv 源文件路径 目标文件路径
[root@localhost ~]# mv file2.txt dir1/
[root@localhost ~]# ls
anaconda-ks.cfg dir1 file1.txt initial-setup-ks.cfg
[root@localhost ~]# ls dir1/
file1.txt file2.txt
[root@localhost ~]#
2.1.5 删除
语法:rm -rf 文件或目录路径
[root@localhost ~]# touch file3.txt file4.txt
[root@localhost ~]# ls
anaconda-ks.cfg dir1 file1.txt file3.txt file4.txt initial-setup-ks.cfg
[root@localhost ~]# rm -rf file3.txt file4.txt
[root@localhost ~]# ls
anaconda-ks.cfg dir1 file1.txt initial-setup-ks.cfg
[root@localhost ~]#
2.1.6 查看
在图形界面,创建一个记事本,或者直接创建一个
.xt,并写入内容 cat 全部 more 翻页 head 头部 tail 尾部
[root@localhost ~]# cat /root/file6.txt
Hello Linux
Hello Centos
[root@localhost ~]# more /root/file6.txt
Hello Linux
Hello Centos
[root@localhost ~]# head /root/file6.txt
Hello Linux
Hello Centos
[root@localhost ~]# tail /root/file6.txt
Hello Linux
Hello Centos
[root@localhost ~]
grep 过滤关键字 语法:grep 关键字 文件名
[root@localhost ~]# grep Hello file6.txt
Hello Linux
Hello Centos
[root@localhost ~]#
2.1.7 修改文件内容 VI/VIM
2.1.7.1 vi 的三个模式
基本上 vi/vim 共分为三种模式,命令模式(Command Mode)、输入模式(Insert Mode)和命令行模式(Command-Line Mode)
2.1.7.2 命令模式
- 光标定位
- hjkL //上下左右
- 0 $ //行首行尾
- gg G //页首页尾
- 3G 进入第三行
- /string (n N 可以循环的) //查找字符,按 n 键选下一个(重要)
- 文本编辑
- yy 复制
- dd 删除
- p 粘贴
- u undo 撤销
- 进入其他模式
- a 进入插入模式
- i 进入插入模式
- o 进入插入模式
- A 进入插入模式
- : 进入末行模式(扩展命令模式)
- v 进入可视模式
- ESC 返回命令模式
2.1.7.3 扩展命令模式
- 保存退出
- :w 保存
- :q 退出
- :wq 保存并退出
- 查找替换
- :范围 s/原内容/新内容/全局
- :1,5 s/root/qianfeng/g 从 1-5 行的 root 替换为 qianfeng
- 另存为
- :w file9.txt 另存为 file9.txt
- 设置
- :set nu 设置行号
- :set nonu 取消设置行号
- :set list 显示控制字符
2.1.8 改变目录
- cd 绝对路径
- ls 列出目录当中的内容
2.1.8.1 绝对路径
从根开始描述路径。
2.1.8.2 相对路径
- 当前
- ./
- 不输入任何路径
- 上一级
- ../
2.2 文件类型
2.2.1 类型
- 常见类型
- 普通文件(文本文件,二进制文件,压缩文件,电影,图片。。。)
- d 目录文件(蓝色)
- 非常见类型
- b 设备文件(块设备)存储设备硬盘,U 盘 /dev/sda, /dev/sda1
- c 设备文件(字符设备)打印机,终端 /dev/tty1
- l 链接文件(淡蓝色)
- s 套接字文件
- p 管道文件
2.2.2 注意
通过颜色判断文件的类型是不一定正确的!!! Linux 系统中文件是没有扩展名!!!
二、用户管理
1.用户/组基本概念
1.1 概念
Users and groups: . Every process (running program) on the system runs as a particular user. . Every file is owned by a particular user. . Access to files and directories are restricted by user. . The user associated with a running process determines the files and directories accessible to that process.
1.2 用户的作用
1.2.1 查看当前登录的用户信息
[root@192 ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@192 ~]#
1.2.2 查看文件的 owner
[root@192 ~]# ll /home
总用量 4
drwx------. 14 usr1 usr1 4096 7 月 14 19:00 usr1
[root@192 ~]#
1.2.3 查看运行进程的 username
[root@192 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 193700 6852 ? Ss 08:30 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S 08:30 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 08:30 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S 08:30 0:00 [kworker/0:0]
root 5 0.0 0.0 0 0 ? S< 08:30 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 08:30 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 08:30 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 08:30 0:01 [rcu_sched]
root 10 0.0 0.0 0 0 ? S 08:30 0:00 [watchdog/0]
root 11 0.0 0.0 0 0 ? S 08:30 0:00 [watchdog/1]
root 12 0.0 0.0 0 0 ? S 08:30 0:00 [migration/1]
root 13 0.0 0.0 0 0 ? S 08:30 0:00 [ksoftirqd/1]
.
.
.
1.3 用户组信息存储的文件
1.3.1 用户基本信息文件
/etc/passwd(冒号分割为7列字段) root:x:0:0:root:/root:/bin/bash 用户名:x:uid:gid:描述:HOME:shell
- root:用户名:登录系统的名字
- X:密码占位符:,具体内容不在这里
- 0:UID: 用户的身份证号
- 系统约定:RHEL7--9
- uid: 0 特权用户
- uid: 1~999 系统用户
- uid: 1000+ 普通用户
The root user . uid is 0 . all power . This user has the power to override normal privileges on the file system . installing or removing software and to manage system files and directorie . Most devices can only be controlled by root
- 0:GID:GROUP 组号
- 每创建一个用户,系统会自动创建同名的组
- root:描述:比如经理 manager
- 默认是用户名
- /root:家目录:登录系统时,所在目录
- /bin/bash:登录shell:命令解释器
不能用 vim 的方式改这个文件,主要是来观察
1.3.2 用户密码信息文件
/etc/shadow(9 列)
root:$1$MYG2N:15636:0:99999:7: : :
1.3.4 组信息文件
/etc/group
root:x:0:
组名:组密码:组 ID:组成员
组成员默认为空
2.用户/组管理
2.1 用户
2.1.1 ==创建用户 未指定选项==
[root@192 ~]# useradd user01
[root@192 ~]# id user01
uid=1001(user01) gid=1001(user01) 组=1001(user01)
[root@192 ~]#
用户编号=具体数字(用户名)组编号=具体数字(组名)组=组 ID(成员名字) 小结: 如果创建一个用户时,未指定任何选项,系统会创建一个和用户名相同的组作为用户的 Primary Group.
2.1.2 ==创建用户 指定选项==
[root@192 ~]# useradd user02 -u 2101
[root@192 ~]# id user02
uid=2101(user02) gid=2101(user02) 组=2101(user02)
[root@192 ~]#
创建用户 user02,指定 uid
[root@192 ~]# useradd user03 -d /user03
[root@192 ~]# id user03
uid=2102(user03) gid=2102(user03) 组=2102(user03)
[root@192 ~]#
创建用户 user03 指定家目录
2.1.3 ==删除用户========
[root@192 ~]# userdel -r user03
[root@192 ~]# id user03
id: user03: no such user
[root@192 ~]#
2.1.4 ==用户密码========
方法一:root 修改其他用户(alice)密码
[root@192 ~]# passwd user02
更改用户 user02 的密码。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@192 ~]#
方法二:用户(mark)登录,自己修改密码。
[mark@localhost ~]$ passwd
2.1.5 ==其它选项管理=======
[root@localhost ~]# usermod -s /sbin/nologin user02
修改登录 SHELL
2.1.6 ==组成员管理========
- 查看用户原先信息
[root@192 ~]# id user02
uid=2101(user02) gid=2101(user02) 组=2101(user02)
[root@192 ~]#
- 将用户追加到 is 组
语法:usermod -aG 组名 用户名
[root@192 ~]# usermod user02 -aG is
[root@192 ~]#
- 再次查看用户信息
[root@192 ~]# id user02
uid=2101(user02) gid=2101(user02) 组=2101(user02),2102(is)
[root@192 ~]#
- 将用户移除组(扩展)
[root@192 ~]# gpasswd -d user02 is
正在将用户“user02”从“is”组中删除
[root@192 ~]#
2.2 用户组
2.2.1 操作
- 创建一个 ir 组
创建一个 ir 组
查看
[root@192 ~]# tail -3 /etc/group
user02:x:2101:
is:x:2102:
ir:x:2103:
[root@192 ~]#
说明该组已经 创建,但和任何用户都没有关系。
- 创建组 net01,并指定 gid 1007
[root@192 ~]# groupadd net01 -g 1007
[root@192 ~]#
查看
[root@192 ~]# grep 'net01' /etc/group
net01:x:1007:
[root@192 ~]#
//查看/etc/group 中组 net01 信息
- 删除组
groupdel net01
查看
[root@192 ~]# tail -3 /etc/group
user02:x:2101:
is:x:2102:
ir:x:2103:
[root@192 ~]#
2.2.2 分类
- 基本组
- 随用户创建,自动创建的同名组
- 附加组
- 用户加入的其他组。
3.提权
3.1 永久提权 Switching users with su
[user01@localhost ~]$ id user01
uid=1003(user01) gid=1003(user01) 组=1003(user01)
[user01@localhost ~]$ whoami
user01
[alice@localhost ~]$ useradd u1
-bash: /usr/sbin/useradd: 权限不够
[alice@localhost ~]$ su - root
password:
[root@localhost ~]# useradd u1
成功
3.2 临时提权 Running commands as root with sudo
3.2.1 sudo 简介
-
简介 使普通用户,执行某些特权命令。
-
sudo 的工作原理
- 将当前用户切换到超级用户下
- 然后以超级用户身份执行命令,执行完成后,直接退回到当前用户。
- 具体工作过程如下:
- 当用户执行 sudo 时,系统会主动寻找/etc/sudoers 文件,判断该用户是否有执行 sudo 的权限
- -->确认用户具有可执行 sudo 的权限后,让用户输入用户自己的密码确认
- -->若密码输入成功,则开始执行 sudo 后续的命令
3.2.2 sudo 配置文件语法
- 语法:
user MACHINE=COMMANDS - 用户 登录的主机=(可以变换的身份)可以执行的命令
- 找到 root ALL=(ALL) ALL 这一行,在其下新增新的为你的用户提权的语句,其格式如下:
- 用户名或组名 机器=(表示以谁的身份执行)命令
- 以 root ALL=(ALL) ALL 这一行讲解一下,如下:
- root 表示用户名,如果是用户组,加百分号,这样写:%组名
- ALL 表示允许登录的主机,ALL 就表示允许任意主机
- (ALL)表示以谁的身份执行,ALL 表示 root 身份
- ALL 表示当前用户可以执行的命令,多个命令需要使用英文道号分割
- 找到 root ALL=(ALL) ALL 这一行,在其下新增新的为你的用户提权的语句,其格式如下:
zhangsan ALL=(ALL) NOPASSWD: /usr/sbin/reboot,/usr/sbin/useradd,/usr/sbin/userdel
这里加了一个 NOPASSWD: 表示提权执行命令时不需要要输入用户密码,默认不加是需要输如用户密码的
3.2.3 目标
这里加了一个 NOPASSWD: 表示提权执行命令时不需要要输入用户密码,默认不加是需要输如用户密码的
3.2.4 示例 1
3.2.4.1 超管编辑授权信息
- 以 root 身份,授权普通用户 zhangsan
- 系统的授权文件
[root@localhost ~]# vim /etc/sudoers
- 这里加了一个 NOPASSWD: 表示提权执行命令时不需要要输入用户密码,默认不加是需要输如用户密码的
zhangsan ALL=(ALL) NOPASSWD: /usr/sbin/reboot,/usr/sbin/useradd,/usr/sbin/userdel
- 查看当前特殊权限
[root@localhost ~]# sudo -l
3.2.4.2 创建 zhangsan 用户账号
创建 zhangsan 账号
[root@localhost ~]# useradd zhangsan
3.2.4.3 切换用户登录
- 用户需要密码
# passwd zhangsan - 切换用户 zhangsan 登陆
该用户一定要注销后登陆,否则会有缓存不生效
3.2.4.4 使用 sudo 提权
[zhangsan@localhost ~]$ useradd gougou10
-bash: /usr/sbin/useradd: 权限不够
[zhangsan@localhost ~]$ sudo useradd gougou10
[zhangsan@localhost ~]$ id gougou10
uid=1002(gougou10) gid=1002(gougou10) 组=1002(gougou10)