こんにちは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
元のファイルの内容を次のように変更します
[グローバル]念のため、プロトコルSMB = NT1の最小バージョンを示しました。 SMB2またはSMB3を指定すると、Windows XP以前のクライアントはリソースにアクセスできなくなります。
ワークグループ= WORKGROUP
セキュリティ=ユーザー
ゲストへのマップ=悪いユーザー
最小プロトコル= NT1
[ゲスト]
パス= /サンバ/ゲスト
ゲストOK =はい
書き込み可能=はい
パラメータの確認とサービスの再起動
testparm service smb restart smbstatus
おめでとうございます、あなたはイニシエーションの最初のレベルに達しました。 匿名アクセスを備えた共有リソースが構成されているため、長期間にわたって確実に機能します。 ただし、さらにいくつかの設定を行うことができます。
弓
デフォルトでは、ログファイルは/ var / log / sambaフォルダーにあります。 詳細ログを取得する必要がある場合は、[global]セクションでパラメーターlog level = 2または3を追加する必要があります。デフォルト値は1で、値0はロギングを無効にします。
[グローバル]ご存知のように、ファイルへのアクセスを提供することは、SAMBA機能の一部にすぎません。 サーバーにファイルリソースしかない場合、印刷サービスを無効にするのが論理的です。 [global]セクションで、次のパラメーターを追加します
ログレベル= 2
[グローバル]
プリンターをロードする=いいえ
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を構成することはできませんでした。方法を教えていただければ、感謝します。