sudo、权限管理

一、Linux中常见的七种文件类型:

1
2
3
4
5
6
7
- 普通文件(文本文件,二进制文件,压缩文件,电影,图片。。。)
d 目录文件(蓝色)
b 设备文件(块设备)存储设备硬盘,U盘 /dev/sda, /dev/sda1
c 设备文件(字符设备)打印机,终端 /dev/tty1
l 链接文件(淡蓝色)
s 套接字文件
p 管道文件

二、文件权限部分

1、基本权限UGO

复制代码
[root@localhost ~]# chmod 7777 file7(默认文件权限为644,无执行权限)
[root@localhost ~]# ll -d /root/file7
-rwsrwsrwt. 1 root root 0 7月  23 08:28 /root/file7

[root@localhost tmp]# chmod a=rwx file1 //所有人等于读写执行
[root@localhost tmp]# chmod a=- file1 //所有人没有权限
[root@localhost tmp]# chmod ug=rw,o=r file1 //属主属组等于读写,其他人只读
[root@localhost tmp]# ll file1 //以长模式方式查看文件权限
-rw-rw-r-- 1 alice it 17 10-25 16:45 file1 //显示的结果

[root@localhost tmp]# chmod a=rwx file1 //所有人等于读写执行
[root@localhost tmp]# chmod a=- file1 //所有人没有权限
[root@localhost tmp]# chmod ug=rw,o=r file1 //属主属组等于读写,其他人只读
[root@localhost tmp]# ll file1 //以长模式方式查看文件权限
-rw-rw-r-- 1 alice it 17 10-25 16:45 file1 //显示的结果
复制代码

-      //表普通文件

rwx  //读、写、执行(数字表示4、2、1)

a所有人,= 表覆盖

s是此处含有x权限,当去除x权限则为S。

s分为suid和sgid,suid可以为普通用户提权,sgid可以让组属性得以继承。

复制代码
[root@localhost ~]#chmod -x file7
[root@localhost ~]# ll -d /root/file7
-rwSrwSrwT. 1 root root 0 7月  23 08:28 /root/file7

[root@tianyun ~]# chmod u+s /usr/bin/cat

[alice@tianyun ~]$ cat /root/file1.txt(没有提权的普通用户是不允许进入/root)
复制代码

t类似s,有x权限时为小写,当去除x权限则为T

t为特殊权限sticky,设置t后,即使是777权限的文件夹(root创),不同普通用户在里面创的文件,互相之间不允许删除他人所创文件。

补充:

在Unix或Linux系统中,文件的删除权限实际上并不与文件本身的权限有关,而是与其父目录的权限有关。

 

  当执行 rm 命令来删除一个文件时,你是在修改文件所在的目录,因为你实际上是在删除目录中的一个条目。因此,只要你对那个目录有写权限和执行权限,你就可以删除其中的文件,无论那个文件的权限是什么。

 

2、基本权限 ACL

acl权限的理解:假如有一个test.txt文件,只有属主和属组有rwx权限,其他用户没权限。有一个用户既不在该用户属组也不是属主,想要访问test.txt文件,就得通过acl权限

。即acl权限可以针对单个用户。

设置:

[root@tianyun ~]# touch /home/test.txt
[root@tianyun ~]# ll /home/test.txt
-rw-r--r-- 1 root root 0 10-26 13:59 /home/test.txt
[root@tianyun ~]# setfacl -m u:alice:rw /home/test.txt //增加用户alice权限
[root@tianyun ~]# setfacl -m u:jack:- /home/test.txt //增加用户jack权限
[root@tianyun ~]# setfacl -m o::rw /home/test.txt

查看:

复制代码
[root@tianyun ~]# getfacl /home/test.txt//查看文件有哪些ACL权限。

如何删除一条acl,如何删除所有acl呢?
[root@tianyun ~]# ll /home/test.txt
[root@tianyun ~]# getfacl /home/test.txt
-rw-rw-r--+ 1 root root 0 10-26 13:59 /home/test.txt(+表示有acl权限)
[root@tianyun ~]# setfacl -m g:hr:r /home/test.txt
[root@tianyun ~]# setfacl -x g:hr /home/test.txt //删除组hr的acl权限
[root@tianyun ~]# setfacl -b /home/test.txt //删除所有acl权限

[root@tianyun ~]# getfacl file1 |setfacl --set-file=- file2 //复制file1的ACL权限给file2
复制代码

3、mask权限

acl权限中有个"mask"的选项,它就是ACL权限的最大权限,现在是rwx,当你设置某个用户或组的ACL权限时,要跟mask的权限“相与”之后产生的权限才是该用户的最终权限,也就是加入mask的最大权限是rx,但是你给st用户设置的是rwx权限,此时st用户它的权限只有rx的权限,因为与最大权限“相与”得出的结果就是rx。

4、特殊权限chattr:常用于锁定某个文件,拒绝修改。

设置:

[root@tianyun ~]# man chattr
[root@tianyun ~]# chattr +a file100             //只能追加
[root@tianyun ~]# chattr +i file200             //不能更改,重命名,删除
[root@tianyun ~]# chattr +A file300            //不能更改访问时间。

查看:

[root@tianyun ~]# lsattr file100 file200 file300
-----a-------e- file100
----i--------e- file200
-------A-----e- file300

还原:

[root@tianyun ~]# chattr -a file100
[root@tianyun ~]# chattr -i file200
[root@tianyun ~]# chattr -A file300

注意:chattr设置文件属性(权限),针对所有用户,包括root。

三、sudo提权

redhat系列

1、sudo 表示 “superuser do”。它允许已验证的用户以其他用户的身份来运行命令。其他用户可以是普通用户或者超级用户。然而,绝大部分时候我们用它来以提升的权限来运行命令。

2、sudo命令工作流程

  • sudo会读取和解析/etc/sudoers文件,查找调用的用户及权限
  • 提示调用该命令用户的密码,如果有NOPASSWD标志则跳过密码验证.
  • sudo会创建一个子进程,调用setuid来切换到目标用户
  • 最后会在子进程中执行给定的shell命令

3、配置格式

1
USER/GROUP HOST=(USER[:GROUP]) [NOPASSWD:] COMMANDS
  • USER/GROUP:表示要被授权的用户或组,如果是组要以%开头
  • HOST: 表示允许从哪些主机登录的用户运行sudo,ALL表示允许任何终端机器访问.
  • (USER[:GROUP]):表示使用 sudo 可切换的用户或者组,组可以不指定;ALL 表示可以切换到系统的所有用户.
  • NOPASSWD:如果指定,则该用户或者组使用sudo时就不用输入密码
  • COMMANDS:表示运行指定的命令,ALL表示允许指定任何命令

4、范例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
root授予wang账号权限
useadd wang
usermod -aG  docker  wang 
usermod -aG  wheel   wang
(-a|--append  ##把用户追加到某些组中,仅与-G选项一起使用,不影响已有的附加组)
 
# vim /etc/sudoers
root    ALL=(ALL)      ALL
wang    192.168.40.132=(root)  /bin/cat  /var/log/messages*,! /bin/cat  /var/log/messages*  *
(注意cat的路径,“,”和“!” !表示禁止)
 
# cd /etc/sudoers.d/   (检查子配置文件,可能冲突)
 
#su - wang
$ sudo cat /var/log/messages
[sudo] password for wang:
 
# 允许 users 用户组中的用户像 root 用户一样使用 mount、unmount、chrom 命令
%users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

执行多条命令

1
sudo -- bash -c 'pwd; hostname; whoami'

更快的提权方法

1
2
echo "{username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/{username}
sudo chmod 0440 /etc/sudoers.d/{username}

在 vim 里面使用 sudo 命令

1
:w !sudo tee %
  • 冒号 (? 表明我们处于 Vim 的退出模式
  • 感叹号 (!) 表明我们正在运行 shell 命令
  • sudo 和 tee 都是 shell 命令
  • 百分号 (%) 表明从当前行开始的所有行

 sudo !!:要以提升的特权重复执行最后一个命令

1
sudo !-2   ##执行倒数第二条命令

debian系列

1、terminal 命令行内输入 su 进入root账户

2、按照sudo apt-get install sudo

3、 adduser  zjz  sudo    #将我的用户名 yl 添加到sudo组内

4、vi /etc/sudoers 进入sudoers文件

1
2
3
在  %sudo ALL = (ALL:ALL) ALL 下面键入
zjz  ALL = (ALL:ALL) ALL 
op_admin        ALL=(ALL)       NOPASSWD: ALL

 

posted @   凡人半睁眼  阅读(1454)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示