[apparmor] [ISSUE]Why my python script can't override the DAC please?

Fei Shao robinshao007 at 163.com
Thu Jan 15 02:05:40 UTC 2026



在 2026-01-15 5:24, John Johansen 写道:
> On 1/14/26 01:19, Fei Shao wrote:
>> Hi all,
>>
>>
>> I write a py script to test the dac_override option, but I failed.
>> The py script is :
>> ----------------------------------------------------
>> #!/usr/bin/env python3
>> import os  # 用于文件/目录的基础操作(删除、判断文件是否存在)
>> import time
>>
>> def create_file(file_path, content="默认初始内容\n"):
>>      try:
>>          if os.path.exists(file_path):
>>              print(f"⚠️ 文件 {file_path} 已存在,跳过新建操作")
>>              return False
>>
>>          with open(file_path, "w", encoding="utf-8") as f:
>>              f.write(content)
>>          print(f"successfully :{file_path}")
>>          return True
>>      except Exception as e:
>>          print(f" failed : {e}")
>>          return False
>>
>>
>> if __name__ == "__main__":
>>      test_file = 
>> "/home/sf/apparmor/test/test_file"+str(int(time.time())) +".txt"
>>      create_file(test_file, "content of file \n")
>> ----------------------------------------------------
>>
>>
>> the profile is :
>> --------------------------------------------------------
>> abi <abi/4.0>,
>>
>> include <tunables/global>
>>
>> profile /home/sf/apparmor/operfile.py {
>>    include <abstractions/base>
>>    include <abstractions/evince>
>>    include <abstractions/python>
>>
>>    capability dac_override,
>>    capability dac_read_search,
>>
>>    /etc/apt/apt.conf.d/ r,
>>    /etc/apt/apt.conf.d/** r,
>>
>>    /home/sf/apparmor/operfile.py r,
>>    /home/sf/apparmor/test/ rwix,
>>    /home/sf/apparmor/test/** rw,
>>
>>    /proc/self/mem r, # 进程内存访问(Python 运行必需)
>>    /sys/devices/** r, # 系统设备信息(可选,视脚本需求)
>>    /tmp/** rw, # 临时文件目录(Python 常用)
>>    /usr/bin/python3.12 mrix,
>>    /var/tmp/** rw, # 系统临时目录
>>    owner /home/*/apparmor/ r,
>>    /usr/lib/python3*/** r,        # Python 库文件读取
>>
>> }
>>
>> ---------------------------------------------------------------
>>
>> I use the command "sudo aa-enforce home.sf.apparmor.operfile.py" to 
>> make sure the profile is loaded.
>>
>> When the attribute of "/home/sf/apparmor/test/" is 755, the script 
>> worked well with command "./operfile.py".
>>
>> When the attribute of "/home/sf/apparmor/test/" is 555,  command 
>> "./operfile.py" returned "failed : [Errno 13] Permission denied: 
>> '/home/sf/apparmor/test/test_file1768381998.txt'". If I use the "sudo 
>> ./operfile.py", the file could be created well.  It seems the 
>> dac_overried doesn't work here.
>>
>
> who is the owner of the file in the failure case, and what is the user
> id of the task trying to access the file.
>
> As Zygmunt has already pointed out the AppArmor capability rule
> doesn't elevate capabilities, it just ensures that the task can have
> the given capability. AppArmor mediation works in conjunction with
> regular DAC mediation, and is purely restrictive, that is to say
> it will not allow something DAC doesn't allow.
>
> While I don't have the full information about your system I am fairly
> sure you are seeing DAC reject access to the file. If you look in your
> system logs, you will find that there isn't an AppArmor denial message
> for this event. Instead what is happening is AppArmor is allowing the
> access but DAC is denying it.
>
>> I checked with "sudo aa-logprof", but no information is returned.
>
> this indicates that there isn't a denial message from apparmor in your 
> logs
>
>> Would you like tell me why the py script can't create file when test 
>> folder is 555 please?
>>
> so as stated above this looks to be a DAC permission issue. Though I
> will add on the AppArmor side the director permissions are not what is
> important (they still are important on the DAC side). Instead AppArmor
> permissions have to be set for the file within the dir (which you do
> have in the profile).

What is the function of the configuration option *|capability 
dac_override|*?

>
>> My os is ubuntu 2404 and my apparmor is 4.0.1.
>>
>> Thanks
>>
>> Fei Shao
>>
>>
>>
>




More information about the AppArmor mailing list