问题描述: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. Integer的比较==和String的比较==总结

    一.序言 今天发现了一个很有趣的问题,在群里和朋友们讨论的也比较激烈,我现在给大家阐述一下问题. 二.发现问题 上代码... package com.hzwealth.test.question; p ...

  2. linux下创建mysql用户和数据库,并绑定

    Linux下输入命令: mysql -uroot -proot123 进入mysql后输入: 查看目前有哪些数据库存在:mysql> SHOW DATABASES; 创建数据库:create s ...

  3. 【Java】Java中的final关键字和static

    0.概述 final关键字表示是不可变的: 下面分别从属性(字段).方法.类中进行说明: 1.属性(or字段),表示常量 final声明在属性(or字段)中,表示常量,有两种初始化方法,1是在声明时直 ...

  4. linux免密登录和设置别名

    一.免密登录 (1) 配置公钥   ssh-keygen (2)让远程服务器记住公钥   ssh-copy-id   用户名@ip地址或域名 二.设置别名 (3)在~/.ssh目录下创建并编辑conf ...

  5. 解决mysql java.sql.SQLException: The server time zone value‘XXXXXX' is unrecognized or represents...

    解决 java.sql.SQLException: The server time zone value 'XXXXXX' is unrecognized or represents more tha ...

  6. shell配置mysql主从

    Environment:CentOS7两台主机 一台做主机,一台做备份机 注意: 首先第一步关闭两台机器的防火墙 主机shell操作: #!/bin/bash slave_user='zjt' sla ...

  7. Tensorflow Serving Docker compose 部署服务细节(Ubuntu)

    [摘要] Tensorflow Serving 是tf模型持久化的重要工具,本篇介绍如何通过Docker compose搭建并调试TensorFlow Serving TensorFlow Servi ...

  8. Reactive(1) 从响应式编程到"好莱坞"

    目录 概念 面向流设计 异步化 响应式宣言 参考文档 概念 Reactive Programming(响应式编程)已经不是一个新东西了. 关于 Reactive 其实是一个泛化的概念,由于很抽象,一些 ...

  9. TCP 的三次握手,四次挥手和重要的细节—干货满满,建议细读

    最近把个人博客搭建好了,链接在这里:tobe的呓语,文章会先在博客和公众号更新~ 大家多多收藏啊 上一次讲了 UDP 协议,从这次开始,就要讲 TCP 协议了,因为 TCP 协议涉及到的东西很多,一篇 ...

  10. 配置基于全局地址池的DHCP

    配置基于全局地址池的DHCP 配置基于全局地址池的DHCP服务器,从所有接口上的用户都可以选择该地址池中的地址,是个公共地址池. 实验 1.拓扑图 2.实验步骤 基本配置 开启DHCP功能 创建一个全 ...