
SAMBAを使ったファイル共有がうまく構築できず、「NT_STATUS_ACCESS_DENIED」というエラーに悩まされました。
でもうまく構築出来なかった原因は「SAMBA」の設定では無く、「SELINUX」に邪魔をされていた、というオチでした。
SELINUXはその存在をすっかり忘れていました。CentOS 8の時は、SELINUX自体を即刻、DISABLEにしていました。正確に言えば、すっかり忘れていた訳ではないのですが、SAMBAが全く使えなかった訳では無く/home配下のユーザーディレクトリは共有できていたので、SELINUXの問題ではないだろうと考えていたのです。エラーの内容も「NT_STATUS_ACCESS_DENIED」だったので、パーミッションかSAMBA設定の不備だと思い込んでしまいました。
SELINUX。ログ出力無しで人知れず邪魔をしてくる、その設計思想が嫌いです。SAMBAの膨大な設定項目を見直し続けた時間は本当に無駄だった。。
後の祭りですが、kernelのログとして「/var/log/message」にはアクセス拒否のログが出力されていました。システムの問題とは思っていなかったから、messageはノーチェックでした。次からは気を付けます…が、SELINUXはどうしても好きになれません。。
目次
SAMBAとは?
SAMBAというのはWindowsのプロトコルを使ってファイル共有させてくれるサーバーです。簡単に言うと、SAMBAを動かしているシステム上のストレージを、Windowsから利用できるようになります。
やりたかった事
- CentOS Stream 9に接続した外付けハードディスク(HDD)を、Windowsのエクスプローラーから使わせたかった。
- 設定を見直しつつ半日経過。ログを見ると、ずーと「NT_STATUS_ACCESS_DENIED」で変わらず。改善無し。
原因/解決方法は?
SELINUXのSAMBAに関する設定に穴を空けました。以前のように、SELINUX全体を無効化(DISABLE)にしても良かったのですが、今回はこれで様子を見ます。この記事で書いたし、もうSELINUXの事は忘れないとは思いますが、あまりに不便なことが続く場合には迷わずDISABLEにします。
下記のサイトを参考にして解決しました。
上記サイトで紹介されていた通り、下記の3行のコマンドを打ち込みOS再起動で、SAMBAが思う通りに動いてくれるようになりました。
1. 変更前確認
root# getsebool -a | grep samba_export
2. SAMBAのReadOnly/ReadWrite共、エクスポートを許可する
root# setsebool -P samba_export_all_ro=1 samba_export_all_rw=1
3. 変更後確認
root# getsebool -a | grep samba_export
4. CentOS Stream 9を再起動
Appendix
SELINUXは何してくれてるの?
SELINUXはLINUXのセキュリティを高めるために稼働しているサブシステム(というよりカーネルかも)です。
影響範囲が判らない(多岐に渡ると思われる)ので、今回の確認で使ったgetseboolというコマンドで、設定項目を一覧にしておきました。
$ getsebool -a > getsebool-a.txt
今後、何かにハマりそうになった場合は、SELINUXを疑い、この『getsebool-a.txt』というファイルを検索します。
SELINUX vs. SAMBA
今回変更した設定以外にもSAMBA関連の項目が幾つか残っています。一応資料としてメモしておきます。
$ getsebool -a | egrep -i 'samba|smb|nmb'
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> on ← この穴が空いていなければもっと早く気づけた…
samba_export_all_ro --> on ← 今回はこの設定を変更した
samba_export_all_rw --> on ← 今回はこの設定を変更した
samba_load_libgfapi --> off
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
smbd_anon_write --> off
tmpreaper_use_samba --> off
use_samba_home_dirs --> off
virt_use_samba --> off
$
samba_enable_home_dirsをonにしたのは誰なのか?自分じゃないと思うのだけど、自信はない…。きっとsambaのrpmの仕業なんだろうな。だとしたら/etc/samba/smb.confの[homes]セクションのところに、コメントでsamba_enable_home_dirs=1の事を書いておいて欲しかったな。中途半端な事を…。
SELINUXの影響範囲(設定項目(真偽値)をリストアップ)
$ getsebool -a | sed 's!^\([^_][^_]*\)_.*$!\1!' | sort | uniq | cat -n
1 abrt
2 antivirus
3 auditadm
4 authlogin
5 awstats
6 boinc
7 cdrecord
8 cluster
9 cobbler
10 collectd
11 colord
12 condor
13 conman
14 container
15 cron
16 cups
17 cvs
18 daemons
19 dbadm
20 deny
21 dhcpc
22 dhcpd
23 dnsmasq
24 domain
25 entropyd
26 exim
27 fcron
28 fenced
29 fips
30 ftpd
31 git
32 gitosis
33 glance
34 global
35 gluster
36 gpg
37 gssd
38 guest
39 haproxy
40 httpd
41 icecast
42 init
43 irc
44 irssi
45 kdumpgui
46 keepalived
47 kerberos
48 ksmtuned
49 logadm
50 logging
51 login
52 logrotate
53 logwatch
54 lsmd
55 mailman
56 mcelog
57 minidlna
58 mmap
59 mock
60 mount
61 mozilla
62 mpd
63 mplayer
64 mysql
65 nagios
66 named
67 neutron
68 nfs
69 nfsd
70 nis
71 nscd
72 openfortivpn
73 openshift
74 openvpn
75 pcp
76 pdns
77 piranha
78 polipo
79 polyinstantiation
80 postfix
81 postgresql
82 pppd
83 privoxy
84 prosody
85 puppetagent
86 puppetmaster
87 racoon
88 radius
89 redis
90 rngd
91 rpcd
92 rsync
93 samba
94 sanlock
95 saslauthd
96 secadm
97 secure
98 selinuxuser
99 sge
100 smartmon
101 smbd
102 spamassassin
103 spamd
104 squid
105 ssh
106 sslh
107 sssd
108 staff
109 swift
110 sysadm
111 telepathy
112 tftp
113 tmpreaper
114 tomcat
115 tor
116 unconfined
117 unprivuser
118 use
119 user
120 varnishd
121 virt
122 webadm
123 wine
124 xdm
125 xen
126 xend
127 xguest
128 xserver
129 zabbix
130 zarafa
131 zebra
132 zoneminder
$