Linux之sudo小记

1、sudo功能简介

sudo(substitute user do) 使得系统管理员可以授权特定用户或用户组作为 root 或他用户执行某些(或所有)命令,同时还能够对命令及其参数提供审核跟踪。
用户可以选择用 su 切换到 root 用户运行命令,但是这种方式会启动一个 root shell 并允许用户运行之后的所有的命令。而 sudo 可以针对单个命令、仅在需要时授予临时权限,减少因为执行错误命令损坏系统的可能性。sudo 也能以其他用户身份执行命令并且记录用户执行的命令,以及失败的权限申请。

2、报错信息

在使用zabbix_get获取agent信息时获得了如下报错:
you must have a tty to run sudo

3、解决办法

visudo
将Defaults requiretty注释掉即可。

4、究其原因

SSH TTY 问题

SSH TTY 问题
远程执行命令时,SSH默认不会分配tty。没有tty,sudo就无法在获取密码时关闭回显。使用-tt选项强制SSH分配tty(使用两次-tt)。
另一方面,sudoers中的Defaults选项requiretty要求只有拥有tty的用户才能使用sudo。可以通过visudo编辑配置文件,禁用这个选项:

  1. #Defaults requiretty

5、一些其他参数的说明

跨终端sudo
警告: 此举使得所有进程都使用同一个sudo任务。
如果不想每次启动新终端都重新输入密码,在配置文件中禁止tty_tickets即可:

  1. Defaults !tty_tickets

环境变量
当前用户的环境变量不会应用到sudo启动的程序,除非使用-E选项:

  1. $ sudo -E pacman -Syu

如果经常需要这样做,可以在~/.bashrc(或其他shell配置文件)中加入命令别名

  1. alias sudo="sudo -E"

在/etc/sudoers中添加以下内容作用相同:

  1. Defaults !env_reset

可以把需要传递环境变量的命令设置到env_keep:

  1. Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"

传递命令别名
当前用户的命令别名不会应用到sudo。如果需要这样,只需在~/.bashrc或者/etc/bash.bashrc中加入:

  1. alias sudo='sudo '

使用root密码
默认sudo询问用户密码。添加targetpw 或 rootpw到配置文件的“Defaults”部分,可以让sudo询问root密码:

  1. Defaults targetpw

可以限定特定的组使用 root 密码:

  1. Defaults:%wheel targetpw
  2. %wheel ALL=(ALL) ALL

禁止root登陆
警告: ArchLinux用户最好不要禁用root用户,出问题就麻烦大了。
有了sudo,用户也许希望禁止使用root登陆。没有了root用户,黑客就不知道管理员账户的名字了。
警告: 务必在禁用root之前配置好其他用户的权限!
使用passwd命令锁住root用户:

  1. passwd -l root

下列命令解锁root用户:

  1. $ sudo passwd -u root

或者,编辑/etc/shadow文件,将root的加密口令列替换为“!”:

  1. root:!:12345::::::

要再次启用sudo,重新设置其密码即可:

  1. $ sudo passwd root
  2. gksu

要设置 gksu 使用 sudo 而不是 root:

  1. $ gconftool-2 --set --type boolean /apps/gksu/sudo-mode true
  2. kdesu

KDE下常用 kdesu 以 root 权限执行图形程序。默认情况下,即使root账户被禁用,kdesu仍会尝试使用su切换root。需要配置kdesu以使用sudo,创建/编辑~/.config/kdesurc (KDE4 的 ~/.kde4/share/config/kdesurc),加入:

  1. [super-user-command]
  2. super-user-command=sudo

或者使用下面命令,KDE 4 使用 kwriteconfig

  1. $ kwriteconfig5 --file kdesurc --group super-user-command --key super-user-command sudo

让 sudo 使用 /etc/sudoers.d 中的文件
sudo 可以解析 /etc/sudoers.d/ 目录中的文件,这样就不需要编辑单一的 /etc/sudoers 文件,可以单独修改一个设置然后放入此目录。目录中配置的格式和 /etc/sudoers一样, 优点包括:
不需要编辑 {ic|sudoers.pacnew}} 文件;
如果新配置有问题,可以删除这个文件而不用编辑 /etc/sudoers.
/etc/sudoers.d/ 目录中的文件是按字母顺序加载的,. 或 ~ 开头的文件会被跳过。文件名应该以双字母开头,例如 01_foo,请注意配置文件的顺序以避免相互覆盖。
权限 Umask
Sudo 会统一用户的 umask 值和它自己的 umask (默认是 0022)。这会阻止 sudo 创建比该用户的 umask 允许的打开权限更多的文件。这默认是合理的,因为没有使用自定义 umask。但是这可能导致用sudo运行一个命令和root运行一个命令建立的文件权限不同。如果这导致了问题,sudo 提供了一个方法来修复 umask,即使想要的 umask 比用户指定的 umask 权限还要多。添加下面内容 (使用 visudo) 会覆盖 sudo 的默认行为:

  1. Defaults umask = 0022
  2. Defaults umask_override

6、为普通用户添加sudo的

6.1 要为某个用户可以执行所有命令,在配置文件中加入:

  1. 用户名 ALL=(ALL) ALL

6.2 如果只想允许以某个主机名登录用户执行命令:

  1. 用户名 主机名=(ALL) ALL

6.3 允许wheel用户组成员无密码使用sudo:

  1. %wheel ALL=(ALL) NOPASSWD: ALL

6.4 要不询问某个用户的密码:

  1. Defaults:USER_NAME !authenticate

6.5 只为用户启用部分命令的执行权限:

  1. 用户名 主机名=/sbin/halt,/sbin/poweroff,/sbin/reboot,/usr/bin/pacman -Syu
2
未经许可,不得转载,否则将受到作者追究,博主联系方式见首页右上角
  • 转载请注明来源:Linux之sudo小记
  • 本文永久链接地址:http://www.52devops.com/chuck/825.html

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论
取消评论
代码 贴图 加粗 链接 删除线 签到

(2)条精彩评论:
  1. 匿名
    真的写的很详细,解决方法,问题原因也解释的很清楚。太喜欢了,很有帮助 :eek:
    匿名2016-10-10 22:10 回复
    • admin
      谢谢指出不足
      admin2016-10-19 11:13 回复