sudo命令详解

Gelsey ·
更新时间:2024-11-10
· 909 次阅读

1、初识sudo

  sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,shutdown、init等等。这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性。sudo是对Shell的一个代替,它是面向每个命令的。
  它的特性主要有这样几点:
  ① sudo能够限制用户只在某台主机上运行某些命令。
  ② sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
  ③ sudo使用时间戳文件——日志来执行类似的“检票”系统。当用户调用sudo并且输入他的密码时,用户获得了一张存活期为5分钟的票(这个值可以在/etc/sudoers设置)。
  ④ sudo的配置文件是/etc/sudores,属性必须为0440,它允许系统管理员集中地管理用户的使用权限和使用主机

2、sudo命令用法 命令解释
  sudo — execute a command as another user(以其他用户身份执行命令) 命令语法
  sudo [ -Vhl LvkKsHPSb ] │ [ -p prompt ] [ -c class│- ] [ -a auth_type ] [-u username│#uid ] command 命令选项
选 项 作 用
-V 显示版本编号
-h 显示版本编号及指令的使用方式说明
-l 显示出自己(执行 sudo 的使用者)的权限
-v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
-k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
-b 将要执行的指令放在背景执行
-p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
-u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
-s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
-H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令
实例
  ① 查看版本信息 [tom@localhost ~]$ sudo -V Sudo 版本 1.8.23 Sudoers 策略插件版本 1.8.23 Sudoers 文件语法版本 46 Sudoers I/O plugin version 1.8.23

  ② 列出当前用户权限

[tom@localhost /]$ sudo -l 匹配 %2$s 上 %1$s 的默认条目: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin 用户 tom 可以在 localhost 上运行以下命令: (root) /sbin/useradd

  ③ 以root身份使用useradd命令创建cat用户

[tom@localhost /]$ sudo -u root useradd cat 3、如何编辑配置文件呢?

  编辑sudo的配置文件/etc/sudoers一般不直接使用vi(vi /etc/sudoers)去编辑,因为sudoers配置有一定的语法,直接用vi编辑保存系统不会检查语法,如果有错也会保存从而导致sudo工具无法使用,最好使用visudo命令去配置。虽然visudo也是调用vi去编辑,但是保存时会进行语法检查,有错误会给出提示。

  接下来,我们以一个栗子来教会大家该如何配置:

//创建tom用户,并为其创建密码 [root@localhost ~]# useradd tom [root@localhost ~]# echo "123456" | passwd --stdin tom 更改用户 tom 的密码 。 passwd:所有的身份验证令牌已经成功更新。 //使用visudo打开配置文件 [root@localhost ~]# visudo //文件中字段很多,我们需要做更改的地方在这里 ## Allow root to run any commands anywhere root ALL=(ALL) ALL ... //root 表示用户名,如果是用户组,可以写成"%group_name" //第一个ALL:代表可以执行sudo命令的主机(ALL表示任何主机) //第二个ALL:代表可以执行sudo命令的时候以哪个用户的身份执行(ALL表示root用户) //第三个ALL:代表可以sudo可以执行的命令,多个命令可以用","分隔(ALL表示所有命令) //为tom用户添加在任何主机上以root用户身份使用useradd命令的权限 ## Allow root to run any commands anywhere root ALL=(ALL) ALL tom ALL=(root) /sbin/useradd //可以使用 which 命令查看命令的二进制可执行文件位置 [root@localhost ~]# su - tom //切换到tom用户 [tom@localhost ~]$ sudo -l //查看tom用户拥有的特殊权限 我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点: #1) 尊重别人的隐私。 #2) 输入前要先考虑(后果和风险)。 #3) 权力越大,责任越大。 [sudo] tom 的密码: 匹配 %2$s 上 %1$s 的默认条目: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin 用户 tom 可以在 localhost 上运行以下命令: `(root) /sbin/useradd` //这里说明我们以及添加成功了 [tom@localhost ~]$ sudo useradd jerry //我们以添加一个jerry用户为例作为测试 [tom@localhost ~]$ tail -1 /etc/passwd //验证/etc/passwd文件是否添加成功 jerry:x:4003:4003::/home/jerry:/bin/bash [root@localhost ~]# tail /var/log/secure //查看安全日志 Mar 10 22:12:25 localhost sudo: tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ; COMMAND=/sbin/user add jerry //使用tom用户以root身份使用useradd命令创建jerry用户的记录
作者:權lll



sudo命令 sudo

需要 登录 后方可回复, 如果你还没有账号请 注册新账号