linux 普通用户成为sudoer(转)

linux 普通用户成为sudoer(转)

使用自己的用户登录Linux时,可以避免使用root用户误删一些东西,不过有些命令必须得使用root用户才可以使用,所以使用sudo是个很好的选择!
sudo命令
 
這個時候, sudo 就派的上用場囉~那麼 sudo 是怎樣工作的呢?
    • 當使用者執行 sudo 時,系統會主動的去尋找 /etc/sudoers 檔案,判斷該使用者是否有執行 sudo 的權限;
    • 若使用者具有可執行 sudo 的權限後,便讓使用者『輸入使用者自己的密碼』來確認;
    • 若密碼輸入成功,便開始進行 sudo 後續接的指令;
    • 不過, root 執行 sudo 時,不需要輸入密碼;
    • 若欲切換的身份與執行者身份相同,那也不需要輸入密碼。
要注意的是,使用者『輸入的是自己的密碼,而不是欲切換成為他的那個身份的密碼!』 舉例來說,假設 dmtsai 具有執行 sudo 的權限,那麼當他以 sudo 執行 root 的工作時, 他需要輸入的是 dmtsai 自己的密碼,而不是 root 的密碼!嘿嘿!很棒吧! ^_^ 如此一來,大家可以使用自己的密碼執行 root 的工作,而不必知道 root 的密碼,安全多了。 此外, 使用者能夠執行的指令是可以被限制的! 所以,我們可以設定 dmtsai 僅能進行 shutdown 的工作,或者是其他一些簡單的指令, 嘿嘿!是否很棒啊!

不過,由上面的說明當中,您也會瞭解,是否具有 sudo 的執行權限是很重要的, 而 sudo 的執行權限與 /etc/sudoers 這的檔案有關。 在預設的情況下,只有 root 才能夠使用 sudo 呢!至於編輯 /etc/sudoers 則需要 visudo 這個指令。

……is not in the sudoers file(解决方法)
首先需要切换到root身份
$su -
(注意有- ,这和su是不同的,在用命令"su"的时候只是切换到root,但没有把root的环境变量传过去,还是当前用户的环境变量,用"su -"命令将环境变量也一起带过去,就象和root登录一样)

然后
$visudo

1、移动光标,到最后一行
2、按a,进入append模式
3、输入
your_user_name ALL=(ALL) ALL

上面命令的意思是: 使用者帳號 登入的主機 = (可以變換的身份) 可以下達的指令
4、按Esc
5、输入“:w”(保存文件)
6、输入“:q”(退出)

这样就把自己加入了sudo组,可以使用sudo命令了。
### 关于 `sudo` 命令的用法及原因 #### 一、`sudo` 命令的作用 `sudo` 是 Linux 中的重要系统管理工具,全称为 “Super User Do”,表示以超级用户的身份执行特定命令。该命令的主要功能是让普通用户能够临时获得 root 权限来运行某些需要高权限的操作,从而减少直接使用 root 账户的风险并提高系统的安全性[^1]。 #### 二、为什么需要 `sudo` 由于 root 用户具有完全控制权,任何错误操作都可能导致整个系统的崩溃或数据丢失。为了避免这种情况的发生,现代操作系统提倡尽量不以 root 用户身份登录和操作,而是通过分配有限的特权给普通用户完成必要的管理工作。这种方式既保障了系统的安全性和稳定性,又兼顾了灵活性和便利性[^3]。 #### 三、`sudo` 的基本语法 `sudo` 的通用形式如下所示: ```bash sudo [-hHkKsSbBnEPiLTVv] [command] ``` 其中常用的选项有以下几个: - `-l`: 列出当前用户可以通过 `sudo` 执行的所有命令; - `-v`: 更新时间戳而不实际运行其他命令,用于延长密码的有效期; - `-k`: 清除时间戳文件,下次再次请求时需重新输入密码; - `-u username`: 指定作为哪个用户去执行某条命令,默认为 root; 例如要重启计算机可以这样写: ```bash sudo reboot ``` 如果想查看某个具体用户的可用权限列表,则可执行下面这条语句: ```bash sudo -lU your_username ``` 以上每一步都需要确认目标账户已被加入到 `/etc/sudoers` 配置文件里才有效果[^2]。 #### 四、配置 `sudo` 权限的方法 为了使普通用户具备调用 `sudo` 的资格,必须编辑位于路径下的核心策略文档——`/etc/sudoers` 。推荐采用专门设计的安全编辑器 visudo 进行修改以免破坏原有结构引发严重后果。添加类似这样的行即可赋予指定成员适当权利:“username ALL=(ALL) NOPASSWD:ALL”。 注意这里的关键词解释: - **ALL**: 表明此规则适用于所有的主机环境。 - `(ALL)` : 明确指出允许切换成为任意其它角色来进行作业处理。 - `NOPASSWD:` : 设置之后不再强制验证口令就能生效。 - 最后的那个 `ALL` 同样代表无条件接受任何形式的任务委派。 #### 五、特殊场景讨论 —— Java程序调用 SUDO 当涉及到后台服务比如由 JAVA 编写的 Web 应用尝试发起带有提升权限需求的动作时可能会遇到障碍。这是因为标准流程里面缺少交互式的终端支持 (TTY),而很多发行版默认情况下会检查是否存在有效的 TTY 设备才会批准认证过程继续下去。针对此类情况有两种解决方案可供选择:一是调整应用程序部署方式确保存在关联的伪终端设备;二是更改全局或者局部范围内的 sudoer 定义去掉对于 tty 的依赖限制[^4]。 --- ### 示例代码片段展示如何正确设置免密访问 假设我们要给予名为 'developer' 的新创建账号无需每次都提供额外凭证便能顺利实施各种维护活动的话,可以在上述提到过的配置档位追加这么一段话: ```bash developer ALL=(ALL) NOPASSWD:/bin/mount,/bin/umount ``` 这表明仅授予挂载与卸载磁盘分区这两项特别许可,并且不需要二次鉴权。 另外一种更宽松的形式则是开放几乎无限自由度但仍然保留基础防护机制的存在价值: ```bash developer ALL=(ALL) ALL ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值