六、用户和权限的管理

6.1 用户基础操作

6.1.1 用户基础概念

linux用户的分为三类的

第一类:管理员

  • uid = 0 用户
  • 默认root的uid是0,所以root是管理员
  • 系统默认就创建的
  • 权限非常高,可以执行任意的操作

第二类:系统用户

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

第三类:普通用户

  • uid > 500
  • 普通用户都是在系统创建完成后,新创建的用户
  • 普通用户权限非常低,通常只能在自己的家目录下进行操作

家目录

家目录就是一个文件夹

第一类:管理员就是root,root的家目录是/root

第二类:系统用户没有家目录

第三类:普通用户的家目录在/home,和用户同名的目录是家目录,例如:

  • tom的家目录是/home/tom
  • jerry的家目录/home/jerry

6.1.2 相关的配置文件

/etc/passwd
/etc/shadow
/etc/group
/set/skel

 /etc/passwd文件内容说明

[root@localhost bob]# cat /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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
这个文件中,每行是一个用户
每行信息都是用冒号分割的七段
第一段:用户名
第二段:密码或者密码占位符
第三段:是用户的uid
第四段:是用户的gid - gid就是用户所在的组的id
第五段:是用户的描述信息 - 可以没有
第六段:用户的家目录
第七段:用户的shell类型 - shell类型决定用户是否可以登录系统、
  • 可以登录系统的shell类型:/bin/bash 和 /bin/sh

 /etc/shadow文件内容说明

文件中存储密码
root:$6$okQwHhDlIacvHetw$QyPhGs8aTeY1d5oSoz5N0::0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
lp:*:18353:0:99999:7:::

/etc/group文件

记录用户组

 6.1.3 相关的命令

useradd
userdel
passwd
groupadd
groupdel
id
su

 查看指定用户是否存在

[root@localhost bob]# id tom
uid=0(root) gid=0(root) groups=0(root)

[root@localhost bob]# id tom99
id: tom99: no such user
新建用户
useradd [选项] 用户名
-o:通常和-u一块使用,实现uid的复用
-u X:指定用户的uid
-g X:指定用户的gid
-s /bin/bash:指定用户的shell类型
-d /home/aaaa:指定用户的家目录
-r:创建一个系统用户
-M:不创建用户家目录

 删除用户

userdel [选项] 用户名

-r:删除用户的时候,将用户的家目录一块删除

修改密码操作

 修改自己的密码【所有用户都可以】

passwd

修改别人的密码【只有root可以修改其他用户的密码】

passwd 用户名

创建用户组

groupadd gp001
groupdel gp001

 案例:创建一个组gp002,新建一个用户tu111,将这个用户加入到gp002这个组

groupadd gp002
usreadd tu111

6.2 权限基础操作

6.2.1 权限基础概念

权限的类别

r(4):读权限
w(2):写权限
x(1):执行权限
-(0):无任何权限

 权限的对象

u:属主用户
g:属组用户:
o:其他用户:
a:全部用户

 控制权限  

+:在原来的权限基础上,增加新的权限
-:在原来的权限基础上,减掉某个授权
=:直接设置最终权限

 文件的权限可以通用ls -l进行查看

[root@localhost bob]# ls -l
-rw-r--r-- 1 bob bob 0 May 3 10:59 aaa.txt
权限位一共是十位
-rw-r--r-
第一位:表示的是文件的类型
-:表示这个文件是一般文件
d:表示这个文件是目录文件
第二位-第四位:表示的是文件的属主具有的权限
第五位-第七位:表示的是文件的属组用户具有权限
第八位-第十位:表示的是文件的其他用户具有权限

 案例:

-rwxr-xrw-
-r----x---

6.2.2 权限管理命令

chmod
修改权限
格式:
chmod [选项] 权限 文件

 选型

-R:递归修改目录和目录下的子文件的权限
文件的初始权限
-rw-r--r-- 1 bob bob 0 May 3 10:59 aaa.txt
案例1:给属组用户添加上写权限
chmod g+w 1.txt
案例2:给属主用户去掉写权限
chmod u-w 1.txt
案例3:给其他用户添加上读和执行权限
chmod o+rx 2.txt
案例4:将属主的权限设置为可读可写可执行
chmod u+rwx 2.txt
案例5:将属主的权限设置为可写
chmod u=w 2.txt
案例6:将属组的权限设置为没有任何权限
chmod g= 2.txt
案例7:将所有用户读权限都去掉
chmod a= 4.txt
另一种写法
chmod ugo= 4.txt
案例8:给所有用户都添加上写权限
chmod ugo+w 4.txt
另一种写法
chmod a+w 4.txt
案例9:将所有用户权限都设置为可读可执行
chmod ugo=rx 4.txt
另一种写法
chmod a=w 4.txt
用数值方式表示文件的权限
-rw-r--r-- 644
-r--rw-r-- 464
--w-r--r-x 245
-rw----r-- 604
--w--w--w- 222
-rwx-----x 701
-rwxrwxrwx 777
---------- 000
[root@localhost bob]# chmod 640 aaa.txt

[root@localhost bob]# ls aaa.txt -l
-rw-r----- 1 bob bob 0 May 3 10:59 aaa.txt
chown
修改文件的属主和属组
格式:
chown [选项] 属主:属组 文件名
选型
-R:递归修改目录和目录下的子文件的权限
案例:
  1. 创建一个用户tuser1
  2. 创建一个gp001
  3. 创建一个文件
  4. 将文件的属主修改为tuser1
  5. 将文件的属组修改为gp001

6.2.3 案例

6.3 特殊权限

suid(4):任何用户执行程序的时候,都是以文件的属主的身份来运行
sgid(2):任何用户执行程序的时候,都是以文件的属组的身份来运行
sticky(1)

设置suid的方法

chmod u+s 文件
chmod u-s 文件

 6.4 用户授权

背景:在实际场景中,用户登录系统的时候,都是用普通用户登录,因为权限很低,无法完成日常工 作,因此需要对普通用户进行授权

 方法有两种

方法1:su
方法2:sudo

 su命令

可以实现用户身份的切换
存在两个问题
  • 1:无法控制控制用户可以执行的命令
  • 2:会导致root泄露

 sudo命令

sudo可以为用户进行授权,可以明确指定用户可以进行的操作有哪些

 visudo打开sudo的配置文件,对用户进行授权

jerry ALL=(root) /sbin/useradd,/usr/bin/touch
jerry是用户名
ALL=(root) 授权用户可以以root身份去执行命令
/sbin/useradd 可以以root身份执行的命令列表

 在普通用户的会话中可以查看授权信息

sudo -l
  • 需要输入自己的密码
  • 密码有效期是5分钟

 6.5 拓展内容

6.5.1 手动生成密码

格式:

openssl passwd -1 -salt 'suiji' 123
  • 可以将这个密码直接写在/etc/passwd中的密码占位符的位置就可以使用了
也可以这样执行
[root@zuiyoujie ~]# useradd aaa -p `openssl passwd -1 -salt 'suiji' aaa`
[root@zuiyoujie ~]# useradd bbb -p $(openssl passwd -1 -salt 'suiji' bbb)

6.5.2 手动创建用户

1. /etc/passwd写一行
2. 创建家目录 - 复制 /etc/skel - 修改目录的属主和属组
3. /etc/shadow写一行
4. /etc/group写一行

6.5.3 几个命令

who
whoami
last
lastb
w

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地址

 whomai命令

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

last命令

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

 lastb命令

作用:记录和现实每个用户登录失败的信息。登录失败一次,这里就会记录一次。
案例:统计每个用户的失败次数
[root@localhost ~]# lastb | awk -F " " '{print $1}' | sort | uniq -c
1
1 bob02
1 btmp
5 root

 w命令

作用:显示每个会话,已经会话中正在执行的命令
[root@localhost ~]# w
20:37:34 up 32 min, 3 users, load average: 0.00, 0.01, 0.05
USER     TTY     FROM         LOGIN@    IDLE      JCPU    PCPU     WHAT
root     tty1                 20:22     15:34     0.00s   0.00s    -bash
root     pts/0   172.16.100.1 20:35     6.00s     0.00s   0.00s      w
root     pts/1   172.16.100.1 20:36     22.00s    0.90s   0.00s    sleep 1

 lastlog命令

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

 6.5.4 日志文件

1)/var/log/messages:系统日志文件【重启网络、重启ssh】
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-dispatcher: req:1 'dhcp4-change' [ens36]: start
running ordered scripts...
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

 3)apache或者是nginx的日志,例如access_log error_log

192.168.1.8 - - [24/Jan/2024:07:09:44 -0500] "GET / HTTP/1.1" 403 4897 "-"
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/120.0.0.0 Safari/537.36"
192.168.1.8 - - [24/Jan/2024:07:09:44 -0500] "GET /noindex/css/bootstrap.min.css
HTTP/1.1" 200 19341 "http://192.168.1.109/" "Mozilla/5.0 (Windows NT 10.0; Win64;
x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
192.168.1.8 - - [24/Jan/2024:07:09:44 -0500] "GET /noindex/css/open-sans.css
HTTP/1.1" 200 5081 "http://192.168.1.109/" "Mozilla/5.0 (Windows NT 10.0; Win64;
x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
192.168.1.8 - - [24/Jan/2024:07:09:44 -0500] "GET /images/apache_pb.gif HTTP/1.1"
200 2326 "http://192.168.1.109/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
查看日志文件内容变化/分析
tail -f 日志文件
日志文件的滚动
防止日志文件变的过大
日志文件的滚动
  • 方法1:基于时间
  • 方法2:基于空间

6.6 find命令

文件查找的命令
  • find:查找速度慢,但是非常精准
  • 根据文件名进行查找
  • locate:查询速度快,但是准确度低
  • 安装组件:mlocate
  • locate是维护了一个系统的数据库,在数据库中记录了每个文件的文件名和路径
  • 数据库是每天定时自动更新。

 find的格式

find 搜索路径 查找条件 动作
搜索路径
常用写法:
  • 1:/ 查找整个linux
  • 2:./ 查看当前位置及其子目录
  • 3:指定路径,例如:/home/aaa/bbb
查找条件
  • 1:根据文件名查找 -name
  • 2:根据文件类型查找 -type f -type d
  • 3:根据文件的权限查找 -perm u=s -perm g=s
  • 4:根据文件的时间戳查找 -mtime
动作
  • --print:输出查找结果
  • --exec 命令 \; 在find执行结束后,执行一个命令

案例1:在文件系统中,找a.txt文件t

[root@localhost yum.repos.d]# find / -name "a.txt" -print
/etc/a.txt
/home/a.txt
/a.txt
案例2:在文件系统中,找后缀是.txt的文件
[root@localhost yum.repos.d]# find / -name "*.txt" -print 1
案例3:在home下找后缀是txt的文件
[root@localhost yum.repos.d]# find /home -name "*.txt" -prin
案例4:在home下,找后缀txt的文件,并且文件类型是一般文件
[root@localhost home]# find /home -name "*.txt" -type f
/home/aaa.txt
案例5:在系统中,找具有suid的文件的
[root@localhost home]# find / -perm -u=s 2>/dev/null
根据文件的时间戳查找文件的内容
-mtime [+-]n:文件的创建(单位是天)
-ctime [+-]n:文件修改时间(单位是天)
-atime [+-]n:文件的访问时间(单位是天)
说明
    n:单位是天
    -mtime 5:表示5天之前的那一天所创建的文件
    -n:
    -mtime -5:表示在5天之内所创建的文件
    +n:
    -mtime +5:表示在5天之前所创建的文件
-mmin [+-]n: 单位是分钟
-cmin [+-]n: 单位是分钟
-amin [+-]n: 单位是分钟
   例子:找出tmp下上次访问时间在7天之前的文件
   # find /tmp -atime +7
find执行命令
案例:将所有后缀是txt的文件,都复制到tmp下
[root@localhost home]# find / -name "*.txt" -exec cp -a {} /tmp \;
案例:将/home下后缀是txt的文件删除
[root@localhost home]# find /home/ -name "*txt" -exec rm -rf {} \;
find提权案例
前提:给用户做sudo授权,授权可以执行find命令
提权格式:
find /xxx -exec /bin/bash \;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值