linux下sudo显示sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set

转载:https://blog.csdn.net/mountzf/article/details/52033348

 

linux中一些特殊的权限(setuid/setgid/sticky)

问题描述

今天在测试文件系统的时候,发现新创建的文件系统不能使用sudo命令,具体表现如下:

sudo su
sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set
  • 1
  • 2

在网上查了一下都说是要在超级用户权限下执行如下两个命令:

chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
  • 1
  • 2

相对应的就是上述两个错误:sudo的用户属组要属于uid 0,即root用户;同时sudo要设置setuid位。我首先查询了一下我系统中sudo的信息:

ls /usr/bin/sudo
-rwxr-xr-x 1 root root 155008 Aug 28  2015 /usr/bin/sudo
  • 1
  • 2

已经是输入root用户组了,所以按照执行sudo时的错误提示,应该是要设置setuid位。执行命令chmod 4755 /usr/bin/sudo或者chmod u+s /usr/bin/sudo,再查看一下sudo的信息:

ls /usr/bin/sudo
-rwsr-xr-x 1 root root 155008 Aug 28  2015 /usr/bin/sudo
  • 1
  • 2

发现有一位”x”已经变成了”s”。这时我想起了在学习The Linux Command Line的时候,提到了一些特殊的用户权限,其中就包括设置setuid位。翻出来看看,学而时习之嘛~

特殊权限

虽然常见的八进制权限掩码都是用三位数表示的,但确切地说,它是用四位数表示的,因为除了读、写和执行权限以外,还有一些其他较少用到的权限设置,其中就涉及到上面的setgid设置。

setuid

其中之一就是setuid位,八进制表示为4000,当把它应用到一个可执行文件时,有效用户ID将从实际用户ID(实际运行该程序的用户)设置成该程序所有者的ID,大多数情况下,该权限设置通常应用于一些由超级用户所拥有的程序,例如本问题中的sudo。当普通用户运行一个具有“setuid root”(已设置setuid位,由root用户所有)属性的程序时,该程序将以超级用户的权限执行。

setgid

第二个是setgid位,八进制表示为2000,类似于setuid,它会把有效用户组ID从该用户的实际组ID更改为该文件所有者的组ID。如果对一个目录设置setgid位,那么在该目录下创建的文件将由该目录所在组所有,而不属于文件创建者所在组。当一个公共组下的成员需要访问共享目录下的所有文件时,设置setgid位将会很有用,并不需要关注文件所有者所在的用户组。

sticky

第三个是sticky位,八进制表示位1000,它是从UNIX中继承下来的,在LINUX中将会忽略文件的sticky位。但是对一个目录设置sticky位,那么将能阻止用户删除或者重命名文件,除非用户是这个目录的所有者、文件所有者或者超级用户。它通常用来控制对共享目录(例如/tmp)的访问。

设置方法

授予setuid权限

chmod u+s prog1
or
chmod 4xxx prog1
  • 1
  • 2
  • 3

具有setuid属性的程序为-rwsr-xr-x

授予setgid权限

chmod g+s dir1
or
chmod 2xxx dir1
  • 1
  • 2
  • 3

具有setgid属性的目录为drwxrwsr-x

授予sticky权限

chmod t dir1
or
chmod 1xxx dir1
  • 1
  • 2
  • 3

具有sticky属性的目录为drwxrwxrwt

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: nered by uid 这个错误提示意味着你在使用sudo命令时,没有root权限。sudo命令需要root权限才能执行,因此你需要以root用户身份登录或者使用su命令切换到root用户,然后再执行sudo命令。如果你不知道如何以root用户身份登录或者使用su命令,请参考相关的Linux教程。 ### 回答2: 这是一个 Linux 系统中常见的错误提示。它表示当前用户在尝试使用 sudo 命令以管理员权限执行命令时,因为缺少必要的权限,无法正常执行命令。 通常情况下,这个问题会出现在以下几种情况中: 1. 当前用户没有使用 sudo 命令的权限; 2. /usr/bin/sudo 的文件权限或所有者被修改了; 3. sudo 配置文件出现了错误; 4. 系统环境中出现了异常。 解决这个问题的方法有很多种,但以下是其中一种可能的步骤: 1. 确认当前用户是否具有使用 sudo 命令的权限。可以使用命令 "groups <username>" 来查看当前用户所属的用户组。如果当前用户不在 sudo 用户组中,则无法使用 sudo 命令。 2. 确认 /usr/bin/sudo 文件的权限和所有者。可以使用命令 "ls -l /usr/bin/sudo" 来查看文件的详细属性,确保文件权限为 4755,所有者为 root。 3. 确认 sudo 配置文件是否正确配置。通常情况下,sudo 的配置文件为 /etc/sudoers。可以使用命令 "sudo visudo" 来编辑该文件。确保文件中没有语法错误并且当前用户被正确配置。 4. 如果以上步骤都没有解决问题,那么可能是系统环境出现了异常。可以尝试重启系统,如果问题依旧存在,则需要进一步排查系统环境中是否存在其他问题。 需要注意的是,在尝试解决这个问题时,应该遵循安全措施并且谨慎操作,避免对系统造成不必要的风险。 ### 回答3: 对于这个问题,“sudo: /usr/bin/sudo must be own”通常是由于特定的权限或者所有权问题导致的。sudo命令是一个允许普通用户以超级用户权限运行单个命令或者整个shell的工具。 sudo命令需要像setuid用户一样工作,即它必须具有与root用户相同的权限。但是,如果sudo二进制文件的所有权或权限被错误地更改,则无法使用sudo命令。 通常,此错误可能是由于以下原因之一导致的: 1.未正确安装sudo二进制文件 2. 权限问题,如sudo二进制文件的所有者/组,以及文件的读写执行权限。 为解决此问题,可以执行以下操作之一: 1.通过从Linux软件包存储库用apt-get或yum或其他操作系统管理器重新安装sudo软件包. 安装方法如下: Ubuntu/Debian: sudo apt-get update sudo apt-get install sudo CentOS: sudo yum update sudo yum install sudo 2. 确认sodu二进制文件的所有权和权限正确,并赋予相应的权限。确保sudo二进制文件所有者是root,文件权限设置为4755 sudo chown root:root /usr/bin/sudo sudo chmod 4755 /usr/bin/sudo 如果以上两种方法均不能解决问题,那么可能是其他权限或安全性问题所引起。 在这种情况下,最好与系统管理员或Linux技术支持团队联系以进行更进一步的排错。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值