Linux CentOS 7 SAMBAファイルサーバー





こんにちはHabr!

Petyaランサムウェア06/27/2017の活動後、私はSMB1(別名CIFS)をオフにし、SMBプロトコルの「新しい」バージョンでの作業方法がわからない生産設備とネットワークMFPを受け取りました。



「古い」デバイスからデータを受信する方法は? 実践が示しているように、Windowsを備えた別の「マシン」は選択肢ではありません。攻撃中に、ドメイン「マシン」とは別に、ドメインに含まれていないマシンも被害を受けました。



猫の下には、CentOS 7に基づいたSAMBAファイルサーバーをインストールおよび構成するための段階的な手順があります。



-匿名アクセス

-認証と承認

-Active Directoryとの統合



CentOS 7をインストールする



サーバーはVMware ESXiを実行しているため、CentOS 7 1611をVMにインストールし、1 CPU、1GB RAM、3GB HDDを割り当てました。



LVMを使用せず、SWAPパーティションを作成せず、ブートパーティションに500MBを割り当て、その他すべてをファイルシステムのルートに割り当てます。 ファイルシステムとしてext4を使用します。







インストールプロセスについては説明しません。これを行ったことがない場合でも、難しくはありません。成功します。 私はあなたがすでにすべてをインストールしたと仮定します、そしてあなたは先に進むことができます。



Linuxを初めて使用する場合は、構成を使用して元のファイルのコピーを作成し、 cpコマンドを使用します



cp /etc/somefile.conf /etc/somefile.conf.bak
      
      





DHCP経由でIPアドレスを取得する



何らかの理由でネットワークにDHCPサーバーがない場合は、それを上げる必要があります。 DHCPなしで多数のVMを操作するのは便利ではありません。



更新を強制するか、IPアドレスを取得するには、次のコマンドを実行します



 dhclient
      
      





IPアドレスを表示

 ifconfig  nmcli device show
      
      







ヤム



CentOS 7はYUMパッケージマネージャーを使用します。 ヤムチートシートはこちらです。



インターネットへのアクセスがプロキシサーバーを介して構成されている場合は、プロキシアドレスを/etc/yum.conf構成ファイルに追加し、viエディターまたは次のコマンドを使用します



 echo proxy=http://your.proxy:8888 >> /etc/yum.conf
      
      





ユーザー名とパスワードを使用してプロキシサーバーにアクセスする場合は、次のパラメーターを追加します。

proxy_username = yum-user

proxy_password = qwerty


VMにエージェントをインストールしてホストサーバーと対話する



VMware ESXiの場合、open-vm-toolsをインストールする必要があります



 yum install open-vm-tools
      
      





Hyper-Vの場合、hyperv-daemons



 yum install hyperv-daemons
      
      





アップデートをインストールする



利用可能なすべてのアップデートをインストールすることが非常に重要です。



 yum update
      
      





真夜中の司令官



通常のエディターなしでファイルを編集することはあまり便利ではありません。mcおよびmceditを使用することをお勧めします。



 yum install mc
      
      





ネットワーク設定



nmtuiユーティリティを使用して、静的IPアドレスとホストを構成できます







コマンドプロンプトで、ネットワークアダプターのリストを次のコマンドで取得できます。



 nmcli device status
      
      





静的IPおよびゲートウェイは、次のコマンドによって設定されます。「ens192」はネットワークアダプターの名前です。



 nmcli connection modify “ens192” ipv4.addresses “192.168.1.100/24 192.168.1.1”
      
      





FQDNを構成する



完全修飾ホスト名をls01.fqdn.comとし、コマンドを実行します



 hostnamectl set-hostname ls01.fqdn.com
      
      





ネームサービスを再起動します



 systemctl restart systemd-hostnamed
      
      





次のコマンドで結果を確認できます



 hostnamectl status hostname hostname -s hostname -f
      
      





ipv6



ipv6を使用しない場合は、無効にするのが論理的ですこれを行うには、2つのパラメーターを/etc/sysctl.confファイルに追加し、次のコマンドを実行するか、 mceditエディターを使用します



 echo net.ipv6.conf.all.disable_ipv6 = 1 >> /etc/sysctl.conf echo net.ipv6.conf.default.disable_ipv6 = 1 >> /etc/sysctl.conf
      
      





ネットワークサービスを再起動する



 service network restart
      
      





セリナックス



この段階で、SELINUXサービスを無効にする必要があります。コマンドを使用して、SELINUXサービスのステータスを確認できます。



 sestatus
      
      





/ etc / selinux / config ファイルのSELINUX値をSELINUX = disabledに変更し、サーバーを再起動します。



 reboot
      
      





記事の最後でSELINUXに戻ります。



サンバ



設置



 yum install samba
      
      





自動的に開始するサービスを追加する



 chkconfig smb on
      
      





サービスの開始とステータスの確認



 service smb start smbstatus
      
      





ファイアウォールD



デフォルトでは、CentOS 7はfirewallDファイアウォールを使用します。サービスのステータスは次のコマンドで確認できます



 firewall-cmd --state
      
      





ルールとサービスのリストについては、



 firewall-cmd --list-all firewall-cmd --list-services
      
      









サービスのリストに注意してください。ipv6プロトコルを無効にした場合、dhcpv6-clientでも同じことを行うのが論理的です



 firewall-cmd -–permanent -–remove-service=dhcpv6-client
      
      





SAMBAのルールを作成して再起動する



 firewall-cmd --permanent --add-service=samba firewall-cmd --reload
      
      





匿名シェア



リソース/ samba /ゲスト用のフォルダーを作成します



 mkdir /samba mkdir /samba/guest
      
      





所有者を変更し、権利を割り当てます



 chown nobody:nobody /samba/guest chmod 777 /samba/guest
      
      





SAMBA構成ファイル/etc/samba/smb.confの編集



 mcedit /etc/samba/smb.conf
      
      





元のファイルの内容を次のように変更します

[グローバル]

ワークグループ= WORKGROUP

セキュリティ=ユーザー

ゲストへのマップ=悪いユーザー

最小プロトコル= NT1



[ゲスト]

パス= /サンバ/ゲスト

ゲストOK =はい

書き込み可能=はい
念のため、プロトコルSMB = NT1の最小バージョンを示しました。 SMB2またはSMB3を指定すると、Windows XP以前のクライアントはリソースにアクセスできなくなります。



パラメータの確認とサービスの再起動



 testparm service smb restart smbstatus
      
      







おめでとうございます、あなたはイニシエーションの最初のレベルに達しました。 匿名アクセスを備えた共有リソースが構成されているため、長期間にわたって確実に機能します。 ただし、さらにいくつかの設定を行うことができます。





デフォルトでは、ログファイルは/ var / log / sambaフォルダーにあります。 詳細ログを取得する必要がある場合は、[global]セクションでパラメーターlog level = 2または3を追加する必要があります。デフォルト値は1で、値0はロギングを無効にします。

[グローバル]

ログレベル= 2
ご存知のように、ファイルへのアクセスを提供することは、SAMBA機能の一部にすぎません。 サーバーにファイルリソースしかない場合、印刷サービスを無効にするのが論理的です。 [global]セクションで、次のパラメーターを追加します

[グローバル]

プリンターをロードする=いいえ

show printer add wizard = no

printcap name = / dev / null

スプールを無効にする=はい


SAMBA構成は/ etc / sambaディレクトリーにあり、ログは/ var / log / sambaディレクトリーにあります

すべてのツールを手元に置いておいたほうが便利なので、必要なディレクトリを/ sambaにマウントします



すべてがマウントされるディレクトリを作成します



 mkdir /samba/smbconf mkdir /samba/smblogs
      
      





構成ファイル/ etc / fstabを編集します。fstabが何を担当しているか知っていると思います。



 mcedit /etc/fstab
      
      





次の行を追加します

/ etc / samba / samba / smbconf none bind 0 0

/ var / log / samba / samba / smblogs none bind 0 0


再起動せずにマウント

 mount -a
      
      





ドライブ接続



クォータなしでシステムドライブに共有リソースを保持することは適切な選択ではありません。 クォータに関与しないことにしました。別の「物理」ディスクを接続する方が簡単です。



デバイスのリストを取得するには、 lsblkコマンドを使用できます



 lsblk
      
      





/ dev / sdbにパーティションテーブルを作成する



 parted /dev/sdb mklabel msdos
      
      





または



 parted /dev/sdb mklabel gpt
      
      





gptの詳細については、 こちらをご覧ください。



ジャンルの最高の伝統で、sdbディスク全体にパーティションを作成し、ディスクの先頭で1MiBをインデントすることにしました。



 parted /dev/sdb mkpart primary ext4 1MiB 100%
      
      





ext4ファイルシステムを作成する



 mkfs.ext4 /dev/sdb1
      
      





fstabの編集



 mcedit /etc/fstab
      
      





別の行を追加

/ dev / sdb1 / samba / guest ext4 defaults 0 0


取り付け



 mount –a
      
      





結果を確認する



 df -h
      
      





権利の譲渡



 chmod 777 /samba/guest
      
      





ディスクイメージをマウントする



大容量で十分なリソースサイズxxx mbが必要ない場合は、ファイルからディスクイメージを接続できます。



画像を保存するディレクトリを作成する



 mkdir /samba/smbimg
      
      





100 MBの画像ファイルを作成します



 dd if=/dev/zero of=/samba/smbimg/100M.img bs=100 count=1M
      
      





ddコマンドについては、 こちらをご覧ください。



イメージのあるバージョンでは、パーティションテーブルを作成せず、ext4ファイルシステムを作成するだけにしました。



 mkfs.ext4 /samba/smbimg/100M.img
      
      





fstabの編集



 mcedit /etc/fstab
      
      





イメージをマウントするための構成

/samba/smbimg/100M.img / samba / guest ext4 defaults 0 0


取り付け



 mount -a
      
      





結果を確認する



 df -h
      
      





権利の譲渡



 chmod 777 /samba/guest
      
      





RAMディスク接続



大量のリソースを必要としない一時的なリソースの場合、RAMディスクが最適なオプションであり、非常に迅速かつ簡単に構成でき、作業速度は驚くべきものであるように思えます。



fstabの編集



 mcedit /etc/fstab
      
      





RAMディスクの構成

none / samba / guest tmpfsデフォルト、サイズ= 100M 0 0


取り付け



 mount -a
      
      





結果を確認する



 df -h
      
      





古いファイルを削除する



「ファイルウォッシュ」の場合、リソースを何らかの方法で解放する必要があります。これには、crontabタスクスケジューラを使用できます



課題を見る



 crontab –l
      
      





タスク編集



 crontab –e
      
      





設定例:

シェル= / bin / bash

PATH = / sbin:/ bin:/ usr / sbin:/ usr / bin

MAILTO =“”

ホーム= /



#1時間ごとにファイルとディレクトリを削除

* 0-23 * * * rm –R /サンバ/ゲスト/ *



#1日より古いファイルのみを削除し、コマンドを10分ごとに実行します

0-59 / 10 * * * * find / samba / guest / * -type f -mtime +1 -exec rm –f {} \;



#50分より古いファイルを削除し、10分ごとにコマンドを実行します

0-59 / 10 * * * * find / samba / guest / * -type f -mmin +50 -exec rm -f {} \;


viを終了



 <ESC> :wq
      
      





crontabサービスのログは、ファイル/ var / log / cronにあります



IPアドレスによるSAMBAへのアクセスの制限



すべてのSAMBAリソースへのアクセスを制限する必要がある場合は、グローバルセクションにアクセスリストを追加し、特定のリソースのみに制限する必要がある場合は、このリソースのセクションに追加します。



例:

[グローバル]

ホスト許可= 192.168.1.100、192.168.1.101

ホスト拒否= ALL



[ゲスト]

hosts allow = 192.168.0.0/255.255.0.0

ホストdeny = 10. 10.1.1.1を除く


ユーザー認証と承認



IPアドレスへのアクセスを制限することは常に便利または可能とは限らないため、ログインとパスワードを使用できます。



まず、システムにローカルユーザーを作成する必要があります



 adduser user1
      
      





ユーザーがSAMBAリソースのみを使用する場合、システムのパスワードを設定する必要はありません。 システムとSAMBAのパスワードは異なるファイルに保存され、異なる場合があります。



次に、システムユーザーをsambaユーザーに追加し、パスワードを設定する必要があります



 smbpasswd -a user1
      
      





デフォルトでは、パスワードの保存にtdbファイルが使用されます。これは、/ var / lib / samba / private /ディレクトリにあります



グローバルなpassdbバックエンドパラメータを使用して、ファイルの場所のディレクトリを変更できます。

[グローバル]

passdb backend = tdbsam:/etc/samba/smbpassdb.tdb


「廃止された」テキストファイルを置き換えるためにtdbファイルが作成されました。テキストファイルを使用する場合は、グローバルセクションでpassdb backend = smbpasswdパラメーターを使用します

passdb backend = smbpasswd:/ etc / samba / smbpasswd



次に、リソースにアクセスするためのユーザーとグループのリストを指定します

[ゲスト]

パス= /サンバ/ゲスト

書き込み可能=いいえ

読み取りリスト= user1、@ group2

書き込みリスト= user2、user3


Active Directory統合



LDAPからユーザーに関する情報を取得することもできますが、このオプションは私には興味がなく、すぐにADにアクセスします。 マイクロソフトからの詳細な手順はこちらです。



時刻同期はADにとって非常に重要なので、これから始める価値があります。



適切なサービスをインストールする



 yum install ntp
      
      





ドメインコントローラーとして機能するサーバーの/etc/ntp.confファイルを構成に追加します



 mcedit /etc/ntp.conf
      
      





例:

サーバー192.168.1.10

サーバー192.168.1.20

サーバーsomeserver.contoso.com


自動開始にntpサービスを追加します



 chkconfig ntpd on
      
      





サービスを開始する



 service ntpd start
      
      





時刻の同期を確認する



 ntpq –p
      
      





ウィンバインド



ADからユーザーに関する情報を取得するには、 samba-winbindパッケージをインストールする必要があります



 yum install samba-winbind
      
      





自動開始にサービスを追加



 chkconfig winbind on
      
      





サービスを開始する



 service winbind start
      
      





ADでのホストの追加



この指示の最初に、ホスト名ls01.fqdn.comを設定することを思い出させてください。 完全なドメイン名がfqdn.comであると想定し、短いドメイン名をfqdn_comとする



必要なすべてのパラメーターを構成ファイルに入力するには、 authconfig-tuiユーティリティーを使用し、「Winbindを使用」チェックボックスを選択して、次のウィンドウに進みます。







ADSセキュリティモデルを選択し、ドメイン名を指定します。 [ドメインコントローラー]フィールドで「*」を指定します。これは、使用可能なドメインコントローラーを自動的に検索するために必要です。 次に、[OK]をクリックしてユーティリティを閉じます。







ホストをADに追加するには、コマンドnet ads join –U%username%を使用します。ユーザーはドメインにPCアカウントを作成する権限を持っている必要があります



 net ads join –U youruser
      
      









マシンがドメインに追加されていない場合、FQDNホスト名を/ etc / hostsファイルに追加します

すべてを数回確認し、ネットワークのセットアップ段階で不完全なホスト名を指定したときに、hostsファイルに変更を加えました。



ドメインからホストを削除するには、 net ads leave –U%username%コマンドを使用します



authconfig-tuiは何をしますか?



このユーティリティは、ADに接続するためのパラメーターを次のファイルに追加します。パラメーターは多くありません。必要に応じて、すべてを手で打つことができます。



/etc/krb5.conf

[libdefaults]

Default_realm = FQDN.COM



[レルム]

FQDN.COM = {

kdc = *

}



/etc/nsswitch.conf

passwd:ファイルsss winbind

シャドウ:ファイルsss winbind

グループ:ファイルsss winbind



/etc/samba/smb.conf

[グローバル]

ワークグループ= FQDN_COM

パスワードサーバー= *

レルム= FQDN.COM

セキュリティ=広告

idmap config *:範囲= 16777216-33554431

テンプレートシェル= / sbin / nologin

Kerberosメソッド=シークレットのみ

winbindはデフォルトのドメイン= falseを使用します

winbind pffline logon = false



このユーティリティは、Microsoftの指示または他の指示に書かれているよりもかなり少ないパラメーターを導入していることに気づいたかもしれませんが、そのように機能する場合、なぜそうではないのですか?



Microsoftのマニュアルから、次のパラメーターを構成に追加します

[グローバル]

ドメインマスター=いいえ

ローカルマスター=いいえ

優先マスター=いいえ

OSレベル= 0

ドメインログオン=いいえ


リソース許可の設定

例として、明確にするために、1つのフォルダーに異なる権限を持つリソースをセットアップすることをお勧めします

[ドメインユーザーは読み取り専用]

パス= /サンバ/ゲスト

読み取りリスト=「@fqdn_com \ドメインユーザー」

強制作成モード= 777

ディレクトリマスク= 777



[書き込み可能なドメインユーザー]

パス= /サンバ/ゲスト

読み取りリスト=「@fqdn_com \ドメインユーザー」

書き込みリスト= "@fqdn_com \ドメインユーザー"

強制作成モード= 777

ディレクトリマスク= 777


Sambaサービスの再起動



 service smb restart
      
      





確認する



 smbstatus
      
      





スクリーンショットは、共有フォルダーのいずれかにいるドメインユーザーを示しています





終わり



便利なリンクのリスト:



ウイルスとインフラストラクチャとの戦い、またはSMB v1の無効化

SambaCryの重大な脆弱性:保護する方法

LinuxシステムでSambaCryの脆弱性(CVE-2017-7494)を修正する方法



ヤム、チートシート

ddコマンドとそれに関連するすべて



Samba 2nd Editionを使用する

ADベースにUbuntuベースのSambaサーバーを含める

Linux / Windowsクライアントでファイル共有を許可するためのSambaのセットアップとFirewallDおよびSELinuxの構成



SELinux-システムの操作の説明と機能。 パート1

SELinux-システムの操作の説明と機能。 パート2



PS

SELINUXに戻り、SAMBAサーバーが任意のディレクトリへのアクセスを提供できるようにするには、次のコマンドを実行する必要があります。



 setsebool -P samba_export_all_ro=1 setsebool -P samba_export_all_rw=1
      
      







残念ながら、SELINUXが有効な状態で動作するようにwinbindを構成することはできませんでした。方法を教えていただければ、感謝します。



All Articles