AppArmor : Create Profiles : aa-genprof2024/06/18 |
Create a profile for a program with [aa-genprof] command. |
|
[1] | For example, create a test script and also create a profile for it to run normally. |
# create a test script
root@dlp:~# cat > /usr/local/bin/nodejs_test.js <<'EOF'
var http = require('http');
var server = http.createServer(function(req, res) {
res.write("Hello, This is the Node.js Simple Web Server!\n");
res.end();
}).listen(8080);
EOF
root@dlp:~# node /usr/local/bin/nodejs_test.js & [1] 7176 root@dlp:~# curl localhost:8080 Hello, This is the Node.js Simple Web Server!
root@dlp:~#
kill 7176 # create a profile for it above root@dlp:~# aa-genprof /usr/bin/node
Updating AppArmor profiles in /etc/apparmor.d.
Writing updated profile for /usr/bin/node.
Setting /usr/bin/node to complain mode.
Before you begin, you may wish to check if a
profile already exists for the application you
wish to confine. See the following wiki page for
more information:
https://gitlab.com/apparmor/apparmor/wikis/Profiles
Profiling: /usr/bin/node
Please start the application to be profiled in
another window and exercise its functionality now.
Once completed, select the "Scan" option below in
order to scan the system logs for AppArmor events.
For each AppArmor event, you will be given the
opportunity to choose whether the access should be
allowed or denied.
[(S)can system log for AppArmor events] / (F)inish
# stdout stops here
# it needs to operate all required operations for the target application on another terminal
# to log required operations in a logfile,
# after finishing all required operations, push [f(F)] key to finish,
# then [aa-genprof] finishes
Setting /usr/bin/node to enforce mode.
Reloaded AppArmor profiles in enforce mode.
Please consider contributing your new profile!
See the following wiki page for more information:
https://gitlab.com/apparmor/apparmor/wikis/Profiles
Finished generating profile for /usr/bin/node.
# for the case with [aa-genprof], target app will be entered in [enforce] mode control root@dlp:~# aa-status apparmor module is loaded. 113 profiles are loaded. 24 profiles are in enforce mode. /usr/bin/man /usr/bin/node ..... ..... # created profile root@dlp:~# cat /etc/apparmor.d/usr.bin.node # Last Modified: Tue Jun 18 00:57:50 2024 abi <abi/3.0>, include <tunables/global> /usr/bin/node { include <abstractions/base> /usr/bin/node mr, } # start the application # * if all required operations are not learned by logs, some errors occur root@dlp:~# node /usr/local/bin/nodejs_test.js Cannot load externalized builtin: "internal/deps/cjs-module-lexer/lexer:/usr/share/nodejs/cjs-module-lexer/lexer.js". ..... # if target app does not run normally, change it to [complain] mode and operate it again to learn all root@dlp:~# aa-complain aa-complain usr.bin.node Setting /etc/apparmor.d/usr.bin.node to complain mode. root@dlp:~# node /usr/local/bin/nodejs_test.js & [1] 7710 root@dlp:~# curl localhost:8080 Hello, This is the Node.js Simple Web Server!
root@dlp:~#
kill 7710
# read unauthorized actions in logs # logs are recorded in [/var/log/audit/audit.log] if Auditd is running # if Auditd is not installed, logs are recorded in [/var/log/syslog] root@dlp:~# aa-logprof Updating AppArmor profiles in /etc/apparmor.d. Reading log entries from /var/log/syslog. Complain-mode changes: Profile: /usr/bin/node Capability: ipc_lock Severity: 8 [1 - include <abstractions/nvidia>] 2 - capability ipc_lock, # set policy to the unauthorized action (A)llow / [(D)eny] / (I)gnore / Audi(t) / Abo(r)t / (F)inish Adding include <abstractions/nvidia> to profile. Profile: /usr/bin/node Capability: sys_admin Severity: 10 [1 - capability sys_admin,] (A)llow / [(D)eny] / (I)gnore / Audi(t) / Abo(r)t / (F)inish Adding capability sys_admin, to profile. ..... ..... = Changed Local Profiles = The following local profiles were changed. Would you like to save them? [1 - /usr/bin/node] # Finally, save your changes (S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)t # back to the [enforce] mode and verify target app runs normally root@dlp:~# aa-enforce usr.bin.node Setting /etc/apparmor.d/usr.bin.node to enforce mode. root@dlp:~# node /usr/local/bin/nodejs_test.js & [1] 7757 root@dlp:~# curl localhost:8080 Hello, This is the Node.js Simple Web Server!
root@dlp:~#
7757 17110
# completed profile for the app root@dlp:~# cat /etc/apparmor.d/usr.bin.node # Last Modified: Tue Jun 18 01:16:37 2024 abi <abi/3.0>, include <tunables/global> /usr/bin/node { include <abstractions/apache2-common> include <abstractions/base> include <abstractions/consoles> include <abstractions/nvidia> capability dac_override, capability sys_admin, /usr/bin/node mr, owner /proc/*/cgroup r, owner /proc/version_signature r, owner /sys/fs/cgroup/user.slice/user-0.slice/session-1.scope/memory.high r, owner /sys/fs/cgroup/user.slice/user-0.slice/session-1.scope/memory.max r, owner /sys/fs/cgroup/user.slice/user-1000.slice/session-8.scope/memory.high r, owner /sys/fs/cgroup/user.slice/user-1000.slice/session-8.scope/memory.max r, owner /usr/local/bin/nodejs_test.js r, owner /usr/share/nodejs/acorn-walk/dist/walk.js r, owner /usr/share/nodejs/acorn/dist/acorn.js r, owner /usr/share/nodejs/cjs-module-lexer/dist/lexer.js r, owner /usr/share/nodejs/cjs-module-lexer/lexer.js r, owner /usr/share/nodejs/undici/undici-fetch.js r, } |
Sponsored Link |