2012-07-07 125 views
1

我试图从mysql内执行一个shell命令(从一个过程或触发器或mysql的命令行中)。从mysql执行系统命令

我已经将lib_mysqludf_sys添加到mysql插件并创建了该库可用的函数。 (图书馆)home page

该库有5个功能。

  1. sys_set - 设置$ PATH - 这工作并存储$ PATH,我可以稍后检查。
  2. sys_get - 获取$ PATH的存储值 - 这也适用,并返回我已存储的值。
  3. sys_exec - 在系统中执行命令并返回退出代码。
  4. sys_eval - 在系统中执行命令并返回标准输出。
  5. lib_mysqludf_sys_info - 返回库的当前版本 - 这也适用。

我需要sys_exec和sys_eval才能正常工作。

我想我在我的搜索中发现了这个问题,但无法解决它。

mysql被apparmor限制,并且未被默认apparmor配置文件授予执行系统命令的权限。我已经尝试了文档中的命令来禁用单个配置文件,禁用该框架,将除一个之外的所有配置文件都设置为强制模式,并将所有配置文件置于抱怨模式。什么都没有命令

sudo apparmor_status 

总是给我相同的输出。

20 profiles are loaded. 
20 profiles are in enforce mode. 
    /opt/extras.ubuntu.com/unity-lens-askubuntu/unity-askubuntu-daemon 
    /sbin/dhclient 
    /usr/bin/evince 
    /usr/bin/evince-previewer 
    /usr/bin/evince-previewer//launchpad_integration 
    /usr/bin/evince-previewer//sanitized_helper 
    /usr/bin/evince-thumbnailer 
    /usr/bin/evince-thumbnailer//sanitized_helper 
    /usr/bin/evince//launchpad_integration 
    /usr/bin/evince//sanitized_helper 
    /usr/lib/NetworkManager/nm-dhcp-client.action 
    /usr/lib/connman/scripts/dhclient-script 
    /usr/lib/cups/backend/cups-pdf 
    /usr/lib/lightdm/lightdm/lightdm-guest-session-wrapper 
    /usr/lib/telepathy/mission-control-5 
    /usr/lib/telepathy/telepathy-* 
    /usr/sbin/cupsd 
    /usr/sbin/mysqld 
    /usr/sbin/tcpdump 
    /usr/share/gdm/guest-session/Xsession 
0 profiles are in complain mode. 
5 processes have profiles defined. 
5 processes are in enforce mode.  
    /sbin/dhclient (2537)  
    /usr/lib/telepathy/mission-control-5 (2709) 
    /usr/sbin/cupsd (12245)  
    /usr/sbin/cupsd (12250)  
    /usr/sbin/mysqld (12675) 
0 processes are in complain mode. 
0 processes are unconfined but have a profile defined. 

请告诉我如何禁用apparmor或更改mysql的配置文件,以便它可以访问执行系统命令。

我这样做的原因是,我可以在数据库中发生某些事情(通过数据库触发器)时执行系统命令,如果您有其他方式可以轻松实现的其他方式的建议,请也提到这些。

谢谢。

回答

2

设法得到这个工作。首先将apparmor放入抱怨模式以获取必要的配置文件,然后使用apparmor的交互式工具(aa-genprof/aa-logprof)来配置mysqld的配置文件