首页 > 系统相关 >linux命令 之 sudo命令详细介绍

linux命令 之 sudo命令详细介绍

时间:2023-04-07 21:00:13浏览次数:60  
标签:shell 密码 sudo 用户 命令 linux root

导读 你在使用 Linux 命令行时曾经得到过“拒绝访问”的错误提示吗?这可能是因为你正在尝试执行一个需要 root 权限的操作。例如,下面的截图展示了当我尝试复制一个二进制文件到一个系统目录时产生的错误。

你在使用 Linux 命令行时曾经得到过“拒绝访问Permission denied”的错误提示吗?这可能是因为你正在尝试执行一个需要 root 权限的操作。例如,下面的截图展示了当我尝试复制一个二进制文件到一个系统目录时产生的错误。

linux命令 之 sudo命令详细介绍linux命令 之 sudo命令详细介绍

那么该怎么解决这个错误?很简单,使用 sudo 命令。

linux命令 之 sudo命令详细介绍linux命令 之 sudo命令详细介绍

用户运行此命令后会被提示输入他们(自己)的登录密码。一旦输入了正确的密码,操作将会成功执行。

毫无疑问,sudo 是任何在 Linux 上使用命令行的人都必须知道的命令。但是,为了更负责、更有效地使用该命令,你还是要知道一些相关(及深入)的细节。这正是我们将会在这篇文章中讨论的。

在我们继续之前,值得提一下的是,这篇文章所提到的所有命令指示都已经在 Ubuntu 14.04 LTS 下的 4.3.11 版 Bash 下通过测试。

什么是 sudo

正如你们大部分人所知道的,sudo 用来执行需要提升权限(通常是作为 root 用户)的命令。在这篇文章之前的简介部分已经讨论过这样的一个例子。然而,如果你想的话,你能用sudo 以其它(非 root )用户运行命令。

这是由工具提供的-u 命令行选项所实现的。举个例子,如下例所展示的那样,我(himanshu )尝试将一个在其他用户(howtoforge )的 Home 目录中的文件重命名,但是得到一个“访问拒绝”的错误。然后我加上sudo -u howtogroge 后用同样的“mv”命令,命令成功执行了:

linux命令 之 sudo命令详细介绍linux命令 之 sudo命令详细介绍

任何人都能用 sudo 吗?

不是。一个用户要能使用sudo ,应该在/etc/sudoer 文件里有一条跟该用户相关的信息。下述摘自 Ubuntu 网站的一段能讲得更清楚:

/etc/sudoer 文件控制了谁能以哪个用户的身份在哪个机器上运行什么命令,还可以控制特别的情况,例如对于特定的命令是否需要输入密码。这个文件由别名aliases(基本变量)和用户标识user specifications(控制谁能运行什么命令)组成。

如果你正在使用 Ubuntu,让一个用户能运行sudo 命令很容易:你所需要做的就是把账户类型改成管理员administrator。这可直接在 系统设置System Settings -> 用户账户User Accounts里完成。

linux命令 之 sudo命令详细介绍linux命令 之 sudo命令详细介绍

首先解锁该窗口:

linux命令 之 sudo命令详细介绍linux命令 之 sudo命令详细介绍

然后选择你想改变用户类型的用户,然后将类型改成管理员administrator。

linux命令 之 sudo命令详细介绍linux命令 之 sudo命令详细介绍

然而,如果你不使用 Ubuntu,或者你的发行版没有提供这个特性,你可以手动编辑/etc/sudoers 文件来实现此改变。要在文件中添加这样的一行:

[user]    ALL=(ALL:ALL) ALL

无需赘言,[user] 应该用你想提升 sudo 权限的用户的用户名所代替。在这里值得提到的一件重要的事情是,官方建议通过 visudo 命令编辑该文件 —— 你需要做的就是运行下述命令:

sudo visudo

为了说清究竟是怎么一回事,这里有段从visudo 手册里的摘要:

visudo
以安全的模式编辑sudoers 文件。
visudo
锁定sudoers
文件以防多个编辑同时进行,提供基本的检查(sanity checks)和语法错误检查。如果
sudoers
文件现在正在被编辑,你将会收到一个信息提示稍后再试。

什么是 sudo 会话

如果你经常使用sudo 命令,你肯定注意到过当你成功输入一次密码后,可以不用输入密码再运行几次
sudo 命令。但是一段时间后,
sudo 命令会再次要求你的密码。

这种现象跟运行sudo 命令数目无关,跟时间有关。是的,
sudo 默认在输入一次密码后 15 分钟内不会再次要求密码。15 分钟后,你会再次被要求输入密码。

然而,如果你想的话,你能改变这种现象。用以下命令打开/etc/sudoers 文件:

sudo visudo

找到这一行:

Defaults env_reset

linux命令 之 sudo命令详细介绍linux命令 之 sudo命令详细介绍

然后在这行最后添加以下变量:

Defaults env_reset,timestamp_timeout=[new-value]

[new-value] 为想要sudo 会话持续的时间数。例如,设数值为 40。

linux命令 之 sudo命令详细介绍linux命令 之 sudo命令详细介绍

如果你希望每次使用sudo 命令时都要求输入密码,你可以把这个变量赋值为 0 。想要sudo 会话永远不过时,应赋值为 -1。

注意将timestamp_timeout 的值赋为 “-1” 是强烈不推荐的。

sudo 密码

你可能注意过,当sudo 要求输入密码然后你开始输入时,不会显示任何东西 —— 甚至连常规的星号都没有。虽然这不是什么大问题,不过一些用户就是希望显示星号。

好消息是那有可能也很容易做到。所有你需要做的就是在/etc/sudoers 文件里将下述的行:

Defaults        env_reset

改成

Defaults        env_reset,pwfeedback

然后保存文件。现在,无论什么时候输入sudo 密码,星号都会显示。

linux命令 之 sudo命令详细介绍linux命令 之 sudo命令详细介绍

一些重要的 sudo 命令行参数

除了内-u 命令行参数(我们已经在这篇教程的开始部分讨论过了),还有其他重要的sudo 命令行参数值得注意。在这部分,我们将会讨论其中一些。

-k 参数

考虑下这种情况:输入密码后你刚刚运行了几个sudo 驱动的命令。现在,如你所知,sudo 会话默认保持 15 分钟。假设在这会话期间,你需要让某些人访问你的终端,但你不想让他们可以使用sudo ,你将会怎么做?还好,有-k 命令行参数允许用户取消sudo 权限。这是sudo 帮助页面man page对此的解释:

-k , --reset-timestamp

不带任何命令使用时,撤销用户缓存的凭据。换句话讲,下一次使用sudo 将会要求输入密码。使用这个参数不需要密码,也可以放到一个 ./logout 文件中来撤销 sudo 权限。

当与一个命令,或者一个可能需要密码的操作一起用时,这个参数将会导致sudo 忽略用户缓存的凭据。结果是sudo要求输入密码(如果这是被安全策略所要求的),而且不会更新用户缓存的凭据。

-s 参数

有时你的工作要求你运行一堆需要 root 权限的命令,你不想每次都输入密码。你也不想通过改变/etc/sudoers 文件调整 sudo会话的过期时限。

这种情况下,你可以用sudo的-s/span> 参数。这是sudo 帮助页面对此的解释:

-s ,--shell

如果设置了 SHELL 环境变量或者调用用户的密码数据库指定了 shell,就运行该 shell 。如果指定了命令,命令将会通过 shell 的 -c 参数将命令传递给该 shell 执行。如果没有指定命令,会执行一个交互式 shell。

所以,基本上这命令参数做的是:

  • 启动一个新的 shell - 至于是哪一个 shell,参照 SHELL 环境变量赋值。如果$SHELL 是空的,将会用 /etc/passwd 中定义的 shell。
  • 如果你用-s 参数传递了一个命令名(例如sudo -s whoami ),实际执行的是sudo /bin/bash -c whoami。
  • 如果你没有尝试执行其他命令(也就是说,你只是要运行usdo -s),你将会得到一个有 root 权限的交互式的 shell。

请记住,-s 命令行参数给你一个有 root 权限的 shell,但那不是 root 环境 —— 还是执行的你自己的.bashrc。例如,在 sudo -s
运行的新 shell 里,执行 whoami 命令仍会返回你的用户名,而非 root 。

-i 参数

-i 参数跟我们讨论过的-s 参数相像。然而,还是有点区别。一个重要的区别是-i 给你的是 root 环境,意味着你的(用户的).bashrc 被忽略。这就像没有显式地用 root 登录也能成为 root 。此外,你也不用输入 root 用户密码。

重要:请注意su命令也能让你切换用户(默认切换到 root )。这个命令需要你输入 root 密码。为了避免这一点,你可以使用sudo 执行它(sudo su),这样你只需要输入你的登录密码。然而,su 和sudo su 有隐含的区别 —— 要了解它们,以及它们和sudo -i 的区别,请看这里 。

linux命令 之 sudo命令详细介绍linux命令 之 sudo命令详细介绍

总结

我希望现在你至少知道了sudo 的基本知识,以及如何调整 sudo 的默认行为。请按我们解释过的那样去尝试调整内联代码块 /etc/sudoers 。同时也浏览一下论坛讨论来更深入了解 sudo命令。

标签:shell,密码,sudo,用户,命令,linux,root
From: https://www.cnblogs.com/0227-yyds/p/17297316.html

相关文章

  • Linux下日志系统
    系统日志rsyslog我们可以通过rsyslog查看系统日志。rsyslog是从内存采集日志到硬盘的工具,并非生成日志,日志由程序产生在内存。日志信息一般保存在   /var/log/message  ,可以通过cat命令查看。不过在ubuntu下需要先配置:打开 /etc/rsyslog.conf 可以看到,配置文件保......
  • mysqldump 命令导出数据,解决中文乱码问题
      https://www.cnblogs.com/LoveBB/p/16941639.html mysqldump-uroot-ppassword--add-drop-table--default-character-set=utf8--hex-blobdbname--result-file=F:\backup.sql......
  • Windows(Server)、Linux服务器如何修改用户名和密码?
    开通服务器后,为了安全起见,应及时修改默认账户名和密码,不熟悉的人也建议不要随意提供服务器信息给对方,以防对方进入服务器修改数据,养成定期修改密码可以提高服务器的安全性,今天给大家分享一下服务器修改用户名和密码的方法,修改方法如下:一、WindowsServer2003、20081、远程登录服务......
  • 荣耀magicbook安装Linux系统boot fail问题解决
    偶然网上冲浪,发现了Debian系的kalilinux有点意思,刚好手边有一台不怎么用的荣耀magicbook,于是准备装个双系统好不容易下完了kali的镜像,使rufus写入了U盘但是在安装过程中怎么安装都显示bootfail,切换了n个版本的Linux系统,发现还是这样,但是实测Debian11是可以进入引导项的最后所......
  • linux系统升级/更新OpenSSL版本操作流程记录
    问题描述:有时OpenSSL版本过老升级,或者需要更新OpenSSL版本1.登录linux系统后输入opensslversion查看现在使用的版本我的输入后版本信息为:OpenSSL1.1.1gFIPS 21Apr2020,可以看到是一年前更新版本,是有些老。2.登录openssl官网查看最新版本。登录https://www.openssl.org......
  • Linux基本功系列之sudo命令
    1.sudo命令介绍sudo命令来自于英文词组“superuserdo”的缩写,中文译为“超级用户才能干的事”.sudo的功能是用于授权普通用户执行管理员命令,允许普通用户执行一些或者全部的root命令,如halt,reboot,shutdown、init等等。这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性。......
  • CA SUDO 自动化部署
    实现私有CAcentos7实现证书申请[root@centos7certs]#pwd/etc/pki/tls/certs[root@centos7certs]#makeapp.crtumask77;\/usr/bin/opensslgenrsa-aes1282048>app.keyGeneratingRSAprivatekey,2048bitlongmodulus............................................
  • linux 磁盘设备
       查看Linux系统的I/O调度器查看Linux系统的I/O调度器一般分成两个部分,一个是查看Linux系统整体使用的I/O调度器,另一个是查看某磁盘使用的I/O调度器。查看当前系统支持的I/O调度器,使用如下命令 [[email protected]]#dmesg|grep-ischeduler[4.8......
  • Linux安装nginx完整步骤
    一、安装依赖(安装过的跳过)yum-yinstallgccgcc-c++automakepcrepcre-develzlibzlib-developensslopenssl-develgd-devel二、下载nginx稳定版wgethttp://nginx.org/download/nginx-1.16.1.tar.gz三、解压–编译–安装解压tar-zxvfnginx-1.16.1.tar.gz进......
  • linux ssh登录源地址限制,H3C交换机配置SSH源地址登录限制和SNMP源地址限制的方法...
    本文转载至https://blog.csdn.net/weixin_42411545/article/details/116913844需求1:对SSH远程管理进行限源,仅允许10.0.1.0/24,210.1.0.0/24段ip进行登录;需求2:对SNMP管理进行限源,仅允许210.1.0.200-210.1.0.202这3个ip进行访问。配置方法:ssh登录后,输入:sysaclnumber2000matc......