Linux初学(二) VI&用户管理&文件权限

一、文本编辑工具 vi/vim

vim是vi的增强版,操作方式两个基本一致

vi/vim 是一个模式编辑器

        编辑模式

                移动光标操作:j 向下移动、k 向上移动、l 向右移动、h 向左移动

        替换操作

                修改单独某个字符:r 修改一个字符、R 进入替换模式、使用esc 退出替换模式

编辑模式 → 插入模式

编辑模式输入字母 i     a      o     I       A      O       都可进入插入模式

        i         在光标前插入内容

        a        在当前光标后输入内容

        o        开启新的一行输入内容

        I         在行首插入内容

        A         在行尾插入内容

        O        在光标当前行的上一行插入内容

编辑模式下的操作

dd:                删除光标所在的行【剪贴】

yy:                复制光标所在的行

p:                  将剪贴/复制的内容,粘贴到当前所在的行的下一行

P:                 将剪贴/复制的内容,粘贴到当前所在的行的上一行

/搜索的内容: 在 / 后面输入要搜索的内容,就可以直接开始搜索了

n:                  继续向下搜索

N:                  继续向上搜索

按 dd                删除一行

按 4dd              删除连续的四行

按 yy                复制一行

按 15yy            复制连续的十五行

末行模式下的操作

数字:              直接跳转到指定的行的行首

1                       就是跳转到第一行

500                   就是跳转到第五百行

$                       就是跳转到最后一行

set nu:            在每一行的前面,显示一个行号

set nonu:        取消每行前面的行号

nohl:               取消高亮

w:                   保存

q:                   退出

!:                    强制执行

wq:                保存退出

q!:                  强制退出

wq!:                  强制保存退出

特殊操作
  • 通过 vi 执行系统命令                                   :! command
  • 将命令执行结果写入到文件中                      :r ! command
  • 将其他文件的内容输入到当前文件当中        :r  /tmp/2.txt
  • 设置tab键缩进字符数量                                :set  tabstop=4
  • 复制指定内容到目标位置下                          :start,stop co dest          :3,5 co 7
  • 删除指定的内容                                            :start,stop d                    :3,5 d
  • 剪贴内容到目标位置                                     :start,stop p                    :3,5 m 9

vi/vim 编辑器的配置文件

/etc/vimrc        全局配置文件,对所有用户生效

~/.vimrc:        用户的单独配置文件,只对自己生效 对其他用户不生效【强烈建议使用这种方式修改vim的配置文件】

vim同时打开多个文件

:next 跳转到下一个文件

:prev 跳转到上一个文件

:first 跳转到第一个文件

:last 跳转到最后一个文件

同屏打开多个文件,切换文件之间的编辑操作         使用 ctrl + w  + w

vim -o         水平方向同屏显示多个文件

vim -O        垂直方向同屏显示多个文件

打开文件异常

警告信息
产生警告的原因
1. vi 打开文件后,写入了内容,但是这个文件被意外关闭了【例如 直接关闭终端】
2. 文件被意外关闭,会产生一个崩溃缓存文件,这个文件是一个隐藏文件,而且这个文件的后缀是 .swp
3. 就是由于这个崩溃缓存文件的存在,才导致每次打开文件的是有一个警告信息
解决方法
删除所有的崩溃缓存文件,就不再产生警告了

二、用户管理

2.1用户的类别

每个用户都有一个唯一编号,编号称为用户UID

linux有三类用户:

管理员用户

  1. 只有一个
  2. 名字:root
  3. 管理员uid是:0 【linux中,uid是0的用户,就是管理员】
  4. 家目录:/root
  5. 权限:最高
  6. 可以执行的操作:可以执行任意的操作

系统用户

  1. uid是 1-500
  2. 通常无法登录系统,而且也没有用户家目录
  3. 系统用户的作用是用来运行一个特定的程序

普通用户

  1. 可以有多个【你自己创建的用户,默认就是普通用户】
  2. 普通用户的名字是自定义的
  3. 普通用户的uid大于0
  4. 家目录:/home下和用户名同名的那个目录,就是用户的家目录【在创建用户的时候,会自动的创建用户家目录】
  5. 权限:非常低
  6. 可以执行的操作:普通用户,只能在自己的家目录和/tmp下执行操作

2.2相关的配置文件

/etc/passwd

/etc/shadow

/etc/group

/set/skel

/etc/passwd

这个文件中,存储的是当前系统中,所有的用户

这个文件中,每行是一个用户【文件有多少行,就有多少个用户】

这个文件的每一行,都是由:分割成的一段一段的

        第一段:用户名

        第二段:密码占位符【为了安全,将密码放到了另一个位置】

        第三段:用户uid 【管理员的uid是 0】

        第四段:用户gid 【用户所在的组的编号】

        第五段:这个是用户的描述信息,可以随便写,也可以空着

        第六段:用户家目录位置

        第七段:这个表示用户的shell类型

                      可以登录系统的shell类型:/bin/bash  和  /bin/sh

每新增一个用户,就会在这个文件中添加一行

每删除一个用户,这个文件就会自动删除相关的一行

/etc/shadow

这个文件中,存储的是用户的密码

/etc/group

记录用户组

/set/skel

用户家目录的来源

每创建一个用户,系统默认复制/set/skel到/home下,并改名为用户名

2.3相关命令

命令1:id

作用:查看用户是否存在

格式:id 用户名

结果:如果用户存在,就会显示用户id;如果用户不存在,就会提示无此用户

命令2:useradd

作用:新建用户

格式:useradd 用户名

选项:

          -c:添加用户描述信息

          -d:指定用户家目录的位置

          -g:创建用户的时候指定用户的gid

          -u:指定用户的uid,uid是唯一的

          -M:创建用户,但不创建家目录

          -p:创建用户的同时创建用户密码

          -s:创建用户并且指定用户的shell类型   默认是/bin/bash   /sbin/nologin

          -G:创建用户并且修改指定用户的附加组

命令3:usermod

作用:修改用户

格式:usermod 用户名

选项:

          -g:修改用户的基本组     用户修改了组id后,用户家目录下所有文件的组也随之变化,其他目录此用户创建的文件不发生变化

         -G:修改用户的附加组

          -u:修改用户的uid

          -l:修改用户名

          -d:修改用户的家目录,修改家目录后,需要将原有家目录的隐藏文件一并复制或者移动到新的家目录下

          -m:将原有家目录下的内容一并移动过去

          -L:锁定账户不能登录系统

          -s:修改shell类型

命令4:userdel

作用:删除用户

格式:userdel 用户名

选项:-r:删除用户并删除用户的家目录

命令5:passwd

作用:修改用户的密码

格式:passwd 用户名

选项:

          -S:查看密码信息

          -l:锁定用户密码

          -u:解锁用户密码

          -d:删除密码

注意:普通用户只能修改自己的密码,管理员可以修改所有用户的密码

命令6:groupadd

作用:新建用户组 【用户组其实就是多个用户的集合】

格式:groupadd 组名

选项:

          -g:设置一个组id

          -n:更改组的名字

命令7:groupdel

作用:删除组

格式:groupdel 组名

2.4用户切换

注意:

在日常工作中,平时登录系统的时候,为了安全,都是以普通用户身份来登录linux的

用普通用户身份登录,权限很低,很安全,但是由于权限太低,导致很多工作无法实现,那么这个时候,就必须要切换用户身份。

切换用户有两种方法

  • su
  • sudo
su切换

命令格式:

su  - 用户名

       -:继承环境变量

注意:

从root切换到其他用户,切换的时候不需要输入密码。

如果是从普通用户切换到root用户,或者是从普通用户切换到其他的普通用户,就必须输入密码。

切换到其他用户以后,如果想返回到之前的用户,可以执行名exit

优势:使用简单

缺点:root密码容易泄露、普通用户可指定的操作不可控

sudo切换

sudo的作用:给普通用户授权,使普通用户可以执行特定的操作权限,相较于su操作复杂

优势:

  1. 不需要拥有root密码
  2. 用户可执行的命令都是预先设置好的(用户不可以执行权限以外的操作)
  3. 可以记录每个用户所执行过的所有命令

sudo授权过程

实现让jack001可以用root身份去执行两个命令:touch和mkdir

实现让jack002可以用root身份执行所有命令

第对jack001和jack002进行授权【在root账号中进行操作】

visudo

打开sudo的配置文件,然后再文件的第100行下面添加一行内容

jack001    ALL=(root)       /usr/bin/touch,/usr/bin/mkdir

jack002    ALL=(root)       ALL

用户名   主机=切换的用户  可执行的命令

        用户名:普通用户的名称

        主机:可以在那个主机上执行特定的命令

                        ALL           任意主机

                        localhost   表示当前主机

                        hostname  表示使用具体的主机名  

                        x.x.x.x        表示使用IP地址来标识主机(192.168.240.252)

                        x.x.x.x/netmask        表示使用的是一个网段

        切换的用户:切换到指定的用户来执行后面的命令,一般情况都是切换到root用户

                        表达方式        (ALL)最常用的      (root)      空

        可执行的命令

                        格式:命令1,命令2.....    /usr/sbin/useradd

                                   /usr/sbin/*        可以使用通配符

                                   可执行命令不能使用命令名称,必须使用命令的绝对路径

注意:

  1. 使用visudo命令修改sudo配置文件,如果修改正确不给出提示,如果修改错误(配置文件有错误的情况下)给出提示,并阻止保存
  2. 使用sudo命令,提示输入当前用户密码,但是再次使用相同命令则不需要使用密码。第一次输入的密码回生成一个秘钥保存起来,有效期5分钟,在5分钟内再次执行这个歌命令,则不需要使用密码

授权格式扩展:

        zz2          ALL(root)         /usr/bin/passwd

        zz2          ALL(root)         ALL

        zz2          ALL=                /usr/bin/passwd               

        zz2          ALL=(ALL)    /usr/bin/passwd                

        zz2          ALL=(ALL)       /usr/bin/*                          *表示可以执行/usr/bin/下的所以命令

        %zz2       ALL=(root)       /usr/bin/passwd                zz2用户组中的所有用户都可以执行passwd命令

        zz2          ALL=(root)        NOPASSWD:/usr/bin/passwd         zz2用户使用passwd命令的时候可以不输入密码

        %zz2        ALL=                NOPASSWD:ALL

        %zz2        ALL=                /usr/sbin/*,!/usr/sbin/usermod        zz2用户组中所有的用户可以执行/usr/sbin下除usermod以外的命令

         
案例 :zz2用户可以修改其他用户的密码 但是不能修改root用户的密码
   zz2     ALL=(root) /usr/sbin/tcpdump,NOPASSWD: /usr/bin/passwd,!/usr/bin/passwd root
 

sudo实际使用:给普通用户用vi执行系统用户的文件,这种情况就存在提权

sudo【选项】

                -l:查看当前用户的授权信息

                -k:使当前主机的sudo秘钥立刻生效

visudo        -c        检查sudo配置文件是否语法错误

三、文件的权限

3.1 文件的属性

-                rw-r--r--.  1           alex             gp001         60          3月   17   10:59        abc

文件类型    9个权限位    属主用户名   属组的名字   文件大小   创建时间/编辑时间  文件名

文件类型:

  • -:表示是文本文件
  • d:表示是目录

文件大小:

默认显示的文件单位是 字节

如果想显示单位        可以用 ls -lh 查看

9个权限位

9个权限位,是为了分为三组

  • 前三位:是属主用户具有的权限
  • 中三位:是属组用户具有的权限
  • 后三位:是其他用户具有的权限

表示权限的时候,顺序是

读        写        执行

如果有权限就显示字母,如果没有权限就显示  -

3.2 权限的类别

  1. 读权限
  2. 写权限
  3. 执行权限
  4. 无权限

字母表示权限

  • r 读权限
  • w 写权限
  • x 执行权限
  • - 表示无权限

控制权限的方法

+ 在原有权限的基础上进行添加,添加权限

- 在原有权限的基础上进行删减,取出权限

= 直接设置最终的权限

权限的对象

  • u:文件的属主用户:文件的主人、文件属于谁
  • g:文件的属组用户:文件属于哪个组的用户
  • o:文件的其他用户
  • a:表示以上三种所有用户

示例:

u-x 给属主用户去除掉执行权限
a+r 给所有用户添加上读权限
o=rw 将其他用户的权限设置为读和写
g+rx 给属组用户设置上读和执行权限
u-wx 给属主用户去除掉写和执行权限
g=rwx 将属组用户的权限设置为可读可写可执行
a= 将所有用户的权限都去去掉
修改文件权限的命令
chmod 操作内容 文件名

 权限的进制表示方式

r        w        x

4        2        1

各种权限的表示 

rwx          数值是表示是 7
rw-           数值是表示是 6
r-x            数值是表示是 5
r--            数值是表示是 4
-wx          数值是表示是 3
-w-           数值是表示是 2
--x           数值是表示是 1
---            数值是表示是 0
案例:
777 权限表示 rwxrwxrwx
751 权限表示 rwxr-x--x
000 权限表示 ---------
111 权限表示 --x--x--x
222 权限表示 -w--w--w-

案例:修改a.txt的权限,将属主的权限设置为可读可写可执行,属组的权限设置为可读可执行,其他用户的权限设置为可读

方法 1
chmod u=rwx a.txt
chmod g=rx a.txt
chmod o=r a.txt
方法 2
chmod u=rwx,g=rx,o=r a.txt
方法 3
chmod 754 a.txt

3.3 两个命令 

chmod命令

作用:修改文件的权限

格式:chmod 【选项】  权限    文件名

选项:

          -R:用于设置目录及目录下的子文件的权限

chown命令

作用:修改文件的属主和文件的属组

格式:

          chown 【选项】   属主   文件名                 仅仅修改文件的属主

          chown 【选项】   :属组   文件名                仅仅修改文件的属组

          chown 【选项】   属主:属组   文件名         修改文件的属主和属组

选项:

          -R:用于修改目录及目录中的子文件的属主和属组

3.4 特殊权限

SUID:

是对程序进行设置,让程序以程序的属主来运行

案例:

第一步:查看cat命令,

        which cat

第二步:查看cat命令的详细信息,以及shadow文件的详细信息

        ls -l /usr/bin/cat

        ls -l /etc/shadow

第三步:用户zz2

        用户是否可以执行cat命令?                 可以

        是否可以用cat来查看shadow文件        不可以

        看此时的cat进程的属主是否有访问shadow的权限

        此时cat程序是zz2用户发起的,那么cat进程属主就是zz2

        但是zz2用户对shadow文件文件没有读权限,所以无法查看该文件

注意:谁发起的进程,进程的属主和属组就是谁

设置SUID的方式

chmod u+s  /usr/bin/cat

注意:如果文件的属主拥有执行权限,加上SUID之后就变成s;如果没有执行权限加上SUID之后变成S

设置特殊权限的数字表达方式

SUID:4

SGID:2

Sticky:1

案例:

1、给所有用户加上s权限

chmod 7651 a.txt          7是给所有用户加上S权限,651是给属主,属组,其他用户设置权限

                                        第一个7表示的是特殊权限位

四、扩展内容

4.1 手动生成密码

格式:openssl passwd -1 -salt 'suiji' 123

                   openssl:是一个开源的软件库,提供了各种加密算法和工具

                   passwd:是openssl的一个子命令,用于生成加密后的密码

                  -1:表示使用MD5算法进行加密

                   -salt ‘suiji’:表示使用随机盐值(salt)进行加密。这里的盐值为‘随机’

                   123:表示要加密的原始密码为123

这段代码的意思就是:使用openssl工具,通过MD5算法和随机盐值'suiji'对原始密码123进行加密,生成加密后的算法。

可以将生成的密码直接写在/etc/passwd中的密码占位符的位置就可以使用了

也可以这样写

创建用户的同时创建密码
格式1:useradd aaa -p `openssl passwd -1 -salt 'suiji' aaa`

格式2:useradd bbb -p $(openssl passwd -1 -salt 'suiji' bbb)
        ``:反引号的作用是将命令替换成命令的执行结果

        $():也是将命令替换成命令的执行的结果

4.2 手动创建用户

  1. /etc/passwd 在文件的最后一行添加一行
  2. /etc/group 写一行你添加的用户id
  3. 创建家目录 - 复制 /etc/skel - 修改家目录的属主和属组
  4. /etc/shadow 写一行【也可以直接在/etc/passwd的密码占位符写】

案例:

  1. vi /etc/passwd
    1. 在最后一行添加一个新用户 例如:joker:x:4017:4017::/home/joker:/bin/bash
    2. 注意:用户uid是唯一的,别忘了修改用户家目录
  2. vi /etc/group 
    1. 在最后一行添加一个组id 例如:joker:x:4017
  3. cp -a /etc/skel /home/joker
  4. chown -R joker:joker /home/joker
  5. vi /etc/shadow
    1. 在最后一行给joker添加一个密码 例如:joker:$1$lisjf$DGxx2hGOM7FxCnQ8yEfpy.:19802:0:99999:7:::
    2. 第二段是加密之后的密码,用的是openssl passwd -1 -salt 'saf' 123 生成的
  6. 验证是否登录成功

4.3 几个命令

who

whoami

last

lastb

w

lastlog

4.3.1 who命令

作用:检查当前linux的链接会话有几个
 

[root@localhost ~]# who
root         tty1           2024-03-19 20:22
root         pts/0         2024-03-19 20:06         (172.16.100.1)
root         pts/1         2024-03-19 20:10         (172.16.100.1)
root         pts/2         2024-03-19 20:21         (172.16.100.1)
root         pts/3         2024-03-19 20:21         (172.16.100.1)
bob02     pts/4         2024-03-19 20:21         (172.16.100.1)

第一列:链接linux的用户名
第二列:链接linux的类型
  • tty:表示是在linux中直接进行的
  • pts/0..1:表示是远程连接上来的

第三列:链接的时间

第四列:客户端的ip地址

4.3.2 whoami命令

作用:查看当前会话的用户名

4.3.3 last命令

作用:显示每个用户的登录时间,已经登录的状态

4.3.4 lastb命令

作用:记录现实中每个用户登录失败的信息。每登录失败一次,这里就会记录一次。

案例:

1、统计每个用户的失败次数

        lastb | awk -F " " '{print $1}' | sort | uniq -c

        sort:排序

        uniq -c:统计

4.3.5 w命令

作用:显示每个会话,已经登录的会话正在执行的命令

4.3.6 lastlog命令

作用:显示用户的上一次登录时间等信息

4.4 日志文件

4.4.1 /var/log/messages

系统的日志文件
 

Mar 19 20:44:50 localhost systemd: Started OpenSSH server daemon.
Mar 19 20:44:56 localhost dhclient[768]: DHCPREQUEST on ens36 to 192.168.13.254
port 67 (xid=0x64360728)
Mar 19 20:44:56 localhost dhclient[768]: DHCPACK from 192.168.13.254
(xid=0x64360728)
Mar 19 20:44:56 localhost NetworkManager[679]: <info> [1710895496.8349] dhcp4
(ens36): address 192.168.13.196
Mar 19 20:44:56 localhost NetworkManager[679]: <info> [1710895496.8349] dhcp4
(ens36): plen 24 (255.255.255.0)
Mar 19 20:44:56 localhost NetworkManager[679]: <info> [1710895496.8349] dhcp4
(ens36): gateway 192.168.13.2
Mar 19 20:44:56 localhost NetworkManager[679]: <info> [1710895496.8349] dhcp4
(ens36): lease time 1800
Mar 19 20:44:56 localhost NetworkManager[679]: <info> [1710895496.8349] dhcp4
(ens36): nameserver '192.168.13.2'
Mar 19 20:44:56 localhost dbus[670]: [system] Successfully activated service
'org.freedesktop.nm_dispatcher'
Mar 19 20:44:56 localhost systemd: Started Network Manager Script Dispatcher
Service.
Mar 19 20:44:56 localhost nm-dispatcher: req:1 'dhcp4-change' [ens36]: new
request (3 scripts)
Mar 19 20:44:56 localhost nm
4.4.2 /var/log/secure

客户端远程登录linux的ssh的日志文件
【下面是使用一个不存在的账号密码进行登录产生的日志文件】


 

Mar 19 20:48:43 localhost sshd[2956]: Invalid user aaa from 172.16.100.1 port
51705
Mar 19 20:48:43 localhost sshd[2956]: input_userauth_request: invalid user aaa
[preauth]
Mar 19 20:49:33 localhost sshd[2956]: pam_unix(sshd:auth): check pass; user
unknown
Mar 19 20:49:33 localhost sshd[2956]: pam_unix(sshd:auth): authentication
failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=172.16.100.1
4.4.3 apache或者是nginx的日志,例如access_log、error_log
4.4.4 查看日志文件内容变化/分析

tail -f 日志文件

4.4.5 日志文件的滚动

作用:防止日志文件变得过大

日志文件的滚动

  • 方法一:基于时间
  • 方法二:基于空间

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ys52IT

你的鼓励将是我创作的最大动力你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值