æè¿ãããªãå€ãã®äººããã³ã³ããå
ã§æœåšçã«å®å
šã§ãªãã¢ããªã±ãŒã·ã§ã³ãããã¯ããããã ãã«ã³ã³ããä»®æ³åã䜿çšããŠããã®ãèŠãŠããŸããã ååãšããŠã圌ãã¯ãã®æ®åã®ããã«ããã«Dockerã䜿çšããããè¯ãããšã¯ç¥ããŸããã å®éãå€ãã®ããŒã¢ã³ã¯æåã«rootãšããŠèµ·åããããã®åŸãç¹æš©ãäžãããããã¹ã¿ãŒããã»ã¹ãäœãç¹æš©ã§åŠçããã»ã¹ãçæããŸãã ãããŠãã«ãŒãããã®ã¿æ©èœãããã®ããããŸãã æ倧ã®æš©éã§ã¢ã¯ã»ã¹ãèš±å¯ããããŒã¢ã³ã«è匱æ§ãèŠã€ãã£ãå Žåããã§ã«ãã¹ãŠã®ããŒã¿ãããŠã³ããŒãããŠãŠã€ã«ã¹ãæ®ããŠãã䟵å
¥è
ãæ€åºããããšã¯ããŸãå¿«é©ã§ã¯ãããŸããã
Dockerãä»ã®åæ§ã®ãœãããŠã§ã¢ã«ãã£ãŠæäŸãããã³ã³ãããŒåã¯ããã®åé¡ãæ¬åœã«è»œæžããŸãããæ°ãããã®ããããããŸããåããŒã¢ã³ã®ã³ã³ãããŒãäœæããå€æŽããããã¡ã€ã«ã®å®å
šãå®ããããŒã¹ã€ã¡ãŒãžãæŽæ°ããå¿
èŠããããã³ã³ãããŒèªäœã¯å€ãã®å Žåãå¿
èŠãªç°ãªãOSã«åºã¥ããŠããŸããã£ã¹ã¯ã«ä¿åããŸãããäžè¬çã«ã¯ç¹ã«å¿
èŠãããŸããã ã³ã³ãããå¿
èŠãªãå Žåãã¢ããªã±ãŒã·ã§ã³ãDocker Hubã§å¿
èŠãªæ¹æ³ã§ãã«ããããŠããããããŒãžã§ã³ãéæšå¥šã§ãããSELinuxãšAppArmorãè€éããããšæãããå Žåã¯ãç°å¢ã§å®è¡ãããããåããã®ã䜿çšããå ŽåDockerã䜿çšããåé¢ã¯ãããŸããïŒ
èœå
éåžžã®ãŠãŒã¶ãŒãšã«ãŒãã®éãã¯äœã§ããïŒ rootããããã¯ãŒã¯ã管çããã«ãŒãã«ã¢ãžã¥ãŒã«ãããŒããããã¡ã€ã«ã·ã¹ãã ãããŠã³ããããã¹ãŠã®ãŠãŒã¶ãŒã®ããã»ã¹ã匷å¶çµäºã§ããéåžžã®ãŠãŒã¶ãŒã¯ãã®ãããªæ©äŒã奪ãããŠããã®ã¯ãªãã§ããïŒ ãã¹ãŠã®
æ©èœ ãã€ãŸãç¹æš©ã管çããããã®ããŒã«ã§ãã ãããã®ãã¹ãŠã®ç¹æš©ã¯ãããã©ã«ãã§UID 0ïŒã€ãŸããrootïŒã®ãŠãŒã¶ãŒã«äžããããéåžžã®ãŠãŒã¶ãŒã«ã¯ãããã®ãããããããŸããã ç¹æš©ã¯ãä»äžãŸãã¯åé€ããããšãã§ããŸãã ããšãã°ãéåžžã®pingã³ãã³ãã§ã¯RAWãœã±ãããäœæããå¿
èŠããããŸãããããã¯éåžžã®ãŠãŒã¶ãŒã«ä»£ãã£ãŠè¡ãããšã¯ã§ããŸããã ãããŸã§ãpingã«ã¯SUIDãã©ã°ãèšå®ãããŠããŸãããããã¯åã«ã¹ãŒããŒãŠãŒã¶ãŒã®ä»£ããã«ããã°ã©ã ãå®è¡ããŠããŸããããçŸåšã®ãã¹ãŠã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ã¯CAP_NET_RAWæ©èœãèšå®ãããã©ã®ã¢ã«ãŠã³ãããã§ãpingãå®è¡ã§ããŸãã
libcapãã
getcap
ã³ãã³ãã䜿çšããŠããã¡ã€ã«ã®ã€ã³ã¹ããŒã«æžã¿æ©èœã®ãªã¹ããååŸã§ããŸãã
% getcap $(which ping) /usr/bin/ping = cap_net_raw+ep
ããã§
pãã©ã°ã¯
èš±å¯ãããŸãã ã¢ããªã±ãŒã·ã§ã³ã«ã¯æå®ãããæ©èœã䜿çšããæ©èœãããã
eã¯
å¹æçã§ã -ã¢ããªã±ãŒã·ã§ã³ã¯ããã䜿çšããŸãããŸãã
iãã©ã°ããããŸã-
ç¶æ¿å¯èœã§ã
execve()
é¢æ°ãåŒã³åºããããšãã«æ©èœãªã¹ããä¿åã§ããŸãã
æ©èœã¯ãFSã¬ãã«ãšãåå¥ã®ããã°ã©ã ã¹ããªãŒã ã®äž¡æ¹ã§èšå®ã§ããŸãã ããŒã³ã以æ¥å©çšã§ããªãã£ãæ©èœãååŸããããšã¯äžå¯èœã§ãã ç¹æš©ãæžããããšã¯ã§ããŸãããå¢ããããšã¯ã§ããŸããã
ã»ãã¥ã¢ãããããããŸãã3ã€ãããŸããKEEP_CAPSã䜿çšãããšãsetuidãåŒã³åºããšãã«æ©èœãä¿åã§ããŸããNO_SETUID_FIXUPã¯ãsetuidãåŒã³åºããšãã«æ©èœã®åæ§æãç¡å¹ã«ããNOROOTã¯ãsuidããã°ã©ã ãå®è¡ãããšãã«è¿œå ã®ç¹æš©ãçºè¡ããããšãçŠæ¢ããŸãã
åå空é
åå空éã«ã¢ããªã±ãŒã·ã§ã³ãé
眮ããæ©èœã¯ãLinuxã«ãŒãã«ã®ãã1ã€ã®æ©èœã§ãã 以äžã«å¯ŸããŠåå¥ã®åå空éãå®çŸ©ã§ããŸãã
- ãã¡ã€ã«ã·ã¹ãã
- UTSïŒãã¹ãåïŒ
- System V IPCïŒããã»ã¹ééä¿¡ïŒ
- ãããã¯ãŒã¯
- PID
- ãŠãŒã¶ãŒ
ããšãã°ãã¢ããªã±ãŒã·ã§ã³ãå¥ã®ãããã¯ãŒã¯ã¹ããŒã¹ã«é
眮ãããšããã¹ãããèŠãããããã¯ãŒã¯ã¢ããã¿ãŒãèŠãããšãã§ããªããªããŸãã ãã¡ã€ã«ã·ã¹ãã ã§ãåãããšãã§ããŸãã
systemd
幞ããªããšã«ãsystemdã¯ãã¢ããªã±ãŒã·ã§ã³ãåé¢ããæš©å©ãåºå¥ããããã«å¿
èŠãªãã¹ãŠããµããŒãããŠããŸãã
ãããã®æ©èœã䜿çšããŸãããæåã«ã¢ããªã±ãŒã·ã§ã³ã«å¿
èŠãªæš©å©ã«ã€ããŠå°ãèããŸãã
ããã§ã¯ãæªéãšã¯äœã§ããïŒ éåžžãã¹ãŒããŒãŠãŒã¶ãŒã®æš©éãå¿
èŠãšãããªããã®ãããããããã¯1024æªæºã®ããŒãããªãã¹ã³ããããã ãã«äœ¿çšããŸãããã®ãããªããã°ã©ã æ©èœCAP_NET_BIND_SERVICEãçºè¡ããã ãã§ååã§ãã
setcap
ã³ãã³ãã䜿çšããŠããã¡ã€ã«ã«æ©èœãã€ã³ã¹ããŒã«ã§ããŸãã å®éšçãªããµãŒãã¹ããšããŠãnmapã®ncatã䜿çšããŸããããã«ãããå¿
èŠãªäººã«ã·ã§ã«ã¢ã¯ã»ã¹ãæäŸãããŸããããã«æªãããšã¯æ³åã§ããŸããã
% sudo setcap CAP_NET_BIND_SERVICE=ep /usr/bin/ncat % getcap /usr/bin/ncat /usr/bin/ncat = cap_net_bind_service+ep
nobodyãŠãŒã¶ãŒã«ä»£ãã£ãŠãããŒã81ã§å¿
èŠãªãã©ã¡ãŒã¿ãŒãæå®ããŠncatãå®è¡ããæãåçŽãªsystemdãŠããããäœæããŸãã
[Unit] Description=Vuln [Service] User=nobody ExecStart=/usr/bin/ncat
/etc/systemd/system/vuln.service
ä¿åããéåžžã®
sudo systemctl start vulnãå®è¡ããŸãã
ç§ãã¡ã¯ããã«æ¥ç¶ããŠããŸãïŒ
ããŸããããŸãïŒ
ãã®systemdã«ã¯æ¬¡ã®ãã£ã¬ã¯ãã£ããããããããµãŒãã¹ãä¿è·ãããšãã§ãã
- CapabilityBoundingSet = -æ©èœãå¶åŸ¡ããŸãã ãã«ãæåããããæåã®åã«ããå Žåããã®ãã©ã¡ãŒã¿ã§è»¢éããããã®ã®ã¿ãèšå®ããŸããéãåæ§ã§ãã
- SecureBits = -ã»ãã¥ãªãã£ããããèšå®ããŸãã
- Capabilities = - æ©èœã管çããŸãããFSã¬ãã«ã§ãã¡ã€ã«ã«èšè¿°ãããæ©èœã«å©ç¹ããããããå®çšçã§ã¯ãããŸããã
- ReadWriteDirectories =ãReadOnlyDirectories =ãInaccessibleDirectories = -ãã¡ã€ã«ã·ã¹ãã ã®åå空éã管çããŸãã ããŒã¢ã³åå空éå
ã§ãã¡ã€ã«ã·ã¹ãã ãåããŠã³ãããŠãæå®ããããã£ã¬ã¯ããªãèªã¿åããšæžã蟌ã¿ã«äœ¿çšã§ããããã«ããããèªã¿åãå°çšã«ãããããŸã£ãã䜿çšã§ããªãããã«ããŸãïŒç©ºã«ãªããŸãïŒã
- PrivateTmp = -åå空éå
ã®ç¬èªã®tmpfsã«/ tmpããã³/ var / tmpãåããŠã³ãããŸãã
- PrivateDevices = -/ devããããã€ã¹ãžã®ã¢ã¯ã»ã¹ãéžæãã/ dev / nullã/ dev / zeroã/ dev / randomãªã©ã®æšæºããã€ã¹ãžã®ã¢ã¯ã»ã¹ã®ã¿ãæ®ããŸãã
- PrivateNetwork = -åäžã®loã€ã³ã¿ãŒãã§ã€ã¹ã§ç©ºã®ãããã¯ãŒã¯åå空éãäœæããŸãã
- ProtectSystem = -/ usrãš/ bootãèªã¿åãå°çšã¢ãŒãã§ããŠã³ãããŸããåŒæ°ãfullããæž¡ããšã/ etcã§ãåãããšãè¡ãããŸãã
- ProtectHome = -/ homeã/ rootãããã³/ run / userãã£ã¬ã¯ããªã«ã¢ã¯ã»ã¹ã§ããªãããã«ãããããèªã¿åãå°çšããã©ã¡ãŒã¿ã䜿çšããŠèªã¿åãå°çšã¢ãŒãã§åããŠã³ãããŸã
- NoNewPrivileges = -ã¢ããªã±ãŒã·ã§ã³ãè¿œå ã®ç¹æš©ãåãåããªãããšã確èªã§ããŸãã èè
ã«ãããšãããã¯å¯Ÿå¿ããæ©èœããã匷åã§ãã
- SystemCallFilter = -seccompãã¯ãããžãŒã䜿çšããŠã·ã¹ãã ã³ãŒã«ããã£ã«ã¿ãªã³ã°ããŸãã ããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãã
ãããã®ãªãã·ã§ã³ã䜿çšããŠãŠããããã¡ã€ã«ãæžãæããŸãããã
[Unit] Description=Vuln [Service] User=nobody ExecStart=/usr/bin/ncat --exec /bin/bash -l 81 --keep-open --allow ::1 CapabilityBoundingSet=CAP_NET_BIND_SERVICE InaccessibleDirectories=/sys PrivateTmp=true PrivateDevices=true ProtectHome=true ProtectSystem=full
ãã®ãããã¢ããªã±ãŒã·ã§ã³ã«1ã€ã®æ©èœCAP_NET_BIND_SERVICEãä»äžããåå¥ã®/ tmpããã³/ var / tmpãäœæããããã€ã¹ããã³ããŒã ãã£ã¬ã¯ããªãžã®ã¢ã¯ã»ã¹ãéžæããèªã¿åãå°çšã¢ãŒãã§/ usrã/ bootããã³/ etcãåããŠã³ãããåå¥ã«ãããã¯/ sysãt .kã å
žåçãªããŒã¢ã³ãããã«å°éããå¯èœæ§ã¯äœããããã¯ãã¹ãŠãŠãŒã¶ãŒã«ä»£ãã£ãŠè¡ãããŸãã
CapabilityBoundingSetã§ã¯ãsuãsudoãªã©ã®suid-applicationã§ããè¿œå ã®æ©èœãååŸã§ããªãããããã¹ã¯ãŒããç¥ã£ãŠããŠããå¥ã®ãŠãŒã¶ãŒãŸãã¯ã«ãŒãã«ä»£ãã£ãŠã¢ã¯ã»ã¹ããããšã¯ã§ããŸããã ã«ãŒãã«ã¯setuidããã³setgidåŒã³åºããèš±å¯ããŸããã
% ncat ::1 81 python -c 'import pty; pty.spawn("/bin/bash")' # pty, sudo su [nobody@valaptop /]$ sudo -i # setuid() setgid() sudo: unable to change to root gid: Operation not permitted sudo: unable to initialize policy plugin [nobody@valaptop /]$ ping # capability cap_net_raw bash: /usr/sbin/ping: Operation not permitted [nobody@valaptop /]$ cd /home bash: cd: /home: Permission denied [nobody@valaptop /]$ ls -lad /home d--------- 2 root root 40 Nov 3 11:46 /home [nobody@valaptop tmp]$ ls -la /tmp total 4 drwxrwxrwt 2 root root 40 Nov 5 00:31 . drwxr-xr-x 19 root root 4096 Nov 3 22:28 ..
2çªç®ã®ã¿ã€ãã®ããŒã¢ã³ãã«ãŒããšããŠå®è¡ãããç¹æš©ãäžããããŒã¢ã³ã«ã€ããŠèããŠã¿ãŸãããã ãã®ã¢ãããŒãã¯å€ãã®ç®çã§äœ¿çšãããŸãïŒã¹ãŒããŒãŠãŒã¶ãŒïŒWebãµãŒããŒã§TLSã䜿çšããããã®ç§å¯éµãªã©ïŒããã®ã¿ã¢ã¯ã»ã¹å¯èœãªæ©å¯ãã¡ã€ã«ã®èªã¿åããéã«ãŒããã©ãŒã¯ã䟵害ãããå Žåã«å©çšã§ããªããã°ã®ç¶æãããã³ä»»æã®ã¢ããªã±ãŒã·ã§ã³ã®ã¿UIDïŒssh-serversãftp-serversïŒãå€æŽããŸãã ãã®ãããªããã°ã©ã ãåé¢ãããŠããªãå Žåãèµ·ããããææªã®äºæ
ã¯ãæ»æè
ãã¹ãŒããŒãŠãŒã¶ãŒã«ä»£ãã£ãŠãã«ã¢ã¯ã»ã¹ãååŸããããšã§ãã rootã«åºæã®æ©èœã®æ¬ åŠã«ããã圌ã¯ã»ãšãã©æ®éã®éç¹æš©ãŠãŒã¶ãŒã«ãªããŸãããrootã¯ã圌ãèªã¿åãããšãã§ãã圌ã«å±ãããã¡ã€ã«ã®æãšãšãã«rootã®ãŸãŸã§ãããã®ãããããŒãä¿ç®¡ã§ãããã£ã¬ã¯ããªããªããèªãã¹ãã§ã¯ãªãèšå®ãã¡ã€ã«ïŒ
[Unit] Description=Vuln [Service] ExecStart=/usr/bin/ncat --exec /bin/bash -l 81 --keep-open --allow ::1 CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_SETUID CAP_SETGID NoNewPrivileges=yes InaccessibleDirectories=/sys InaccessibleDirectories=/etc/openvpn InaccessibleDirectories=/etc/strongswan InaccessibleDirectories=/etc/nginx ReadOnlyDirectories=/proc PrivateTmp=true PrivateDevices=true ProtectHome=true ProtectSystem=full
ããã§ã¯ãæ©èœCAP_SETUIDããã³CAP_SETGIDãè¿œå ããŠãããŒã¢ã³ãæš©éãäžããNoNewPrivilegesã䜿çšããŠæ©èœãå¢ãããªãããã«ããèªã¿åãã¹ãã§ãªããã£ã¬ã¯ããªãžã®ã¢ã¯ã»ã¹ããããã¯ãã/ procãžã®èªã¿åãå°çšã¢ã¯ã»ã¹ãèš±å¯ããŸãsysctlã䜿çšã§ããŸããã§ããã ãŸããã«ãŒãå
šäœãèªã¿åãå°çšã§äžåºŠã«ããŠã³ãããããã°ã©ã ã䜿çšãããã£ã¬ã¯ããªã«ã®ã¿æžã蟌ã¿æš©éãä»äžããããšãã§ããŸãã
/ etc / shadowãã¡ã€ã«ã®æš©éãåå¥ã«ç¢ºèªããå¿
èŠããããŸãã ææ°ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ã¯ãrootã§ãèªããªããããCAP_DAC_OVERRIDEæ©èœã䜿çšããŠäœæ¥ããŸããããã«ãããã¢ã¯ã»ã¹æš©ãç¡èŠã§ããŸãã
% ls -la /etc/shadow
èšå®ã確èªããŠãã ããïŒ
python -c 'import pty; pty.spawn("/bin/bash")' # pty [root@valaptop /]# whoami root [root@valaptop /]# ping # capability cap_net_raw bash: /usr/sbin/ping: Operation not permitted [root@valaptop /]# cat /etc/shadow # CAP_DAC_OVERRIDE cat: /etc/shadow: Permission denied [root@valaptop /]# cd /etc/openvpn bash: cd: /etc/openvpn: Permission denied [root@valaptop /]# /suid # SUID shell [root@valaptop /]# cat /etc/shadow # - shell, cat: /etc/shadow: Permission denied
æ®å¿µãªãããsystemdã¯ïŒä»ã®ãšããïŒPIDåå空éãæäœããæ¹æ³ãç¥ããªããããã«ãŒãããŒã¢ã³ã¯ã«ãŒããšããŠå®è¡ãããŠããä»ã®ããã°ã©ã ã匷å¶çµäºã§ããŸãã
äžè¬ã«ãããã§çµäºããããšã¯å¯èœã§ããæ©èœãšåå空éã®èšå®ã¯ã¢ããªã±ãŒã·ã§ã³ãåé¢ããã®ã«è¯ãä»äºãããŸãããèšå®ããã®ãçŽ æŽãããããäžã€ã®ããšããããŸãã
seccomp
Seccompãã¯ãããžãŒã¯ãããã°ã©ã ãç¹å®ã®ã·ã¹ãã ã³ãŒã«ãè¡ãããšãé²ããå®è¡ããããšãããšããã«åŒ·å¶çµäºããŸãã seccompã¯ããªãåã«ç»å ŽããŸãããã2005幎ã«ã¯ãChrome 20ãvsftpd 3.0ãããã³OpenSSH 6.0ã®ãªãªãŒã¹ã«ãããæ¯èŒçæè¿äœ¿çšããå§ããŸããã
seccompã䜿çšããã«ã¯ããã©ãã¯ãªã¹ããšãã¯ã€ããªã¹ãã®2ã€ã®ã¢ãããŒãããããŸãã æœåšçã«å±éºãªã³ãŒã«ããã©ãã¯ãªã¹ãã«ç»é²ããããšã¯ããã¯ã€ããããèããåçŽãªã®ã§ããã®ã¢ãããŒããããé »ç¹ã«äœ¿çšãããŸãã
firejailãããžã§ã¯ãã¯ãããã©ã«ãã§ããã°ã©ã ã次ã®syscallãå®è¡ããããšãçŠæ¢ããŸãïŒãã«ãã¯ãã©ãã¯ãªã¹ãã¢ãŒããæå¹ã«ããŸãïŒïŒ
SystemCallFilter=~mount umount2 ptrace kexec_load open_by_handle_at init_module \ finit_module delete_module iopl ioperm swapon swapoff \ syslog process_vm_readv process_vm_writev \ sysfs_sysctl adjtimex clock_adjtime lookup_dcookie \ perf_event_open fanotify_init kcmp add_key request_key \ keyctl uselib acct modify_ldt pivot_root io_setup \ io_destroy io_getevents io_submit io_cancel \ remap_file_pages mbind get_mempolicy set_mempolicy \ migrate_pages move_pages vmsplice perf_event_open
ããŒãžã§ã³227ããåã®systemdã§ã¯ãseccompã䜿çšããããã«NoNewPrivileges = trueãèšå®ããå¿
èŠããããã°ããããŸãã
ãã¯ã€ããªã¹ãã¯æ¬¡ã®ããã«ã³ã³ãã€ã«ã§ããŸãã
- straceã§å¿
èŠãªããã°ã©ã ãå®è¡ããŸãã
syscallsã®å€§ããªããŒãã«ãååŸããŸãã
time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 0.00 0.000000 0 24 read 0.00 0.000000 0 27 open 0.00 0.000000 0 32 close 0.00 0.000000 0 6 stat ⊠0.00 0.000000 0 1 set_tid_address 0.00 0.000000 0 4 epoll_ctl 0.00 0.000000 0 3 set_robust_list 0.00 0.000000 0 2 eventfd2
- ãããããã¹ãŠæžãæããŠã SystemCallFilterãšããŠèšå®ããŸãã ã»ãšãã©ã®å Žåãã¢ããªã±ãŒã·ã§ã³ã¯æ¬¡ã®çç±ã§ã¯ã©ãã·ã¥ããŸãã straceã¯ãã¹ãŠã®åŒã³åºããæ€åºããŸããã§ããã ç£æ»ããŒã¢ã³ã®ãã°ã§ã¢ããªã±ãŒã·ã§ã³ãçµäºããåŒã³åºãã®å®è¡ã確èªããŸãã
type=SECCOMP msg=audit(1446730375.597:7943724): auid=4294967295 uid=0 gid=0 ses=4294967295 pid=11915 comm="(nginx)" exe="/usr/lib/systemd/systemd" sig=31 arch=40000003 syscall=191 compat=0 ip=0xb75e5be8 code=0x0
å¿
èŠãªsyscallã®çªå·ã¯191ã§ãã åŒã³åºãããŒãã«ãéãããã®åŒã³åºãã®ååãçªå·ã§æ¢ããŸãã - èš±å¯ãããåŒã³åºãã«è¿œå ããŸãã 転åããå Žåããã€ã³ã2ã«æ»ããŸãã
ãã³ããšã³ã
captestã³ãã³ãã䜿çšããŠãçŸåšã®ç¹æš©ãšããããå¢ããå¯èœæ§ã確èªã§ããŸãã
filecapã¯ãæ©èœãã€ã³ã¹ããŒã«ããããã¡ã€ã«ã®ãªã¹ãã衚瀺ããŸãã
netcapã䜿çšãããšãå°ãªããšã1ã€ã®ãœã±ãããš1ã€ã®æ©èœãæã€å®è¡äžã®ãããã¯ãŒã¯ããã°ã©ã ã®ãªã¹ããååŸã§ãã
pscapã¯ãœãããŠã§ã¢ãå®è¡ããŠãããããã¯ãŒã¯ã ãã§ãªã衚瀺ããŸãã
ã¢ããã°ã¬ãŒãäžã«systemdãŠããããå®å
šã«ç·šéããŠãã®å€æŽã远跡ããå¿
èŠã¯ãããŸãããã
systemctl editã䜿çšããŠå¿
èŠãªãã£ã¬ã¯ãã£ããè¿œå ããããšãã
å§ãããŸã ã