visudo 配置

来源:互联网 发布:斯蒂芬库里 知乎 编辑:程序博客网 时间:2024/06/14 10:46

sudo

是Unix/Linux平台上的一个非常有用的工具用户也可以通过su切换到root用户运行命令。然而与su的启动一个root shell允许用户运行之后的所有的命令不同,sudo可以针对单个命令授予临时权限。sudo仅在需要时授予用户权限,减少了用户因为错误执行命令损坏系统的可能性。sudo也可以用来以其他用户身份执行命令。此外,sudo可以记录用户执行的命令,以及失败的特权获取。

为什么使用sudo

当我的主机是多人共管的环境时,如果大家都使用 su 来切换成为 root 的身份,那么就得每个人知道 root 的密码,这样密码太多人知道可能会流出去,很不安全!怎办?透过 sudo 来处理即可!
sudo的执行则仅需要自己的密码 ,sudo 可以让你以其他用户的身份执行指令 (通常是使用 root 的身份来执行指令),因此并非所有人都能够执行 sudo ,而是仅有规范到 /etc/sudoers 内的用户才能够执行 sudo 这个指令。

sudo命令的使用方法

sudo可让用户以其他的身份来执行指定的指令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入当前用户密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
语法:
sudo [-bhHpV][-s ][-u <用户>][指令] 或 sudo [-klv]

查看当前设置

命令 sudo -ll 可以显示当前的 sudo 配置

编辑配置文件

visudo调用的默认编辑器是vi。官方仓库里的 sudo 编译时开启了–with-env-editor,会采用环境变量 VISUAL 和 EDITOR的设置。如果设置了VISUAL 就不会使用EDITOR。如果要临时使用其他编辑器,在该命令前加上EDITOR环境变量即可。例如,要使用 nano,用root运行以下命令:

# EDITOR=nano visudo
  • sudo的目的:赋予非root用户root权限
  • 配置文件:/etc/sudoers(永远不要直接使用vi编辑)
  • visudo命令编辑修改/etc/sudoers配置文件(建议使用,具有语法检查功能)

设置示例

要为某个用户可以执行所有命令,在配置文件中加入:
用户名 ALL=(ALL) ALL
如果只想允许以某个主机名登录用户执行命令:
用户名 主机名=(ALL) ALL
允许wheel用户组成员无密码使用sudo:
%wheel ALL=(ALL) NOPASSWD: ALL
要不询问某个用户的密码:
Defaults:USER_NAME !authenticate
只为用户启用部分命令的执行
用户名 主机名=/sbin/halt,/sbin/poweroff,/sbin/reboot,/usr/bin/pacman -Syu
最后的设置会覆盖前面的设置,所以限定多的配置应该放到配置文件的后面。
sudoers文件默认权限
sudoers文件的属主和属组ID必须都是0,文件权限位是0440(-r–r—–)。如果你不小心改变了默认权限,应当立即恢复它们

chown -c root:root /etc/sudoerschmod -c 0440 /etc/sudoers期时间

用户可以修改sudo记录密码的时间。使用visudo命令将如下内容加入/etc/sudoers:
Defaults:用户名 timestamp_timeout=20

不使用密码sudo

## Allow root to run any commands anywhereroot    ALL=(ALL)       ALLtest  ALL=(ALL)       NOPASSWD:ALL#使用者帐号  可登入主机    可下达命令

语法解释:允许 test 用户来自任何主机登陆,不使用密码使用sudo命令。

visudo利用群组授权

[root@www ~]# visudo%test  ALL=(ALL)  ALL#在最左边加上 % ,代表后面接的是一个群组,格式和单用户授权一样[root@www ~]# usermod -a -G testtest #<==将test 加入root 的组中#任何加入test这个群组的使用者,就能够使用 sudo 切换任何身份来操作任何指令

多个用户的设置(非同一群组用户)

User_Alias UUU=user1,user2…… 定义用户别名;

20 # User_Alias ADMINS = jsmith, mikem      //这个就是一个实例行,按照这个写自己的21 User_Alisa sudouser=user1,user2,user3,user4 //第一一个别名suduouser……后面省略

对于多个命令的设置:

Cmnd_Alias CCC=command1,command2…… 定义命令别名;

 Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dh        client, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial,         /sbin/iwconfig, /sbin/mii-tool                                                     //多个命令定义一个命令别名;……后面省略

禁止直行某些命令

!command_to_run

username    ALL = NOEXEC: /usr/bin/less#NOEXEC=!command_to_run
重复最后直行的命令

sudo !!

0 0
原创粉丝点击