问题描述:Ubuntu 1604 新环境下使用apt安装的mariadb10版本,结果第二天就起不来了,很是郁闷

启动时会卡住,过了一会儿就有返回信息了

启动失败,先查看一下状态 肯定也是不正常的,看一下有没有什么错误输出信息

然后再使用这个查看详细一点的报错

journalctl -xe

当时就只顾着找error关键字,没在意其他的,后来才注意到这个apparmor="DENIED" ,后来查了查,是什么应用程序访问控制系统;想必这个应该是ubuntu特有的安全机制,类似于centos的selinux

好在是新服务器没有什么数据,否则....

下面来看解决方法,打开apparmor这个配置,添加所需要的目录权限即可

例如:如果修改了数据苦库目录可以这样修改一下,因为本机环境是空的所以没有任何参数,如果有参数的话,为了安全起见  可以先copy一个再进行修改即可

原有配置:

/home/mysql/ r,
/home/mysql/** rwk,

修改为:新的数据目录并给予权限

/data/mysql/ r,
/data/mysql/** rwk,

重启AppArmor

/etc/init.d/apparmor reload

再次启动mariadb即可正常启动

如果有防火墙等安全设备的情况下,嫌麻烦也可以直接禁用此服务。

事实上,这个应用是Novell主导的,想必Suse上也有同样的设置,在/etc/apparmor.d目录下的增减文件可以在Linux文件系统权限之外基于程序对文件系统的访问操作进行限制。如果你想要限制一个/a/b的文件,对应的配置文件就是/etc/apparmor.d/a.b。内容应该很好理解了

下面介绍一下apparmor的基本使用

 一:MAC和DAC

    DAC(Discretionary Access Control),自主访问控制,是最常用的一类访问控制机制,意思为主体(文件所有者)可以自主指定系统中其它用户对其文件的所有权,最典型的就是Linux的"拥有者/同组用户/其他"。这种方式虽然为用户提供了很大的灵活性,但是缺乏必要的安全性

    MAC(Mandat-ory Access Control),强制访问控制,在这种机制下,系统中的每一个进程,每一个文件,每一个IPC主体都被管理员按照严格的规则设置了相应的安全属性,不能被用户和其它直接或间接的修改。

  二:Apparmor

    由于SELinux使用复杂,适用于对安全要求特别高的企业或者组织,为了简化操作,就推出了Apparmor,所以可以说Apparmor脱胎于SELinux,但与SELinux基于角色的MAC不同的是,Apparmor是与程序绑定的基于路径的MAC,也就是说如果路径发生改变,策略就会失效。一般的Linux的系统,都会内置以上两种MAC其中的一种,这也意味着,你需要对文件(其它)进行操作,你需要同时通过DAC和 MAC的检测。

      Apparmor有两种工作模式:enforcement、complain/learning

      Enforcement – 在这种模式下,配置文件里列出的限制条件都会得到执行,并且对于违反这些限制条件的程序会进行日志记录。

      Complain – 在这种模式下,配置文件里的限制条件不会得到执行,Apparmor只是对程序的行为进行记录。例如程序可以写一个在配置文件里注明只读的文件,但           Apparmor不会对程序的行为进行限制,只是进行记录。这种模式也叫学习模式,如果某个程序的行为不符合其配置文件的限制,可以将其行为记录到系统日志,并且可以根         据程序的行为,将日志转换成配置文件。

    Apparmor可以对程序进行多方面的限制,详细可以看官方文档,这里只提供几个基本的例子:

      (1)文件系统的访问控制   例:  /home/Desktop/a.c rw 表示程序可以对/home/Desktop/a.c 进行读和写。

      (2)资源限制   例: set rlimit as<=1M ,表示该程序可以使用的虚拟内存小于等于1M

      (3)访问网络   例: network inet tcp ,表示该程序可以在IPV4的情况下使用TCP协议  

      (4)capability条目 例:capability setgid,表示程序进行setgid操作。

  三:基本使用

    ubuntu自带Apparmor,所以以ubuntu14.04为例。

    最好先安装了apparmor的管理工具套装:apt-get install apparmor-utils

    测试程序源码如下:

#include<stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
  FILE *f;
  int nn, i; char ch;
  if(3 == argc){
    f = fopen(argv[1], "w");
  if(f == NULL){ printf("Open file %s with write ERROR\n", argv[1]);
  return 2;
   }
 nn = strlen(argv[2]);
i = 0;
while(i < nn){
  fputc(argv[2][i], f);
  ++i;
 }
fclose(f);
}else if(argc == 2){
  f = fopen(argv[1], "r");
  if(NULL == f){
    printf("Open file %s with read ERROR\n", argv[1]);
    return 2;
  }
  while((ch=fgetc(f)) != EOF){
    printf("%c", ch);
   }
  printf("\n");
  fclose(f);
}else{
  printf("Usage: test file **\n");
  return 3;
}    return 0;
}

  基本功能是对文件进行读写,使用如下:

  ./test a.c "hello,world"进行写

  ./test a.c 进行读

  可以根据 aa-genprof 生成配置文件,生成的文件在/etc/apparmor.d下,文件名为home.jdchen.test

   

  生成的文件如下:

# Last Modified: Fri Nov 11 03:54:40 2016
#include <tunables/global> /home/jdchen/test {
#include <abstractions/base> }

  由于apparmor采取类似于白名单的机制,所以不能进行任何操作。

  

  现在给配置文件添加可写的权限并重新加载。

# Last Modified: Fri Nov 11 03:54:40 2016
#include <tunables/global> /home/jdchen/test {
#include <abstractions/base>
/home/jdchen/a.c w, }

  然后介绍几个命令:

    Start : sudo /etc/init.d/apparmor start 启动

    Stop : sudo /etc/init.d/apparmor stop 停止

    reload: sudo /etc/init.d/apparmor reload 重新加载

  在修改配置之后,需要重载:

   

  可以试着查看一下日志,节选:

ov 11 04:23:53 ubuntu kernel: [ 2419.881291] audit_printk_skb: 15 callbacks suppressed
Nov 11 04:23:53 ubuntu kernel: [ 2419.881306] audit: type=1400 audit(1478867033.872:204): apparmor="DENIED" operation="open" profile="/home/jdchen/test" name="/home/jdchen/a.c" pid=4108 comm="test" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
Nov 11 04:24:07 ubuntu kernel: [ 2433.212034] audit: type=1400 audit(1478867047.204:205): apparmor="DENIED" operation="open" profile="/home/jdchen/test" name="/home/jdchen/a.c" pid=4111 comm="test" requested_mask="r" denied_mask="r" fsuid=0 ouid=0

  如果不需要配置,可以直接将配置文件删除。

ubuntu1604环境下mariadb启动卡住报错和apparmor基本使用的更多相关文章

  1. Eclipse启动项目正常,放到tomcat下单独启动就报错的 一例

    一个老的ssh的项目,进行二次开发(增加一些新功能)后, 首先用Eclipse中集成的Tomcat启动没有任何问题,但是把启动后的webapps下得目录放到 windows的普通tomcat下单独启动 ...

  2. window环境下npm install node-sass报错

    最近准备想用vue-cli初始化一个项目,需要sass-loader编译: 发现window下npm install node-sass和sass-loader一直报错, window 命令行中提示我 ...

  3. ha环境下重新格式化hdfs报错

    datanode启动不成功,如下所示,我的136,137.138都是datanode,都启动不了. 查看datanode日志文件发现报错: 一个报错Incompatible clusterIDs in ...

  4. thinkphp 5.0 lnmp环境下 无法访问,报错500(public目录)

    两种方法: 1.修改fastcgi的配置文件 /usr/local/nginx/conf/fastcgi.conf fastcgi_param PHP_ADMIN_VALUE "open_b ...

  5. windows环境下安装scrapy框架报错问题--最快捷有效的解决方案

    windows在执行如下命令,安装scrapy的过程中会报错: pip install scrapy 报错分析: windows环境下,会出现如下错误: 1.提示的错误是编译环境的问题,字面意思看需要 ...

  6. windows10环境下pip安装Scrapy报错

    问题描述 当前环境win10,python_3.6.1,64位. 在windows下,在dos中运行pip install Scrapy报错: building 'twisted.test.raise ...

  7. ubuntu环境下重启mysql服务报错“No directory, logging in with HOME=-”

    前提:使用系统的环境 3.13.0-24-generic mysql的版本:5.6.33 错误描述: 首先用mysqld_safe启动报错如下: root@zabbix-forFunction:~# ...

  8. Mac下idea启动H5报错:xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Deve

    1. 执行“ xcodebuild -showsdks ”,报错如下“xcode-select: error: tool 'xcodebuild' requires Xcode, but active ...

  9. ubuntu12.04下root启动wireshark报错解决办法

    在ubuntu11.10以后版本中发现,安装wireshark后用root权限启动,弹出如下错误: Running as user “root” and group “root”. This coul ...

随机推荐

  1. Spring Data Jpa的四种查询方式

    一.调用接口的方式 1.基本介绍 通过调用接口里的方法查询,需要我们自定义的接口继承Spring Data Jpa规定的接口 public interface UserDao extends JpaR ...

  2. jqery 动态添加元素 绑定事件

    jQuery动态添加元素: var url = "...";//服务地址 $.ajax({ type: 'post', url: url, data:{fireId:fireId} ...

  3. 为什么现在使用多周期CPU,而单周期CPU被弃用?

    最初设计的CPU结构简单,内部不复杂.之所以制造它是为了让机器自动跑程序,算数. 早期CPU都是单周期的,人们没考虑那么多,性能啥的.就让CPU每个时钟周期跑一个指令,这些时钟周期等长.这样下来,有的 ...

  4. 移动前端不得不了解的HTML5 head 头标签 —— Meta 标签

    Meta 标签 meta标签是HTML中head头部的一个辅助性标签,它位于HTML文档头部的 <head> 和 <title> 标记之间,它提供用户不可见的信息.虽然这部分信 ...

  5. CF600E Lomsat gelral (启发式合并)

    You are given a rooted tree with root in vertex 1. Each vertex is coloured in some colour. Let's cal ...

  6. webpack(四) --css样式及图片打包

    一.CSS样式打包 1. loader简介 由于Webpack打包入口目前只配置了一个index.js文件,那么其他需要被打包的文件都必须通过模块化方式引入该文件才行,而默认情况下,引入的文件必须是j ...

  7. Python实现截图功能你肯定不会吧?【面试必学】

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:CyborgLin python实现截图功能. windows环境下.需 ...

  8. 大数据学习笔记——Java篇之集合框架(ArrayList)

    Java集合框架学习笔记 1. Java集合框架中各接口或子类的继承以及实现关系图: 2. 数组和集合类的区别整理: 数组: 1. 长度是固定的 2. 既可以存放基本数据类型又可以存放引用数据类型 3 ...

  9. 3年Java开发都知道的Redis数据结构和通用命令

    Redis的数据结构 Redis支持多种不同的数据结构,包括5种基础数据结构和几种比较复杂的数据,这些数据结构可以满足不同的应用场景. 五种基础数据结构 String:字符串,是构建其他数据结构的基础 ...

  10. C语言每日一练——第3题

    一.题目要求 程序功能:计算100以内满足以下条件的所有整数i的个数cnt以及这些i之和sum.条件:i, i+4 ,i+10都是素数,同时i+10小于100.最后电影函数writeDAT()函数把结 ...