在Linux服务器上如何配置用户的sudo权限,教你配置如何让用户只能读写文件、上传文件、下载文件,但是不能删除文件

最近公司的中间件服务器因为同事的误操作,导致系统硬盘分区表丢失,系统直接挂掉了,好在最后恢复了,恢复后,老大有一个需求,想对中间件服务器做一下权限限制,之前大家都是以 admin 用户登陆的,它可以使用 root 用户的所有权限,但是现在我们想要让 admin 用户只能上传、下载文件,但是不能删除文件、重启系统,那么改怎么做呢?

思路:

刚看到这个需求,第一时间想到的是文件权限控制,但是仔细一想这样并不能满足需求,应为用户有了上传下载权限,必然就有删除文件的权限,于是我想到可以配置 sudo ,禁止 admin 用户执行 rm 命令就可以了,有了思路就开始测试一下。

1. sudo 权限配置

首先我们看一下如何给普通用户配置 sudo 权限,在Linux 操作系统的 /etc 目录有一个 sudoers 文件,在这个文件中我们可以配置让某些用户可以拥有 sudo 权限,也可以配置该用户可以以 那个用户、用户组的身份来执行命令,我们来看一下怎么配置:

(1)首先我们要给 /etc/sudoers 文件加写权限,默认是400权限。

[root@random etc]# chmod u+w /etc/sudoers

(2)配置 sudo 权限

在 sudoers 文件中你可以这样配置(youuser表示你要配置的用户名):

youuser            ALL=(ALL)                ALL
%youuser           ALL=(ALL)                ALL
youuser            ALL=(ALL)                NOPASSWD: ALL
%youuser           ALL=(ALL)                NOPASSWD: ALL

第一行:允许用户youuser执行sudo命令(需要输入密码).

第二行:允许用户组youuser里面的用户执行sudo命令(需要输入密码).

第三行:允许用户youuser执行sudo命令,并且在执行的时候不输入密码.

第四行:允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码.

我们可以看到配置项格式为:

授权用户/组 主机  =[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...
字段1      字段2  =[(字段3)] [字段4] 字段5

各字段含义如下:

  • 字段 1

    不以%号开头的表示"将要授权的用户" 如:root
    以%号开头的表示"将要授权的组" 如:%wheel
    
  • 字段 2

    ALL表示所有; 如果该字段不为ALL,表示授权用户只能在某些机器上登录本服务器来执行sudo命令
    如:random mycomputer=/usr/sbin/reboot,/usr/sbin/shutdown
    表示: 普通用户random在主机(或主机组)mycomputer上, 可以通过sudo执行reboot和shutdown两个命令
    
  • 字段 3

    如果省略, 相当于(root:root),表示可以通过sudo提权到root; 如果为(ALL)或者(ALL:ALL), 表示能够提权到(任意用户:任意用户组)。
    注意:如果没省略,必须使用( )双括号包含起来
    
  • 字段 4

    可能取值是NOPASSWD:。请注意NOPASSWD后面带有冒号:。表示执行sudo时可以不需要输入密码
    eg:lucy ALL=(ALL) NOPASSWD: /bin/useradd
    表示: 普通用户lucy可以在任何主机上, 通过sudo执行/bin/useradd命令, 并且不需要输入密码
    
  • 字段 5

    逗号分开一系列命令或者ALL表示允许所有操作
    注意:命令必须使用绝对路径
    命令的绝对路径可通过which指令查看到
    我们也可以通过在命令前面加 "!" 的方式进行用户执行该命令。
    

重点在第五个字段的最后一句话,我们可以禁止用户执行 rm 命令,因此配置如下(random是我的测试用户):

random  ALL=(ALL)       ALL,!/usr/bin/rm

保存文件后,将他的权限恢复400:

[root@random etc]# chmod u-w /etc/sudoers
2. 修改 rm 命令权限

将 rm 命令的权限改为 700:

[root@random etc]# chmod 700 /usr/bin/rm

可能大家会疑惑,为什么还要该 rm 命令的权限?

我们看一下 rm 命令默认的权限:

[root@random ~]# ll /usr/bin/rm
-rwxrwxrwx. 1 root root 62864 Nov  6  2016 /usr/bin/rm

我们可以看到所有用户都有这个命令的执行权限,因此用户根本不需要 sudo 就可以使用 rm 命令删 “根” 了,我们配置的 sudo 权限根本派不上用场,因此我们将 rm 命令的权限改为 700,这样用户要执行 rm 命令就必须加 sudo,但是 rm 命令被我们禁止执行了,所以服务器上面的所有文件他都不能删除了。

3. 测试一下
# 切换到 random 用户
[root@random etc]# su - random
Last login: Fri Sep  4 13:26:06 CST 2020 on pts/0

# 创建 file1 文件
[random@random ~]$ touch file1

# 删除文件,我们可以看到没有权限执行 rm 命令
[random@random ~]$ rm file1
-bash: /bin/rm: Permission denied

# 加 sudo 执行 rm 命令,我们可以看到不允许执行
[random@random ~]$ sudo rm file1
[sudo] password for random:
Sorry, user random is not allowed to execute '/bin/rm file1' as root on random.
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值