tomyamaのブログ

日記・雑記。

SAMBAで共有できない?それってSELINUXに邪魔されていませんか?

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は何してくれてるの?

SELINUXLINUXのセキュリティを高めるために稼働しているサブシステム(というよりカーネルかも)です。

影響範囲が判らない(多岐に渡ると思われる)ので、今回の確認で使った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
$