从mysql执行系统命令

时间:2012-07-07 15:36:57

标签: mysql linux user-defined-functions ubuntu-12.04

我正在尝试从mysql内部执行shell命令(从过程或触发器或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 - 返回库的当前版本 - 这也有效。
  6. 我需要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的配置文件,以便它可以访问执行系统命令。

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

    感谢。

1 个答案:

答案 0 :(得分:2)

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