sudo配置文件写法:给普通用户增加权限

本文详细介绍了一个复杂的sudoers配置文件示例,展示了如何通过User_Alias、Runas_Alias、Host_Alias和Cmnd_Alias等来精细控制不同用户、用户组在不同主机上执行特定命令的权限。

9)   你可以用visudo编辑sudoers配置文件,不过也可以直接通过修改sudoers文件实现,不过编辑之前最好看一下它的sample.sudoers文件,里面有一个相当详细的例子可以参考。  
#第一部分:用户定义,将用户分为FULLTIMERS、PARTTIMERS和WEBMASTERS三类。  
User_Alias   FULLTIMERS   =   millert,   mikef,   dowdy  
User_Alias   PARTTIMERS   =   bostley,   jwfox,   crawl  
User_Alias   WEBMASTERS   =   will,   wendy,   wim  
#第二部分,将操作类型分类。  
Runas_Alias   OP   =   root,   operator  
Runas_Alias   DB   =   oracle,   sybase  
#第三部分,将主机分类。这些都是随便分得,目的是为了更好地管理。  
Host_Alias   SPARC   =   bigtime,   eclipse,   moet,   anchor   :  
SGI   =   grolsch,   dandelion,   black   :  
ALPHA   =   widget,   thalamus,   foobar   :  
HPPA   =   boa,   nag,   python  
Host_Alias   CUNETS   =   128.138.0.0/255.255.0.0  
Host_Alias   CSNETS   =   128.138.243.0,   128.138.204.0/24,   128.138.242.0  
Host_Alias   SERVERS   =   master,   mail,   www,   ns  
Host_Alias   CDROM   =   orion,   perseus,   hercules  
#第四部分,定义命令和命令地路径。  
Cmnd_Alias   DUMPS   =   /usr/bin/mt,   /usr/sbin/dump,   /usr/sbin/rdump,  
/usr/sbin/restore,   /usr/sbin/rrestore  
Cmnd_Alias   KILL   =   /usr/bin/kill  
Cmnd_Alias   PRINTING   =   /usr/sbin/lpc,   /usr/bin/lprm  
Cmnd_Alias   SHUTDOWN   =   /usr/sbin/shutdown  
Cmnd_Alias   HALT   =   /usr/sbin/halt,   /usr/sbin/fasthalt  
Cmnd_Alias   REBOOT   =   /usr/sbin/reboot,   /usr/sbin/fastboot  
Cmnd_Alias   SHELLS   =   /usr/bin/sh,   /usr/bin/csh,   /usr/bin/ksh,  
/usr/local/bin/tcsh,   /usr/bin/rsh,  
/usr/local/bin/zsh  
Cmnd_Alias   SU   =   /usr/bin/su  
#这里是针对不同的用户采用不同地策略,比如默认所有的syslog直接通过auth   输出。FULLTIMERS组不用看到lecture(第一次运行时产生的消息);用户millert使用sudo时不用输入密码;以及logfile的 路径在/var/log/sudo.log而且每一行日志中必须包括年。  
Defaults   syslog=auth  
Defaults:FULLTIMERS   !lecture  
Defaults:millert   !authenticate  
Defaults@SERVERS   log_year,   logfile=/var/log/sudo.log  
#root和wheel组的成员拥有任何权利。  
root   ALL   =   (ALL)   ALL  
%wheel   ALL   =   (ALL)   ALL  
#FULLTIMERS可以运行任何命令在任何主机而不用输入自己的密码  
FULLTIMERS   ALL   =   NOPASSWD:   ALL  
#PARTTIMERS可以运行任何命令在任何主机,但是必须先验证自己的密码。  
PARTTIMERS   ALL   =   ALL  
#jack可以运行任何命令在定义地CSNET(128.138.243.0,   128.138.242.0和128.138.204.0/24的子网)中,不过注意前两个不需要匹配子网掩码,而后一个必须匹配掩码。  
jack   CSNETS   =   ALL  
#lisa可以运行任何命令在定义为CUNETS(128.138.0.0)的子网中主机上。  
lisa   CUNETS   =   ALL  
#用户operator可以运行DUMPS,KILL,PRINTING,SHUTDOWN,HALT,REBOOT以及在/usr/oper/bin中的所有命令。  
operator   ALL   =   DUMPS,   KILL,   PRINTING,   SHUTDOWN,   HALT,   REBOOT,  
/usr/oper/bin/  
#joe可以运行su   operator命令  
joe   ALL   =   /usr/bin/su   operator  
#pete可以为除root之外地用户修改密码。  
pete   HPPA   =   /usr/bin/passwd   [A-z]*,   !/usr/bin/passwd   root  
#bob可以在SPARC和SGI机器上和OP用户组中的root和operator一样运行如何命令。  
bob   SPARC   =   (OP)   ALL   :   SGI   =   (OP)   ALL  
#jim可以运行任何命令在biglab网络组中。Sudo默认“+”是一个网络组地前缀。  
jim   +biglab   =   ALL  
#在secretaries中地用户帮助管理打印机,并且可以运行adduser和rmuser命令。  
+secretaries   ALL   =   PRINTING,   /usr/bin/adduser,   /usr/bin/rmuser  
#fred能够直接运行oracle或者sybase数据库。  
fred   ALL   =   (DB)   NOPASSWD:   ALL  
#john可以在ALPHA机器上,su除了root之外地所有人。  
john   ALPHA   =   /usr/bin/su   [!-]*,   !/usr/bin/su   *root*  
#jen可以在除了SERVERS主机组的机器上运行任何命令。  
jen   ALL,   !SERVERS   =   ALL  
#jill可以在SERVERS上运行/usr/bin/中的除了su和shell命令之外的所有命令。  
jill   SERVERS   =   /usr/bin/,   !SU,   !SHELLS  
#steve可以作为普通用户运行在CSNETS主机上的/usr/local/op_commands/内的任何命令。  
steve   CSNETS   =   (operator)   /usr/local/op_commands/  
#matt可以在他的个人工作站上运行kill命令。  
matt   valkyrie   =   KILL  
#WEBMASTERS用户组中的用户可以以www的用户名运行任何命令或者可以su   www。  
WEBMASTERS   www   =   (www)   ALL,   (root)   /usr/bin/su   www  
#任何用户可以mount或者umount一个cd-rom在CDROM主机上,而不用输入密码。  
ALL   CDROM   =   NOPASSWD:   /sbin/umount   /CDROM,  
/sbin/mount   -o   nosuid,nodev   /dev/cd0a   /CDROM  

10)   我的sudoers   配置文件是这样的  
User_Alias   ADMIN   =   root,username  
Runas_Alias   OP   =   username  
Cmnd_Alias   IPCHAINS   =   /usr/bin/ipchains  
Cmnd_Alias   EDIT   =   /bin/vi  
Cmnd_Alias   SHUTDOWN   =/sbin/shutdown  
Cmnd_Alias   HALT   =   /usr/bin/halt  
Cmnd_Alias   DEL   =   /bin/rm  
Cmnd_Alias   COPY=   /bin/cp  
Cmnd_Alias   SU=/bin/su  
Cmnd_Alias   SLEEP=   /bin/sleep  
Cmnd_Alias   REBOOT   =   /usr/bin/reboot  
Cmnd_Alias   CHMOD=/bin/chmod  
Cmnd_Alias   HWCLOCK=/sbin/hwclock  
Cmnd_Alias   TRACET=/usr/sbin/traceroute  
Cmnd_Alias   VIPW   =   /sbin/route  
Cmnd_Alias   PASSWD=/usr/bin/passwd  
Cmnd_Alias   IPSEC=/usr/local/sbin/ipsec  
Cmnd_Alias   ARP=/sbin/arp  
Cmnd_Alias   HOSTNAME=/bin/hostname  
root   ALL   =   (ALL)   ALL  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:HOSTNAME  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:ARP  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:HWCLOCK  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:IPCHAINS  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:HALT  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:SHUTDOWN  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:REBOOT  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:CHMOD  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:IPSEC  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:PASSWD  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:TRACET  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:DEL  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:COPY  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:SU  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:EDIT  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:SLEEP  
ADMIN   SERVERNAME=(ALL)   NOPASSWD:ROUTE  

sudo的使用相对地简单,只要将sudo和sudoers命令拷贝到相应的路径即可。Sudo命令可以rename成你所喜欢的名字,sudoers也一样。  

<think>好的,我现在需要解决用户的问题,即在zsh终端中执行sudo命令时出现“command not found”的错误。用户已经提到在重启MacBook Pro后,每次尝试用`code`命令启动VS Code都会失败,并显示`zsh: command not found: code`,但当前的问题是关于`sudo`命令找不到的情况。这看起来有些矛盾,因为`sudo`本身是系统的基本命令,通常不会丢失。不过我需要仔细分析可能的原因。 首先,我需要确认用户遇到的错误具体是什么。用户现在的问题是“zsh sudo command not found”,也就是在输入`sudo`时,zsh提示找不到该命令。然而,正常情况下,`sudo`位于`/usr/bin/sudo`,并且应该包含在系统路径中。如果`sudo`本身找不到,这可能意味着系统路径配置错误,或者`sudo`二进制文件被意外删除或损坏。 可能的步骤: 1. **检查sudo是否存在**:用户是否真的失去了sudo的可执行文件?可以尝试输入`/usr/bin/sudo --version`,如果这个路径下存在,说明可能是PATH环境变量的问题。 2. **检查PATH环境变量**:在zsh中,用户的环境变量PATH可能被错误配置,导致系统无法找到sudo的位置。可以执行`echo $PATH`查看是否包含`/usr/bin`,这是sudo所在的目录。 3. **恢复PATH设置**:如果PATH被修改,比如在.zshrc或其他配置文件中错误地覆盖了PATH,导致系统目录未被包含,需要修正这些配置文件。 4. **使用绝对路径执行sudo**:如果暂时无法修复PATH,可以尝试用绝对路径执行,如`/usr/bin/sudo command`。 5. **系统恢复**:如果sudo确实被删除,可能需要通过恢复模式重新安装系统或修复权限。 另外,用户之前提到过`code`命令找不到的问题,这可能与PATH配置有关,比如VS Code没有正确添加到PATH中,但当前的问题更严重,因为sudo是系统核心命令。需要区分这两个问题是否相关。 可能的错误原因: - 用户的.zshrc或其他启动文件修改了PATH,导致系统默认路径(如/usr/bin)被排除在外。 - 系统文件损坏或权限问题,导致sudo不可访问。 - 误操作删除了sudo或其他关键系统文件。 需要用户提供更多信息,比如执行`echo $PATH`的输出,以及是否存在`/usr/bin/sudo`文件。不过由于用户现在无法使用sudo,可能需要通过其他方式恢复,比如进入恢复模式或使用单用户模式。 可能的解决方案步骤: 1. **检查sudo是否存在**:使用绝对路径运行`/usr/bin/sudo ls`,如果成功,说明PATH有问题。 2. **临时修复PATH**:如果PATH被错误配置,可以临时设置PATH:`export PATH=/usr/bin:/bin:/usr/sbin:/sbin:$PATH`,然后再尝试运行sudo。 3. **修正配置文件**:检查.zshrc、.zprofile等文件,看是否有修改PATH的设置,特别是覆盖而非追加的情况,比如写成了`PATH="some/path"`而不是`PATH="$PATH:some/path"`。 4. **重新安装sudo或系统工具**:如果sudo文件确实丢失,可能需要通过恢复模式或使用包管理器重新安装,但此时可能需要root权限,导致循环问题。 5. **使用其他用户或恢复模式**:如果当前用户环境有问题,尝试切换到另一个用户账户,或者重启进入恢复模式修复磁盘权限和文件。 另外,参考用户提到的引用[2]和[3],他们在之前的问题中遇到了权限和命令未找到的问题,可能与权限配置或环境变量有关联。例如,用户可能以root身份运行了某些命令,导致配置文件被错误修改。 总结可能的解决步骤: - 确认sudo是否存在于系统路径。 - 检查并修复PATH环境变量。 - 恢复或修正shell配置文件。 - 必要时使用系统恢复工具。</think>要解决zsh中`sudo`命令找不到的问题,可以按照以下步骤进行排查和修复: ### 步骤1:确认`sudo`是否存在 在终端中输入以下命令,检查`sudo`的路径是否存在: ```zsh ls /usr/bin/sudo ``` 若输出`/usr/bin/sudo`,说明文件存在,问题可能与环境变量`PATH`相关;若提示文件不存在,可能需要通过系统恢复模式重新安装命令行工具[^2]。 --- ### 步骤2:检查环境变量`PATH` 在终端中输入: ```zsh echo $PATH ``` 确认输出是否包含系统路径(如`/usr/bin`、`/bin`、`/sbin`)。 如果缺少这些路径,可能是配置文件(如`.zshrc`或`.zprofile`)覆盖了`PATH`。 --- ### 步骤3:临时修复`PATH` 临时添加系统路径到当前会话: ```zsh export PATH="/usr/bin:/bin:/usr/sbin:/sbin:$PATH" ``` 然后尝试运行`sudo`命令。若成功,说明问题源于`PATH`配置错误。 --- ### 步骤4:修正配置文件 1. 使用文本编辑器检查`.zshrc`、`.zprofile`等文件: ```zsh nano ~/.zshrc # 或 open ~/.zshrc 使用其他编辑器 ``` 2. 查找类似`export PATH="..."`的语句,确保路径包含系统目录(如`/usr/bin`)且未覆盖原有路径。 正确写法应为追加而非覆盖,例如: ```zsh export PATH="$PATH:/新增路径" ``` 3. 保存文件后执行: ```zsh source ~/.zshrc ``` --- ### 步骤5:使用绝对路径执行`sudo` 若环境变量问题未解决,可通过绝对路径使用`sudo`: ```zsh /usr/bin/sudo command ``` 例如更新系统配置文件: ```zsh /usr/bin/sudo nano /etc/paths ``` --- ### 步骤6:系统级修复 如果`sudo`文件确实丢失(极罕见),需进入恢复模式: 1. 重启Mac,按住`Command + R`进入恢复模式。 2. 打开终端,运行: ```zsh csrutil disable # 关闭系统完整性保护(需谨慎) mount -uw / # 挂载根目录为可写 /usr/bin/sudo --version # 重新安装命令行工具或修复权限 ``` --- ### 总结原因 - **环境变量配置错误**:常见于用户修改`PATH`时误删系统路径。 - **系统文件损坏**:极少数情况下由系统更新失败或误操作导致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值