재부팅할 때마다 의류가 Samba를 중단시키는 것 같습니다.

재부팅할 때마다 의류가 Samba를 중단시키는 것 같습니다.

여러 서비스가 포함된 Pi를 실행 중인데 내 서비스 smbd.service(버전 4.13.13 - Debian)가 다음 오류 메시지와 함께 종료되는 것을 발견했습니다.

Aug 23 18:33:43 RPi64 systemd[879]: smbd.service: Failed to execute /usr/share/samba/update-apparmor-samba-profile: Exec format error
Aug 23 18:33:43 RPi64 systemd[879]: smbd.service: Failed at step EXEC spawning /usr/share/samba/update-apparmor-samba-profile: Exec format error
Aug 23 18:33:43 RPi64 systemd[1]: smbd.service: Control process exited, code=exited, status=203/EXEC
Aug 23 18:33:43 RPi64 systemd[1]: smbd.service: Failed with result 'exit-code'.
Aug 23 18:33:43 RPi64 systemd[1]: Failed to start Samba SMB Daemon.

처음에는 내 생각이 /etc/samba/smb.conf틀렸다고 생각했지만, 조사해본 결과 이는 사실이 아니었습니다. 나는 apt reinstall samba이 작업을 수행했고 그 이후에는 이전 구성으로 서비스가 제대로 실행되었습니다.

그러나 다시 시작한 후 다시 깨졌습니다.

그래서 나는 그것을 비활성화했고 apparmor.service이것이 마침내 작동했습니다.

apparmor그러나 활성화해야 하는지 systemd또는 해당 기능이 어디서 나오는지 모르겠습니다 . 지금까지는 나타나지 않았습니다. 파일에 다음 줄이 있습니다 systemd.

ExecStartPre=/usr/share/samba/update-apparmor-samba-profile

이것이 일반적인 경우인지 확실하지 않습니다. 최근에 내가 한 일은 로 업그레이드 Raspbian Bullseye 64bit하고 pivpn설치하는 것이었습니다 wireguard. 이것이 이것과 관련이 있는지 확실하지 않습니다.


편집: 하루가 지나면 문제를 재현할 수 없습니다. 파일은 다음과 같습니다.

pi@RPi64:~ $ sudo cat /usr/share/samba/update-apparmor-samba-profile 
#!/bin/bash

# update apparmor profile sniplet based on samba configuration
#
# This script creates and updates a profile sniplet with permissions for all
# samba shares, except
# - paths with variables (anything containing a % sign)
# - "/" - if someone is insane enough to share his complete filesystem, he'll have
#   to modify the apparmor profile himself

# (c) Christian Boltz 2011-2019
# This script is licensed under the GPL v2 or, at your choice, any later version.


# exit silently - used if no profile update is needed
silentexit() {
    # echo "$@"
    exit 0
}

# exit with an error message
verboseexit() {
    echo "$@" >&2
    exit 1
}

# if you change this script, _always_ update the version to force an update of the profile sniplet
versionstring="${0##*/} 1.2+deb"

aastatus="/usr/sbin/aa-status"
aaparser="/sbin/apparmor_parser"
loadedprofiles="/sys/kernel/security/apparmor/profiles"

smbconf="/etc/samba/smb.conf"
smbd_profile="/etc/apparmor.d/usr.sbin.smbd"
profilesniplet="/etc/apparmor.d/samba/smbd-shares"
tmp_profilesniplet="/etc/apparmor.d/samba/smbd-shares.new"

# test -x "$aastatus" || silentexit "apparmor not installed"
# "$aastatus" --enabled || silentexit "apparmor not loaded (or not running as root)"
test -e "$loadedprofiles" || silentexit "apparmor not loaded"
test -d "/etc/apparmor.d/samba" || silentexit "directory for samba profile snippet doesn't exist"
test -r "$loadedprofiles" || verboseexit "no read permissions for $loadedprofiles - not running as root?"

widelinks=$(testparm -s --parameter-name "wide links" 2>/dev/null)
test "$widelinks" == "Yes" && {
    echo "[$(date '+%Y/%m/%d %T')] $(basename $0)"
    echo '  WARNING: "wide links" enabled. You might need to modify the smbd apparmor profile manually.'
} >> /var/log/samba/log.smbd

grep -q "$versionstring" "$profilesniplet" && {
    test "$smbconf" -nt "$profilesniplet" || silentexit "smb.conf is older than the AppArmor profile sniplet"
}

{
    echo "# autogenerated by $versionstring at samba start - do not edit!"
    echo ""
    testparm -s 2>/dev/null |sed -n '/^[ \t]*path[ \t]*=[ \t]*[^% \t]\{2,\}/ s�^[ \t]*path[ \t]*=[ \t]*\([^%]*\)$�"\1/"   rk,\n"\1/**" rwkl,�p'
} > "$tmp_profilesniplet"

diff "$profilesniplet" "$tmp_profilesniplet" >/dev/null && {
    rm -f "$tmp_profilesniplet"
    touch "$profilesniplet" # update timestamp - otherwise we'll have to check again on the next run
    silentexit "profile sniplet unchanged"
}

mv -f "$tmp_profilesniplet" "$profilesniplet"

grep -q '^/usr/sbin/smbd (\|^smbd (' /sys/kernel/security/apparmor/profiles || silentexit "smbd profile not loaded"

echo "Reloading updated AppArmor profile for Samba..."

# reload profile
"$aaparser" -r "$smbd_profile"

또한 Samba 구성에 다음 줄을 적용했는데, 이것이 문제를 일으킬 수 있다고 생각했지만 그렇지는 않습니다.

include /etc/samba/includes.conf

내 실제 개인 추가 구성(공유 폴더)은 모두 include.conf.


편집하다:

pi@RPi64:~ $ file /usr/share/samba/update-apparmor-samba-profile
/usr/share/samba/update-apparmor-samba-profile: Bourne-Again shell script, ISO-8859 text executable

관련 정보