第16章 ファイルとプリントサーバー

本章では、Server Message Block (SMB) および common Internet file system (CIFS) プロトコルのオープンソース実装である Samba と、Red Hat Enterprise Linux に同梱されているプライマリー FTP サーバーである vsftpd のインストールおよび設定の方法を紹介します。また、プリンターを設定する Print Settings ツールの使用方法についても説明します。

16.1. Samba

Samba は、Red Hat Enterprise Linux にサーバーメッセージブロック (SMB) プロトコルを実装します。SMB プロトコルは、ファイル共有、共有プリンターなど、サーバーのリソースにアクセスするのに使用されます。また、Samba は、Microsoft Windows が使用する分散コンピューティング環境のリモートプロシージャコール (DCE RPC) のプロトコルを実装します。

Samba は以下のように実行できます。

  • Active Directory (AD) または NT4 ドメインメンバー
  • スタンドアロンサーバー
  • NT4 プライマリドメインコントローラー (PDC) またはバックアップドメインコントローラー (BDC)

    注記

    Red Hat は、NT4 ドメインをサポートする Windows バージョンでの既存のインストールでのみ、これらのモードをサポートします。Red Hat は、新規の Samba NT4 ドメインのセットアップを推奨しません。なぜなら、Microsoft のオペレーティングシステム (Windows 7 以降) および Windows Server 2008 R2 は、NT4 ドメインをサポートしないからです。

インストールモードとは関係なく、必要に応じてディレクトリーやプリンターを共有できます。これにより、Samba がファイルサーバーおよびプリントサーバーとして機能できるようになります。

注記

Red Hat は、Samba を AD ドメインコントローラー (DC) として実行することはサポートしていません。

16.1.1. Samba サービス

Samba は以下のサービスを提供します。

smbd

このサービスは、SMB プロトコルを使用してファイル共有およびプリントサービスを提供します。また、サービスは、リソースのロックと、接続ユーザーの認証を担当します。smb systemd サービスは smbd デーモンを開始および停止します。

smbd サービスを使用するには、samba パッケージをインストールします。

nmbd

このサービスは、NetBIOS over IPv4 プロトコルを使用してホスト名および IP 解決を提供します。名前解決に加え、nmbd サービスで SMB ネットワークを参照して、ドメイン、作業グループ、ホスト、ファイル共有、およびプリンターを探すことができます。このため、サービスはこの情報をブロードキャストクライアントに直接報告するか、ローカルまたはマスターのブラウザーに転送します。nmb systemd サービスは nmbd デーモンを開始および停止します。

最近の SMB ネットワークは、クライアントおよび IP アドレスの解決に DNS を使用することに注意してください。

nmbd サービスを使用するには、samba パッケージをインストールします。

winbindd

winbindd サービスは、ローカルシステムの AD または NT4 のドメインユーザーおよびグループを使用する Name Service Switch (NSS) のインターフェースを提供します。これにより、たとえばドメインユーザーを、Samba サーバーにホストされるサービスや他のローカルサービスに認証できます。winbind systemd サービスは winbindd デーモンを開始および停止します。

Samba をドメインメンバーとして設定する場合は、winbindd サービスの前に smbd を起動する必要があります。そうしないと、ドメインユーザーおよびグループはローカルシステムで使用できなくなります。

winbindd サービスを使用するには、samba-winbind パッケージをインストールします。

重要

Red Hat は、ドメインユーザーおよびグループをローカルシステムに提供するために、Samba を、winbindd サービスを使用するサーバーとして実行することのみをサポートします。Windowsアクセス制御リスト (ACL) サポートの欠落や NT LAN マネージャー (NTLM) フォールバックなどの特定の制限のため、Samba でのシステムセキュリティーサービスデーモン (SSSD) の使用は現在これらのユースケースではサポートされていません。詳細は、Red Hat ナレッジベースの記事「What is the support status for Samba file server running on IdM clients or directly enrolled AD clients where SSSD is used as the client daemon」を参照してください。

16.1.2. testparm ユーティリティーを 用した smb.conf ファイルの検証

testparm ユーティリティーは、/etc/samba/smb.conf ファイルの Samba 設定が正しいことを確認します。このユーティリティーは、無効なパラメーターおよび値を検出しますが、ID マッピングなどの間違った設定も検出します。testparm が問題を報告しないと、Samba サービスは正常に /etc/samba/smb.conf ファイルを読み込みます。testparm は、設定されたサービスが利用可能であること、または期待通りに機能するかを確認できないことに注意してください。

重要

Red Hat では、このファイルの変更後に毎回、testparm/etc/samba/smb.conf ファイルを検証することを推奨します。

/etc/samba/smb.conf ファイルを確認するには、root で testparm ユーティリティーを実行します。testparm が設定内の間違ったパラメーター、値、またはその他のエラーを報告する場合は、問題を修正してから再度ユーティリティーを実行してください。

例16.1 testparm の使用

以下の出力は、存在しないパラメーターおよび間違った ID マッピング設定を報告しています。

~]# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Unknown parameter encountered: "log levell"
Processing section "[example_share]"
Loaded services file OK.
ERROR: The idmap range for the domain * (tdb) overlaps with the range of DOMAIN (ad)!

Server role: ROLE_DOMAIN_MEMBER

Press enter to see a dump of your service definitions

# Global parameters
[global]
	...

[example_share]
	...

16.1.3. Samba のセキュリティーモードについて

/etc/samba/smb.conf ファイルの [global] セクションの security パラメーターは、Samba がサービスに接続しているユーザーを認証する方法を管理します。Samba をインストールするモードに応じて、パラメーターは異なる値に設定する必要があります。

  • AD ドメインメンバーには、security = ads を設定します。

    このモードでは、Samba は Kerberos を使用して AD ユーザーを認証します。

    Samba をドメインメンバーとして設定する方法は、「Samba をドメインメンバーとしてセットアップ」を参照してください。

  • スタンドアロンサーバーで、security = user を設定します。

    このモードでは、Samba がローカルデータベースを使用して接続ユーザーを認証します。

    Samba をスタンドアロンサーバーとして設定する方法は、「Samba をスタンドアロンサーバーとして設定」を参照してください。

  • NT4 PDC または BDC に、security = user を設定ます。

    Samba は、このモードでは、ユーザーをローカルまたは LDAP データベースに認証します。

  • NT4 ドメインメンバーには、security = domain を設定します。

    Samba は、このモードでは、NT4 PDC または BDC にユーザーを接続する認証を行います。このモードは、AD ドメインメンバーには使用できません。

    Samba をドメインメンバーとして設定する方法は、「Samba をドメインメンバーとしてセットアップ」を参照してください。

詳細は、smb.conf(5) man ページの security パラメーターに関する説明を参照してください。

16.1.4. Samba をスタンドアロンサーバーとして設定

特定の状況では、管理者はドメインメンバーではない Samba サーバーのセットアップを必要とします。このインストールモードでは、Samba はユーザーを中央 DC ではなくローカルデータベースに認証します。また、ゲストアクセスを有効にして、ユーザーが、認証なしで 1 つまたは複数のサービスに接続できるようにすることもできます。

16.1.4.1. スタンドアロンサーバーのサーバー構成の設定

Samba をスタンドアロンサーバーとしてセットアップ

Samba をスタンドアロンサーバーとして設定

  1. samba パッケージをインストールします。

    ~]# yum install samba
  2. /etc/samba/smb.conf ファイルを編集し、以下のパラメーターを設定します。

    [global]
    	workgroup = Example-WG
    	netbios name = Server
    	security = user
    
    	log file = /var/log/samba/%m.log
    	log level = 1

    この設定は、Example-WG ワークグループ Server 内のという名前のスタンドアロンサーバーを定義します。また、この設定により最小レベル (1) でのログ記録が可能になり、ログファイルは /var/log/samba/ ディレクトリーに保存されます。Samba は、log file パラメーターの %m マクロを、接続しているクライアントの NetBIOS 名まで展開します。これにより、クライアントごとに個別のログファイルが有効になります。

    詳細は、smb.conf (5) man ページのパラメーターの説明を参照してください。

  3. ファイルまたはプリンターの共有を構成します。以下を参照してください。

  4. /etc/samba/smb.conf ファイルを確認します。

    ~]# testparm

    詳細はtestparm ユーティリティーを 用した smb.conf ファイルの検証」を参照してください。

  5. 認証が必要な共有を設定する場合は、ユーザーアカウントを作成します。詳細は「ローカルユーザーアカウントの作成および有効化」を参照してください。
  6. firewall-cmd ユーティリティーを使用して必要なポートを開き、ファイアウォール設定を再読み込みします。

    ~]# firewall-cmd --permanent --add-port={139/tcp,445/tcp}
    ~]# firewall-cmd --reload
  7. smb サービスを起動します。

    ~]# systemctl start smb
  8. 必要に応じて、smb サービスがシステムの起動時に自動的に起動するようにします。

    ~]# systemctl enable smb

16.1.4.2. ローカルユーザーアカウントの作成および有効化

共有への接続時にユーザーが認証を行えるようにするには、オペレーティングシステムと Samba データベースの両方で Samba ホストにアカウントを作成する必要があります。Samba では、ファイルシステムオブジェクトでアクセス制御リスト (ACL) を検証するオペレーティングシステムアカウントと、接続ユーザーの認証を行う Samba アカウントが必要です。

passdb backend = tdbsam デフォルト設定を使用すると、Samba はユーザーアカウントを /var/lib/samba/private/passdb.tdb データベースに保存します。

たとえば、example Samba ユーザーを作成するには、以下を実行します。

Samba ユーザーの作成

  1. オペレーティングシステムアカウントを作成します。

    ~]# useradd -M -s /sbin/nologin example

    前述のコマンドは、ホームディレクトリーを作成することなく example アカウントを追加します。アカウントが Samba への認証のみに使用される場合は、/sbin/nologin コマンドをシェルとして割り当て、アカウントがローカルでログインしないようにします。

  2. オペレーティングシステムのアカウントにパスワードを設定して、これを有効にします。

    ~]# passwd example
    Enter new UNIX password: password
    Retype new UNIX password: password
    passwd: password updated successfully

    Samba は、オペレーティングシステムのアカウントに設定されたパスワードを使用して認証を行いません。ただし、アカウントを有効にするには、パスワードを設定する必要があります。アカウントが無効になると、そのユーザーが接続した時に Samba がアクセスを拒否します。

  3. Samba データベースにユーザーを追加し、そのアカウントにパスワードを設定します。

    ~]# smbpasswd -a example
    New SMB password: password
    Retype new SMB password: password
    Added user example.

    このアカウントを使用して Samba 共有に接続する場合に、このパスワードを使用して認証を行います。

  4. Samba アカウントを有効にします。

    ~]# smbpasswd -e example
    Enabled user example.

16.1.5. Samba をドメインメンバーとしてセットアップ

AD または NT4 ドメインを実行する管理者は多くの場合、ドメインのメンバーとして Red Hat Enterprise Linux サーバーに参加するために Samba を使用したいと考えています。これを使用すると、以下が可能になります。

  • その他のドメインメンバーのドメインリソースにアクセスする
  • sshd などのローカルサービスに対してドメインユーザーを認証する
  • サーバーにホストされているディレクトリーおよびプリンターを共有して、ファイルサーバーおよびプリントサーバーとして動作する

16.1.5.1. ドメインの参加

Red Hat Enterprise Linux システムをドメインに参加させるには、以下を実行します。

Red Hat Enterprise Linux システムの、ドメインへの参加

  1. 以下のパッケージをインストールします。

    ~]# yum install realmd oddjob-mkhomedir oddjob samba-winbind-clients \
        samba-winbind samba-common-tools
  2. ドメインメンバーでディレクトリーまたはプリンターを共有するには、samba パッケージをインストールします。

    ~]# yum install samba
  3. AD に参加する場合は、追加で samba-winbind-krb5-locator パッケージをインストールします。

    ~]# yum install samba-winbind-krb5-locator

    このプラグインを使用すると、Kerberos は DNS サービスレコードを使用して、AD サイトに基づいて鍵配布センター (KDC) を探すことができます。

  4. 必要に応じて、既存の /etc/samba/smb.conf Samba 設定ファイルの名前を変更します。

    ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf.old
  5. ドメインに参加します。たとえば、ad.example.com という名前のドメインに参加するには、以下のコマンドを実行します。

    ~]# realm join --membership-software=samba --client-software=winbind ad.example.com

    上記のコマンドを使用すると、realm ユーティリティーが自動的に以下を実行します。

    • ad.example.com ドメインのメンバーシップの /etc/samba/smb.conf ファイルを作成します。
    • ユーザーおよびグループの検索の winbind モジュールを /etc/nsswitch.conf ファイルに追加します。
    • /etc/pam.d/ ディレクトリーの PAM (プラグ可能な認証モジュール) 設定ファイルを更新します。
    • winbind サービスを起動し、システムの起動時にサービスを起動できるようにします。

      realm ユーティリティーに関する詳細は、realm(8) の man ページと、『Red Hat Windows Integration Guide』の関連のセクションを参照してください。

  6. 必要に応じて、/etc/samba/smb.conf ファイルの別の ID マッピングバックエンド、またはカスタマイズした ID マッピングを設定します。詳細は「ID マッピングについて」を参照してください。
  7. 必要に応じて設定を検証します。「Samba がドメインメンバーとして正しく参加されたことを確認」を参照してください。
  8. winbinddが実行されていることを確認します。

    ~]# systemctl status winbind
    重要

    Samba がドメインのユーザーおよびグループの情報をクエリーできるようにするには、smbd を起動する前に winbindd サービスを実行する必要があります。

  9. samba パッケージをインストールしてディレクトリーおよびプリンターを共有している場合は、smbd サービスを開始します。

    ~]# systemctl start smb

16.1.5.2. Samba がドメインメンバーとして正しく参加されたことを確認

ドメインメンバーとして Red Hat Enterprise Linux に参加した後、様々なテストを実行して正常に参加できたことを確認します。以下を参照してください。

オペレーティングシステムが、ドメインのユーザーアカウントおよびグループを取得できるかどうかの検証

getent ユーティリティーを使用して、オペレーティングシステムがドメインユーザーおよびグループを取得できることを確認します。以下に例を示します。

  • AD ドメインの administrator アカウントをクエリーするには、以下を実行します。

    ~]# getent passwd AD\\administrator
    AD\administrator:*:10000:10000::/home/administrator@AD:/bin/bash
  • AD ドメイン内の Domain Users グループのメンバーにクエリーするには、以下を実行します。

    ~]# getent group "AD\\Domain Users"
    AD\domain users:x:10000:user

コマンドが正常に機能する場合は、ファイルおよびディレクトリーに権限を設定する際にドメインユーザーとグループを使用できるかを確認してください。たとえば、/srv/samba/example.txt ファイルの所有者をに設定し、グループを AD\Domain Users以下のように設定 AD\administrator します。

~]# chown "AD\administrator":"AD\Domain Users" /srv/samba/example.txt
AD ドメインユーザーが Kerberos チケットを取得できるかどうかの確認

AD 環境では、DC から Kerberos チケットを取得できます。たとえば、administrator ユーザーが Kerberos チケットを取得できるかどうかを確認するには、以下を実行してください。

注記

kinit ユーティリティーおよび klist ユーティリティーを使用するには、Samba ドメインメンバー上の krb5-workstation パッケージをインストールします。

Kerberos チケットの取得

  1. administrator@AD.EXAMPLE.COM プリンシパルのチケットを取得します。

    ~]# kinit administrator@AD.EXAMPLE.COM
  2. キャッシュされた Kerberos チケットを表示します。

    ~]# klist
    Ticket cache: KEYRING:persistent:0:0
    Default principal: administrator@AD.EXAMPLE.COM
    
    Valid starting    Expires       Service principal
    11.09.2017 14:46:21 12.09.2017 00:46:21 krbtgt/AD.EXAMPLE.COM@AD.EXAMPLE.COM
    	renew until 18.09.2017 14:46:19
利用可能なドメインの一覧表示

winbindd サービスで利用可能なすべてのドメインを一覧表示するには、以下を入力します。

~]# wbinfo --all-domains

Samba がドメインメンバーとして適切に参加すると、このコマンドは組み込みおよびローカルのホスト名を表示し、ドメインの Samba は信頼されるドメインを含むメンバーとなります。

例16.2 利用可能なドメインの表示

~]# wbinfo --all-domains
BUILTIN
SAMBA-SERVER
AD

16.1.5.3. ID マッピングについて

Windows ドメインは、ユーザーおよびグループを一意のセキュリティ識別子 (SID) で区別します。ただし、Linux では、ユーザーおよびグループごとに一意の UID と GID が必要です。Samba をドメインメンバーとして実行する場合は、winbindd サービスが、ドメインユーザーおよびグループに関する情報をオペレーティングシステムに提供します。

winbindd サービスが、ユーザーおよびグループの一意の ID を Linux に提供するようにするには、/etc/samba/smb.conf ファイルで ID マッピングを設定する必要があります。

  • ローカルデータベース (デフォルトドメイン)
  • Samba サーバーがメンバーになっている AD または NT4 のドメイン
  • ユーザーがこの Samba サーバーのリソースにアクセスする必要のある信頼ドメイン
16.1.5.3.1. ID の範囲の計画

Linux の UID および GID を AD に保存するか、Samba がそれを生成するように設定するかに関係なく、各ドメイン設定には、他のドメインと重複しない一意の ID 範囲が必要です。

警告

重複する ID 範囲を設定すると、Samba が正常に機能しなくなります。

例16.3 一意の ID 範囲

以下は、デフォルト (*)、AD-DOM、および TRUST-DOM のドメインの非オーバーランディングの ID マッピング範囲を示しています。

[global]
...
idmap config * : backend = tdb
idmap config * : range = 10000-999999

idmap config AD-DOM:backend = rid
idmap config AD-DOM:range = 2000000-2999999

idmap config TRUST-DOM:backend = rid
idmap config TRUST-DOM:range = 4000000-4999999
重要

1 つのドメインに割り当てられるのは 1 つの範囲だけです。したがって、ドメイン範囲間で十分な容量を残しておきます。これにより、ドメインが拡大した場合に、後で範囲を拡張できます。

後で別の範囲をドメインに割り当てると、このユーザーおよびグループが作成したファイルおよびディレクトリーの所有権が失われます。

16.1.5.3.2. * デフォルトドメイン

ドメイン環境では、以下の各 ID マッピング設定を追加します。

  • Samba サーバーがメンバーとなっているドメイン
  • Samba サーバーにアクセスできる信頼された各ドメイン

ただし、Samba が、その他のすべてのオブジェクトに、デフォルトドメインから ID を割り当てます。これには以下が含まれます。

  • ローカルの Samba ユーザーおよびグループ
  • Samba の組み込みアカウントおよびグループ BUILTIN\Administrators
重要

Samba が正常に機能できるようにするには、このセクションで説明されているデフォルトのドメインを設定する必要があります。

割り当てられた ID を永続的に格納するには、デフォルトのドメインバックエンドを書き込み可能にする必要があります。

デフォルトドメインには、以下のいずれかのバックエンドを使用できます。

tdb

デフォルトのドメインを、tdb バックエンドを使用するように設定する場合は、ID 範囲を設定します。この ID 範囲には、将来作成されるオブジェクトや、定義されたドメイン ID マッピング設定には含まれないオブジェクトを追加できます。

たとえば、/etc/samba/smb.conf ファイルの [global] セクションで以下を設定します。

idmap config * : backend = tdb
idmap config * : range = 10000-999999

詳細は、tdb ID マッピングバックエンドの使用」 を参照してください。

autorid

autorid バックエンドを使用するように、デフォルトのドメインを設定する場合、ドメイン用の ID マッピング設定を追加するかどうかは任意になります。

たとえば、/etc/samba/smb.conf ファイルの [global] セクションで以下を設定します。

idmap config * : backend = autorid
idmap config * : range = 10000-999999

詳細は、autorid バックエンドの設定 を参照してください。

16.1.5.4. 様々な ID マッピングバックエンド

Samba は、特定の設定に対して異なる ID マッピングバックエンドを提供します。最も頻繁に使用されるバックエンドは、以下の通りです。

表16.1 よく使われる ID マッピングバックエンド

バックエンドユースケース

tdb

* デフォルトドメインのみ

ad

AD ドメインのみ

rid

AD ドメインおよび NT4 ドメイン

autorid

AD、NT4、および * デフォルトのドメイン

以下のセクションでは、利点、バックエンドを使用する際の推奨シナリオ、および設定方法を説明します。

16.1.5.4.1. tdb ID マッピングバックエンドの使用

winbindd サービスは、デフォルトで書き込み可能な tdb ID マッピングバックエンドを使用して、セキュリティー識別子 (SID)、UID、および GID のマッピングテーブルを格納します。これには、ローカルユーザー、グループ、組み込みプリンシパルが含まれます。

このバックエンドは、* デフォルトドメインにのみ使用してください。以下に例を示します。

idmap config * : backend = tdb
idmap config * : range = 10000-999999

* デフォルトドメインに関する詳細は * デフォルトドメイン」 を参照してください。

16.1.5.4.2. ad ID マッピングバックエンドの使用

ad ID マッピングバックエンドは、読み取り専用 API を実装し、AD からアカウントおよびグループの情報を読み取ります。これには、以下の利点があります。

  • ユーザーとグループの全設定は、AD に集中的に保存されます。
  • ユーザーおよびグループの ID は、このバックエンドを使用するすべての Samba サーバーで一貫しています。
  • ID は、破損する可能性のあるローカルデータベースには保存されないため、ファイルの所有権は失われません。

ad バックエンドは、AD から以下の属性を読み込みます。

表16.2 ad バックエンドが、ユーザーおよびグループオブジェクトから読み取る属性

AD 属性名オブジェクトタイプマッピング先

sAMAccountName

ユーザーおよびグループ

オブジェクトのユーザー名またはグループ名

uidNumber

ユーザー

ユーザー ID (UID)

gidNumber

グループ

グループ ID (GID)

loginShell [a]

ユーザー

ユーザーのシェルのパス

unixHomeDirectory

ユーザー

ユーザーのホームディレクトリーのパス

primaryGroupID [b]

ユーザー

プライマリグループ ID

[a] Samba は、idmap config DOMAIN:unix_nss_info = yes を設定した場合のみこの属性を読み込みます。
[b] Samba は、idmap config DOMAIN:unix_primary_group = yes を設定した場合のみこの属性を読み込みます。

ad バックエンドの前提条件

ad ID マッピングバックエンドを使用する場合:

  • ユーザーおよびグループはいずれも、AD で一意の ID が設定され、ID が、/etc/samba/smb.conf ファイルで設定されている範囲内にある。ID が範囲外にあるオブジェクトは、Samba サーバーでは利用できません。
  • ユーザーおよびグループには、AD ですべての必須属性が設定されている。必要な属性がないと、ユーザーまたはグループは Samba サーバーで使用できなくなります。必要な属性は、設定によって異なります。表16.2「ad バックエンドが、ユーザーおよびグループオブジェクトから読み取る属性」を参照してください。

ad バックエンドの設定

ad ID マッピングバックエンドを使用するために Samba AD メンバーを設定するには、以下に該当する必要があります。

ドメインメンバー上での ad バックエンドの設定

  1. /etc/samba/smb.conf ファイルの [global] セクションを編集します。

    1. デフォルトドメイン (*) に ID マッピング設定が存在しない場合は追加します。以下に例を示します。

      idmap config * : backend = tdb
      idmap config * : range = 10000-999999

      デフォルトドメインに関する詳細は * デフォルトドメイン」 を参照してください。

    2. AD ドメインの ad ID マッピングバックエンドを有効にします。

      idmap config DOMAIN : backend = ad
    3. AD ドメインのユーザーおよびグループに割り当てられている ID の範囲を設定します。以下に例を示します。

      idmap config DOMAIN : range = 2000000-2999999
      重要

      この範囲は、このサーバーの他のドメイン構成と重複させることはできません。また、この範囲には、今後割り当てられる ID がすべて収まる大きさを設定する必要があります。詳細は、「ID の範囲の計画」 を参照してください。

    4. Samba が AD から属性を読み取る際に RFC 2307 スキーマを使用するように設定します。

      idmap config DOMAIN : schema_mode = rfc2307
    5. Samba が、対応する AD 属性からログインシェルおよびユーザーホームディレクトリーのパスを読み取るようにする場合は、以下を設定します。

      idmap config DOMAIN : unix_nss_info = yes

      または、すべてのユーザーに適用される、ドメイン全体のホームディレクトリーのパスおよびログインシェルを統一して設定できます。以下に例を示します。

      template shell = /bin/bash
      template homedir = /home/%U

      変数の置換の詳細は、smb.conf(5) man ページの VARIABLE SUBSTITUTIONS セクションを参照してください。

    6. デフォルトでは、Samba は、ユーザーオブジェクトの primaryGroupID 属性を、Linux のユーザーのプライマリーグループとして使用します。または、代わりに gidNumber 属性に設定されている値を使用するように Samba を設定できます。

      idmap config DOMAIN : unix_primary_group = yes
  2. /etc/samba/smb.conf ファイルを確認します。

    ~]# testparm

    詳細はtestparm ユーティリティーを 用した smb.conf ファイルの検証」を参照してください。

  3. Samba 設定を再読み込みします。

    ~]# smbcontrol all reload-config
  4. 設定が期待どおりに機能することを確認します。「オペレーティングシステムが、ドメインのユーザーアカウントおよびグループを取得できるかどうかの検証」 を参照してください。

詳細は、smb.conf(5) と idmap_ad(8) の man ページを参照してください。

16.1.5.4.3. rid ID マッピングバックエンドの使用

Samba は、Windows SID の相対識別子 (RID) を使用して、Red Hat Enterprise Linux で ID を生成できます。

注記

RID は、SID の最後の部分です。たとえば、ユーザーの SID が S-1-5-21-5421822485-1151247151-421485315-30014 の場合、対応する RID は 30014 になります。Samba のローカル ID の算出方法は、idmap_rid(8) man ページを参照してください。

rid ID マッピングバックエンドは、AD ドメインおよび NT4 ドメインのアルゴリズムマッピングスキームに基づいてアカウントおよびグループの情報を計算する読み取り専用 API を実装します。バックエンドを設定する場合は、idmap config DOMAIN : range パラメーターで RID の最小値および最大値を設定する必要があります。Samba は、このパラメーターで設定される RID の最小値および最大値を超えるユーザーまたはグループをマッピングしません。

重要

読み取り専用のバックエンドとして、BUILTIN グループの場合など、rid は新しい ID を割り当てることはできません。したがって、* デフォルトドメインにはこのバックエンドを使用しないでください。

利点

  • 設定された範囲内の RID があるドメインユーザーとグループはすべて、自動的にドメインメンバーで利用可能になります。
  • ID、ホームディレクトリー、およびログインシェルを手動で割り当てる必要はありません。

短所

  • すべてのドメインユーザーは、割り当てられた同じログインシェルとホームディレクトリーを取得します。ただし、変数を使用できます。
  • 同じ ID 範囲設定で rid バックエンドを使用している Samba ドメインメンバーでは、ユーザー ID とグループ ID が同じになります。
  • ドメインメンバーで個々のユーザーまたはグループを除外して、利用できないようにすることはできません。設定されている範囲外にあるユーザーとグループのみが除外されます。
  • 異なるドメインのオブジェクトの RID が同じ場合は、winbindd サービスが ID の計算に使用する式に基づき、複数ドメインの環境で重複する ID が発生する場合があります。

rid バックエンドの設定

Samba ドメインメンバーが rid ID マッピングバックエンドを使用するように設定するには、以下が必要です。

ドメインメンバー上での rid バックエンドの設定

  1. /etc/samba/smb.conf ファイルの [global] セクションを編集します。

    1. デフォルトドメイン (*) に ID マッピング設定が存在しない場合は追加します。以下に例を示します。

      idmap config * : backend = tdb
      idmap config * : range = 10000-999999

      デフォルトドメインに関する詳細は * デフォルトドメイン」 を参照してください。

    2. ドメインの rid ID マッピングバックエンドを有効にします。

      idmap config DOMAIN : backend = rid
    3. 今後割り当てられるすべての RID が収まる大きさの範囲を設定します。以下に例を示します。

      idmap config DOMAIN : range = 2000000-2999999

      Samba は、そのドメインの RID がその範囲内にないユーザーおよびグループを無視します。

      重要

      この範囲は、このサーバーの他のドメイン構成と重複させることはできません。詳細は、「ID の範囲の計画」 を参照してください。

    4. すべてのマッピングユーザーに割り当てられるシェルおよびホームディレクトリーのパスを設定します。以下に例を示します。

      template shell = /bin/bash
      template homedir = /home/%U

      変数の置換の詳細は、smb.conf(5) man ページの VARIABLE SUBSTITUTIONS セクションを参照してください。

  2. /etc/samba/smb.conf ファイルを確認します。

    ~]# testparm

    詳細はtestparm ユーティリティーを 用した smb.conf ファイルの検証」を参照してください。

  3. Samba 設定を再読み込みします。

    ~]# smbcontrol all reload-config
  4. 設定が期待どおりに機能することを確認します。「オペレーティングシステムが、ドメインのユーザーアカウントおよびグループを取得できるかどうかの検証」 を参照してください。
16.1.5.4.4. autorid ID マッピングバックエンドの使用

autorid バックエンドは、rid ID マッピングバックエンドと同様の動作をしますが、異なるドメインに対して自動的に ID を割り当てることができます。これにより、以下の状況で autorid バックエンドを使用できます。

  • * デフォルトドメインのみ
  • * デフォルトドメインと追加のドメインでは、追加のドメインごとに ID マッピング設定を作成する必要はありません。
  • 特定のドメインのみ

利点

  • 設定された範囲内に計算した UID と GID があるすべてのドメインユーザーおよびグループは、ドメインメンバーで自動的に利用可能になります。
  • ID、ホームディレクトリー、およびログインシェルを手動で割り当てる必要はありません。
  • 複数ドメイン環境内の複数のオブジェクトが同じ RID を持つ場合でも、重複する ID はありません。

短所

  • Samba ドメインメンバー間では、ユーザー ID とグループ ID は同じではありません。
  • すべてのドメインユーザーは、割り当てられた同じログインシェルとホームディレクトリーを取得します。ただし、変数を使用できます。
  • ドメインメンバーで個々のユーザーまたはグループを除外して、利用できないようにすることはできません。計算された UID または GID が、設定された範囲外にあるユーザーとグループのみが除外されます。

autorid バックエンドの設定

* デフォルトドメイン向けに autorid ID マッピングバックエンドを使用するために Samba ドメインメンバーを設定するには、以下を実行します。

注記

デフォルトドメインに autorid を使用する場合は、ドメイン用の ID マッピング設定を追加するかどうかは任意です。

ドメインメンバー上での autorid バックエンドの設定

  1. /etc/samba/smb.conf ファイルの [global] セクションを編集します。

    1. * デフォルトドメインの autorid ID マッピングバックエンドを有効にします。

      idmap config * : backend = autorid
    2. 既存および将来の全オブジェクトに ID を割り当てられる大きさの範囲を設定します。以下に例を示します。

      idmap config * : range = 10000-999999

      Samba は、このドメインで計算した ID が範囲内にないユーザーおよびグループを無視します。バックエンドの計算された ID の詳細は、idmap_autorid(8) man ページの THE MAPPING FORMULAS セクションを参照してください。

      警告

      範囲を設定し、Samba がそれを使用して開始してからは、範囲の上限を小さくすることはできません。これ以外の範囲への変更は、新しい ID の割り当てとなり、その結果ファイルの所有権を失うことになります。

    3. 必要に応じて、範囲サイズを設定します。以下に例を示します。

      idmap config * : rangesize = 200000

      Samba は、idmap config * : range パラメーターに設定されている範囲からすべての ID を取得するまで、各ドメインのオブジェクトにこの数の連続 ID を割り当てます。詳細は、idmap_autorid(8) man ページの rangesize パラメーターの説明を参照してください。

    4. すべてのマッピングユーザーに割り当てられるシェルおよびホームディレクトリーのパスを設定します。以下に例を示します。

      template shell = /bin/bash
      template homedir = /home/%U

      変数の置換の詳細は、smb.conf(5) man ページの VARIABLE SUBSTITUTIONS セクションを参照してください。

    5. 必要に応じて、ドメイン用の ID マッピング設定を追加します。個別のドメインの設定が利用できない場合、Samba は以前に設定した autorid デフォルトドメインの * バックエンド設定を使用して ID を計算します。

      重要

      各ドメインに追加のバックエンドを設定する場合は、すべての ID マッピング設定の範囲がオーバーラップしないようにしてください。詳細は、「ID の範囲の計画」 を参照してください。

  2. /etc/samba/smb.conf ファイルを確認します。

    ~]# testparm

    詳細はtestparm ユーティリティーを 用した smb.conf ファイルの検証」を参照してください。

  3. Samba 設定を再読み込みします。

    ~]# smbcontrol all reload-config
  4. 設定が期待どおりに機能することを確認します。「オペレーティングシステムが、ドメインのユーザーアカウントおよびグループを取得できるかどうかの検証」 を参照してください。

16.1.6. Samba サーバーでのファイル共有の設定

Samba をファイルサーバーとして使用する場合は、スタンドアロンまたはドメインメンバー設定の /etc/samba/smb.conf ファイルに共有を追加します。

以下のいずれかを使用する共有を追加できます。

16.1.6.1. POSIX ACL で共有の設定

Samba は、Linux サービスとして、POSIX ACL との共有に対応します。chmod などのユーティリティーを使用して、Samba サーバーの権限をローカルに管理できます。拡張属性に対応するファイルシステムに共有が保存されている場合は、複数のユーザーおよびグループで ACL を定義できます。

注記

代わりにきめ細かな Windows ACL を使用する必要がある場合は、「Windows ACL で共有の設定」を参照してください。

共有を追加する前に、Samba をセットアップします。以下を参照してください。

16.1.6.1.1. POSIX ACL を使用する共有の追加

/srv/samba/example/ ディレクトリーのコンテンツを提供し、POSIX ACL を使用する example という名前の共有を作成するには、以下を実行します。

POSIX ACL を使用する共有の追加

  1. または、フォルダーが存在しない場合は作成します。以下に例を示します。

    ~]# mkdir -p /srv/samba/example/
  2. SELinux を enforcing モードで実行する場合は、ディレクトリーに samba_share_t コンテキストを設定します。

    ~]# semanage fcontext -a -t samba_share_t "/srv/samba/example(/.*)?"
    ~]# restorecon -Rv /srv/samba/example/
  3. ディレクトリーにファイルシステムの ACL を設定します。詳細は「ACL の設定」を参照してください。
  4. example 共有を /etc/samba/smb.conf ファイルに追加します。たとえば、共有の write-enabled を追加するには、次のコマンドを実行します。

    [example]
    	path = /srv/samba/example/
    	read only = no
    注記

    ファイルシステムの ACL に関係なく、read only = no を設定しないと、Samba がディレクトリーを読み取り専用モードで共有します。

  5. /etc/samba/smb.conf ファイルを確認します。

    ~]# testparm

    詳細はtestparm ユーティリティーを 用した smb.conf ファイルの検証」を参照してください。

  6. firewall-cmd ユーティリティーを使用して必要なポートを開き、ファイアウォール設定を再読み込みします。

    ~]# firewall-cmd --permanent --add-service=samba
    ~]# firewall-cmd --reload
  7. smb サービスを再起動します。

    ~]# systemctl restart smb
  8. 必要に応じて、システムの起動時に、smb サービスが自動的に起動するようにします。

    ~]# systemctl enable smb
16.1.6.1.2. ACL の設定

POSIX ACL を使用する共有は、以下に対応します。

標準の Linux ACL の設定

Linux の標準 ACL は、所有者、グループ、その他の未定義ユーザーの権限の設定に対応します。ACL を更新するには chownchgrpchmod ユーティリティーを使用できます。正確な制御が必要な場合は、より複雑な POSIX ACL を使用します。拡張 ACL の設定を参照してください。

たとえば、/srv/samba/example/ ディレクトリーの所有者をユーザーに設定し、その Domain Users グループに読み取りおよび書き込みの権限を付与し、その他のすべての root ユーザーへのアクセスを拒否するには、次のコマンドを実行します。

~]# chown root:"Domain Users" /srv/samba/example/
~]# chmod 2770 /srv/samba/example/
注記

ディレクトリーで set-group-ID (SGID) ビットを有効にすると、新しいディレクトリーエントリーを作成したユーザーのプライマリーグループに設定する通常の動作の代わりに、すべての新しいファイルとサブディレクトリーのデフォルトグループが、そのディレクトリーグループのデフォルトグループに自動的に設定されます。

権限の詳細は、chown (1) および chmod (1) man ページを参照してください。

拡張 ACL の設定

共有ディレクトリーが保存されているファイルシステムが拡張 ACL に対応している場合は、それを使用して複雑な権限を設定できます。拡張 ACL には、複数のユーザーおよびグループの権限を指定できます。

拡張 POSIX ACL を使用すると、複数のユーザーおよびグループで複雑な ACL を設定できます。ただし、設定できるのは以下の権限のみです。

  • アクセスなし
  • 読み取りアクセス
  • 書き込みアクセス
  • 完全な制御

Create folder / append data など、詳細な Windows 権限が必要な場合は、Windows ACL を使用するように共有を設定します。「Windows ACL で共有の設定」を参照してください。

共有で拡張 POSIX ACL を使用するには、以下を実行します。

共有における拡張 POSIX ACL の有効化

  1. /etc/samba/smb.conf ファイルの共有セクションで以下のパラメーターを有効にして、拡張 ACL の ACL 継承を有効にします。

    inherit acls = yes

    詳細は、smb.conf(5) man ページのパラメーターの説明を参照してください。

  2. smb サービスを再起動します。

    ~]# systemctl restart smb
  3. 必要に応じて、システムの起動時に、smb サービスが自動的に起動するようにします。

    ~]# systemctl enable smb
  4. ディレクトリーの ACL を設定します。拡張 ACL の使用に関する詳細は 5章アクセス制御リスト を参照してください。

    例16.4 拡張 ACL の設定

    以下の手順では、Domain Admins グループの読み取り、書き込み、実行のパーミッション、Domain Users グループに対する読み取り、読み取り、実行のパーミッションを設定し、/srv/samba/example/ ディレクトリー上のその他のすべてのユーザーへのアクセスを拒否します。

    拡張 ACL の設定

    1. ユーザーアカウントのプライマリーグループへの自動許可権限を無効にします。

      ~]# setfacl -m group::--- /srv/samba/example/
      ~]# setfacl -m default:group::--- /srv/samba/example/

      ディレクトリーのプライマリーグループは、さらに動的な CREATOR GROUP プリンシパルにマッピングされます。Samba 共有で拡張 POSIX ACL を使用すると、このプリンシパルは自動的に追加され、削除できません。

    2. ディレクトリーに権限を設定します。

      1. Domain Admins グループに読み取り、書き込み、および実行のパーミッションを付与します。

        ~]# setfacl -m group:"DOMAIN\Domain Admins":rwx /srv/samba/example/
      2. Domain Users グループに読み取りおよび実行パーミッションを付与します。

        ~]# setfacl -m group:"DOMAIN\Domain Users":r-x /srv/samba/example/
      3. other の ACL エントリーに権限を設定し、その他の ACL エントリーに一致しないユーザーへのアクセスを拒否します。

        ~]# setfacl -R -m other::--- /srv/samba/example/

        この設定は、このディレクトリーにのみ適用されます。Windows では、これらの ACL は This folder only モードにマッピングされます。

    3. 前の手順で設定した権限を、このディレクトリーに作成した新規ファイルシステムのオブジェクトから継承できるようにするには、以下のコマンドを実行します。

      ~]# setfacl -m default:group:"DOMAIN\Domain Admins":rwx /srv/samba/example/
      ~]# setfacl -m default:group:"DOMAIN\Domain Users":r-x /srv/samba/example/
      ~]# setfacl -m default:other::--- /srv/samba/example/

      この設定により、プリンシパルの This folder only モードが This folder, subfolders, and files に設定されます。

    Samba は、以前設定したパーミッションを以下の Windows ACL にマッピングします。

    プリンシパルアクセス適用先

    DOMAIN\Domain Admins

    完全な制御

    このフォルダー、サブフォルダー、およびファイル

    DOMAIN\Domain Users

    読み取りおよび実行

    このフォルダー、サブフォルダー、およびファイル

    Everyone[a]

    なし

    このフォルダー、サブフォルダー、およびファイル

    所有者 (Unix Userpass:attributes[]owner)[b]

    完全な制御

    このフォルダーのみ

    primary_group (Unix Userpass:attributes[]primary_group)[c]

    なし

    このフォルダーのみ

    CREATOR OWNER[d] [e]

    完全な制御

    サブフォルダーおよびファイルのみ

    CREATOR GROUP[f]

    なし

    サブフォルダーおよびファイルのみ

    [a] Samba は、このプリンシパルの権限を other の ACL エントリーからマッピングします。
    [b] Samba は、ディレクトリーの所有者をこのエントリーにマッピングします。
    [c] Samba は、ディレクトリーのプライマリーグループをこのエントリーにマッピングします。
    [d] 新規ファイルシステムオブジェクトでは、作成者はこのプリンシパルの権限を自動的に継承します。
    [e] POSIX ACL を使用する共有では、このプリンシパルの設定または削除には対応していません。
    [f] 新規ファイルシステムオブジェクトの場合、作成者のプライマリーグループは、自動的にこのプリンシパルの権限を継承します。
16.1.6.1.3. 共有でパーミッションを設定

必要に応じて、Samba 共有へのアクセスを制限または許可するには、/etc/samba/smb.conf ファイルの共有のセクションに特定のパラメーターを設定します。

注記

共有ベースの権限は、ユーザー、グループ、またはホストが共有にアクセスできるかどうかを管理します。この設定は、ファイルシステムの ACL には影響しません。

共有へのアクセスを制限するには、共有ベースの設定を使用します。たとえば、特定のホストからのアクセスを拒否する場合などです。

ユーザーおよびグループに基づいた共有アクセスの設定

ユーザーおよびグループに基づいたアクセス制御により、特定のユーザーおよびグループの共有へのアクセスを許可または拒否できます。たとえば、Domain Users グループの全メンバーが、user アカウントのアクセスが拒否されている時に共有にアクセスできるようにするには、共有の設定に以下のパラメーターを追加します。

valid users = +DOMAIN\"Domain Users"
invalid users = DOMAIN\user

invalid users パラメーターは valid users パラメーターよりも優先度が高くなります。たとえば、user アカウントが Domain Users グループのメンバーである場合に上述の例を使用すると、このアカウントへのアクセスは拒否されます。

詳細は、smb.conf (5) man ページのパラメーターの説明を参照してください。

ホストベースの共有アクセスの設定

ホストベースのアクセス制御により、クライアントのホスト名、IP アドレス、または IP 範囲に基づいて、共有へのアクセスを許可または拒否できます。

たとえば、127.0.0.1 IP アドレス、192.0.2.0/24 IP 範囲、および client1.example.com ホストが共有にアクセスでき、client2.example.com ホストのアクセスも拒否するには、次のコマンドを実行します。

ホストベースの共有アクセスの設定

  1. /etc/samba/smb.conf における共有の設定に以下のパラメーターを追加します。

    hosts allow = 127.0.0.1 192.0.2.0/24 client1.example.com
    hosts deny = client2.example.com
  2. Samba 設定を再読み込みします。

    ~]# smbcontrol all reload-config

hosts deny パラメーターの優先度は hosts allow よりも高くなります。たとえば、client1.example.comhosts allow パラメーターに一覧表示されている IP アドレスに解決すると、このホストのアクセスは拒否されます。

詳細は、smb.conf(5) man ページのパラメーターに関する説明を参照してください。

16.1.6.2. Windows ACL で共有の設定

Samba は、共有およびファイルシステムオブジェクトへの Windows ACL の設定に対応します。これを使用すると、以下が可能になります。

  • きめ細かな Windows ACL を使用する
  • Windows を使用して共有権限およびファイルシステムの ACL を管理する

または、POSIX ACL を使用するように共有を設定することもできます。詳細は「POSIX ACL で共有の設定」を参照してください。

16.1.6.2.1. SeDiskOperatorPrivilege 特権の付与

Windows ACL を使用する共有に対する権限を設定できるのは、SeDiskOperatorPrivilege 特権が付与されているユーザーおよびグループのみです。たとえば、DOMAIN\Domain Admins グループに特権を付与するには、次のコマンドを実行します。

~]# net rpc rights grant "DOMAIN\Domain Admins" SeDiskOperatorPrivilege \
    -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
Successfully granted rights.
注記

ドメイン環境では、ドメイングループ に SeDiskOperatorPrivilege を付与します。これにより、ユーザーのグループメンバーシップを更新し、権限を集中的に管理できます。

SeDiskOperatorPrivilege 付与されているユーザーおよびグループの一覧を表示するには、次のコマンドを実行します。

~]# net rpc rights list privileges SeDiskOperatorPrivilege \
    -U "DOMAIN\administrator"
Enter administrator's password:
SeDiskOperatorPrivilege:
 BUILTIN\Administrators
 DOMAIN\Domain Admins
16.1.6.2.2. Windows ACL サポートの有効化

Windows ACL に対応する共有を設定するには、Samba でこの機能を有効にする必要があります。すべての共有に対してグローバルに有効にするには、/etc/samba/smb.conf ファイルの [global] セクションに以下の設定を追加します。

vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes

または、共有のセクションに同じパラメーターを追加して、個別の共有に対してWindows ACL サポートを有効にできます。

16.1.6.2.3. Windows ACL を使用する共有の追加

/srv/samba/example/ ディレクトリーのコンテンツを共有し、Windows ACL を使用する example という名前の共有を作成するには、以下を実行します。

Windows ACL を使用する共有の追加

  1. または、フォルダーが存在しない場合は作成します。以下に例を示します。

    ~]# mkdir -p /srv/samba/example/
  2. SELinux を enforcing モードで実行する場合は、ディレクトリーに samba_share_t コンテキストを設定します。

    ~]# semanage fcontext -a -t samba_share_t "/srv/samba/example(/.*)?"
    ~]# restorecon -Rv /srv/samba/example/
  3. example 共有を /etc/samba/smb.conf ファイルに追加します。たとえば、共有の write-enabled を追加するには、次のコマンドを実行します。

    [example]
    	path = /srv/samba/example/
    	read only = no
    注記

    ファイルシステムの ACL に関係なく、read only = no を設定しないと、Samba がディレクトリーを読み取り専用モードで共有します。

  4. すべての共有の [global] セクションで Windows ACL サポートを有効にしていない場合は、以下のパラメーターを [example] セクションに追加して、この共有に対してこの機能を有効にします。

    vfs objects = acl_xattr
    map acl inherit = yes
    store dos attributes = yes
  5. /etc/samba/smb.conf ファイルを確認します。

    ~]# testparm

    詳細はtestparm ユーティリティーを 用した smb.conf ファイルの検証」を参照してください。

  6. firewall-cmd ユーティリティーを使用して必要なポートを開き、ファイアウォール設定を再読み込みします。

    ~]# firewall-cmd --permanent --add-service=samba
    ~]# firewall-cmd --reload
  7. smb サービスを再起動します。

    ~]# systemctl restart smb
  8. 必要に応じて、システムの起動時に、smb サービスが自動的に起動するようにします。

    ~]# systemctl enable smb
16.1.6.2.4. Windows ACL を使用する共有の共有権限とファイルシステム ACL の管理

Windows ACL を使用する Samba 共有上の共有およびファイルシステム ACL を管理するには、Computer Management などの Windows アプリケーションを使用します。詳細は Windows ドキュメントを参照してください。

または、smbcacls ユーティリティーを使用して ACL を管理します。詳細はsmbcacls での SMB 共有上の ACL の管理」を参照してください。

注記

Windows からファイルシステムの権限を変更するには、SeDiskOperatorPrivilege 権限が付与されたアカウントを使用する必要があります。SeDiskOperatorPrivilege 特権の付与」を参照してください。

16.1.6.3. smbcacls での SMB 共有上の ACL の管理

smbcacls ユーティリティーは、SMB 共有に保存されたファイルおよびディレクトリーの ACL を一覧表示、設定、および削除できます。ファイルシステムの ACL を管理するのに smbcacls を使用できます。

  • 高度な Windows ACL または POSIX ACL を使用するローカルまたはリモートの Samba サーバー
  • Red Hat Enterprise Linux で、Windows でホストされる共有の ACL をリモートで管理
16.1.6.3.1. アクセス制御エントリーについて

ファイルシステムオブジェクトの各 ACL エントリーには、以下の形式のアクセス制御エントリー (ACE) が含まれます。

security_principal:access_right/inheritance_information/permissions

例16.5 アクセス制御エントリー

AD\Domain Users グループに、Windows 上の This folder, subfolders, and files に適用される Modify パーミッションがある場合は、ACL には以下の ACE が含まれます。

AD\Domain Users:ALLOWED/OI|CI/CHANGE

以下は、個々の ACE を説明しています。

セキュリティープリンシパル
セキュリティープリンシパルは、ACL の権限が適用されるユーザー、グループ、または SID です。
アクセス権
オブジェクトへのアクセスが許可または拒否されるかどうかを定義します。値は、ALLOWED または DENIED のいずれかになります。
継承情報

次の値を取ります。

表16.3 継承の設定

詳細マップ先

OI

オブジェクトの継承

このフォルダーおよびファイル

CI

コンテナーの継承

このフォルダーおよびサブフォルダー

IO

継承のみ

ACE は、現在のファイルまたはディレクトリーには適用されません。

ID

継承済

親ディレクトリーから ACE が継承されました。

また、値は以下のように組み合わせることができます。

表16.4 継承設定の組み合わせ

値の組み合わせWindows の Applies to 設定へのマップ

[command]`OI

CI`

このフォルダー、サブフォルダー、およびファイル

[command]`OI

CI

IO`

サブフォルダーおよびファイルのみ

[command]`CI

IO`

サブディレクトリーのみ

[command]`OI

IO`

権限

この値は、Windows の権限または smbcacls エイリアスを表す 16 進値になります。

  • 1 つ以上の Windows の権限を表す 16 進値。

    次の表に、Windows の高度な権限とそれに対応する値を 16 進法で表示します。

    表16.5 Windows の権限とそれに対応する smbcacls 値を 16 進法で設定

    Windows の権限16 進値

    完全な制御

    0x001F01FF

    フォルダーのスキャンおよびファイルの実行

    0x00100020

    フォルダーの一覧表示 / データの読み取り

    0x00100001

    属性の読み取り

    0x00100080

    拡張属性の読み取り

    0x00100008

    ファイルの作成/データの書き込み

    0x00100002

    フォルダーの作成/データの追加

    0x00100004

    属性の書き込み

    0x00100100

    拡張属性の書き込み

    0x00100010

    サブフォルダーおよびファイルの削除

    0x00100040

    削除

    0x00110000

    権限の読み取り

    0x00120000

    権限の変更

    0x00140000

    所有権の取得

    0x00180000

    ビット単位の OR 演算を使用すると、複数の権限を 1 つの 16 進値として組み合わせることができます。詳細は「ACE マスクの計算」を参照してください。

  • smbcacls エイリアス。以下の表には、利用可能なエイリアスが表示されます。

    表16.6 既存の smbcacls エイリアスとそれに対応する Windows の権限

    smbcacls エイリアスWindows の権限へのマッピング

    R

    読み取り

    READ

    読み取りおよび実行

    W

    Special +

    + * ファイルの作成/データの作成 + * フォルダーの作成/データの追加 + * 属性の書き込み + * 拡張属性の書き込み + * 権限の読み取り

    D

    削除

    P

    権限の変更

    O

    所有権の取得

    X

    スキャン / 実行

    CHANGE

    修正

    FULL

    完全な制御

    注記

    権限を設定する際に、1 文字のエイリアスを組み合わせることができます。たとえば、Windows のパーミッション Read および Delete を適用するように RD を設定できます。ただし、1 文字以外のエイリアスを複数組み合わせたり、エイリアスと 16 進値を組み合わせることはできません。

16.1.6.3.2. smbcacls を使用した ACL の表示

--add などの操作パラメーターを付けずに smbcacls を実行すると、ユーティリティーは、ファイルシステムオブジェクトの ACL を表示します。

たとえば、//server/example 共有のルートディレクトリーの ACL を一覧表示するには、以下のコマンドを実行します。

~]# smbcacls //server/example / -U "DOMAINpass:quotes[administrator]"
Enter DOMAINpass:quotes[administrator]'s password:
REVISION:1
CONTROL:SR|PD|DI|DP
OWNER:AD\Administrators
GROUP:AD\Domain Users
ACL:AD\Administrator:ALLOWED/OI|CI/FULL
ACL:AD\Domain Users:ALLOWED/OI|CI/CHANGE
ACL:AD\Domain Guests:ALLOWED/OI|CI/0x00100021

コマンドの出力は以下のようになります。

  • REVISION: セキュリティー記述子の内部 Windows NT ACL リビジョン
  • CONTROL: セキュリティー記述子の制御
  • OWNER - セキュリティー記述子の所有者の名前または SID
  • GROUP - セキュリティー記述子のグループの名前または SID
  • ACL エントリー。詳細は「アクセス制御エントリーについて」を参照してください。
16.1.6.3.3. ACE マスクの計算

ほとんどの場合、ACE を追加または更新する場合は、表16.6「既存の smbcacls エイリアスとそれに対応する Windows の権限」に記載されている smbcacls エイリアスを使用します。

ただし、表16.5「Windows の権限とそれに対応する smbcacls 値を 16 進法で設定」にあるように高度な Windows の権限を設定する場合は、ビット単位の OR 演算を使用して、正しい値を計算する必要があります。以下のシェルコマンドを使用して値を計算できます。

~]# echo $(printf '0x%X' $
							
							
							
							hex_value_1 | hex_value_2 | ...)

例16.6 ACE マスクの計算

以下のパーミッションを設定したい場合。

  • Traverse folder / execute file (0x00100020)
  • List folder / read data (0x00100001)
  • Read attributes (0x00100080)

以前の権限の 16 進値を計算するには、以下を入力します。

~]# echo $(printf '0x%X' $(( 0x00100020 | 0x00100001 | 0x00100080 )))
0x1000A1

ACE を設定または更新する場合は、戻り値を使用します。

16.1.6.3.4. smbcacls を使用した ACL の追加、更新、および削除

smbcacls ユーティリティーに渡すパラメーターに応じて、ファイルまたはディレクトリーから ACL を追加、更新、および削除できます。

ACL の追加

ACL を、AD\Domain Users グループに This folder, subfolders, and filesCHANGE パーミッションを付与する //server/example のルートに追加するには、以下を実行します。

~]# smbcacls //server/example / -U "DOMAIN\administrator \
    --add ACL:"AD\Domain Users":ALLOWED/OI|CI/CHANGE

ACL の更新

ACL の更新は、新しい ACL の追加に似ています。ACL を更新する場合は、--modify パラメーターと既存のセキュリティープリンシパルを使用して ACL を上書きします。smbcacls が ACL 一覧内でセキュリティープリンシパルを検出すると、ユーティリティーは権限を更新します。これを行わないと、以下のエラーでコマンドが失敗します。

ACL for SID principal_name not found

たとえば、AD\Domain Users グループのパーミッションを更新し、それらを This folder, subfolders, and filesREAD に設定します。

~]# smbcacls //server/example / -U "DOMAIN\administrator \
    --modify ACL:"AD\Domain Users":ALLOWED/OI|CI/READ

ACL の削除

ACL を削除するには、正確な ACL で --deletesmbcacls ユーティリティーに渡します。以下に例を示します。

~]# smbcacls //server/example / -U "DOMAIN\administrator \
    --delete ACL:"AD\Domain Users":ALLOWED/OI|CI/READ

16.1.6.4. ユーザーが Samba サーバーのディレクトリーを共有できるようにする

Samba サーバーでは、root 権限なしでユーザーがディレクトリーを共有できるように設定できます。

16.1.6.4.1. ユーザーの共有機能の有効化

ユーザーがディレクトリーを共有できるようにするには、管理者が Samba でユーザー共有を有効にする必要があります。たとえば、ローカルの example グループのメンバーのみがユーザー共有を作成できるようにするには、以下を実行します。

ユーザー共有の有効化

  1. ローカルの example グループが存在しない場合は作成します。

    ~]# groupadd example
  2. ユーザー共有の定義を保存し、その権限を正しく設定するために、Samba 用のディレクトリーを準備します。以下に例を示します。

    1. ディレクトリーを作成します。

      ~]# mkdir -p /var/lib/samba/usershares/
    2. example グループの書き込み権限を設定します。

      ~]# chgrp example /var/lib/samba/usershares/
      ~]# chmod 1770 /var/lib/samba/usershares/

      このディレクトリーの他のユーザーが保存したファイルの名前変更や削除を禁止するように sticky ビットを設定します。

  3. /etc/samba/smb.conf ファイルを編集し、以下を [global] セクションに追加します。

    1. ユーザー共有の定義を保存するように設定したディレクトリーのパスを設定します。以下に例を示します。

      usershare path = /var/lib/samba/usershares/
    2. このサーバーで Samba を作成できるユーザー共有の数を設定します。以下に例を示します。

      usershare max shares = 100

      usershare max shares パラメーターに 0 のデフォルトを使用する場合、ユーザー共有は無効になります。

    3. 必要に応じて、ディレクトリーの絶対パスの一覧を設定します。たとえば、Samba が /data および /srv ディレクトリーのサブディレクトリーの共有のみを許可するように設定するには、以下を設定します。

      usershare prefix allow list = /data /srv

      設定可能なユーザー共有関連のパラメーターの一覧は、man ページの smb.conf(5) の USERSHARES セクションを参照してください。

  4. /etc/samba/smb.conf ファイルを確認します。

    ~]# testparm

    詳細はtestparm ユーティリティーを 用した smb.conf ファイルの検証」を参照してください。

  5. Samba 設定を再読み込みします。

    ~]# smbcontrol all reload-config

これで、ユーザーが、ユーザー共有を作成できるようになりました。詳細は「ユーザー共有の追加」を参照してください。

16.1.6.4.2. ユーザー共有の追加

「ユーザーの共有機能の有効化」 に従って Samba を設定したら、ユーザーは root権限がなくても、net usershare add コマンドを実行して Samba サーバーのディレクトリーを共有できます。

net usershare add コマンドの構文: net usershare addshare_namepathcommentACLsguest_ok=y|n

重要

ユーザー共有の作成時に ACL を設定する場合は、ACL の前に comment パラメーターを指定する必要があります。空のコメントを設定するには、空の文字列を二重引用符で囲みます。

管理者が /etc/samba/smb.conf ファイルの [global] セクションに usershare allow guests = yes を設定している場合、ユーザーはユーザー共有でのみゲストアクセスを有効にできることに注意してください。

例16.7 ユーザー共有の追加

ユーザーが、Samba サーバーで /srv/samba/ ディレクトリーを共有する場合があります。共有には、example という名前を付け、コメントを設定しないようにし、ゲストユーザーがアクセスできるようにします。また、共有権限は、AD\Domain Users グループへのフルアクセスと、その他のユーザーへの読み取り権限を設定する必要があります。この共有を追加するには、そのユーザーで以下を実行します。

~]$ net usershare add example /srv/samba/ "" \
    "AD\Domain Users":F,Everyone:R guest_ok=yes
16.1.6.4.3. ユーザー共有の設定の更新

ユーザー共有の設定を更新したい場合は、同じ共有名と新規の設定で net usershare add コマンドを使用し、共有をオーバーライドします。「ユーザー共有の追加」を参照してください。

16.1.6.4.4. 既存のユーザー共有に関する情報の表示

ユーザーは、Samba サーバーで net usershare info コマンドを実行して、ユーザーの共有および設定を表示できます。

任意のユーザーが作成したすべてのユーザー共有を表示するには、以下のコマンドを実行します。

~]$ net usershare info -l
[share_1]
path=/srv/samba/
comment=
usershare_acl=Everyone:R,host_name\user:F,
guest_ok=y
...

コマンドを実行するユーザーが作成した共有のみを一覧表示するには、-l パラメーターを省略します。

特定の共有に関する情報のみを表示するには、共有名またはワイルドカードをコマンドに渡します。たとえば、名前が share_ で始まる共有の情報を表示する場合は、以下のコマンドを実行します。

~]$ net usershare info -l share*_
16.1.6.4.5. ユーザー共有の一覧表示

Samba サーバーで設定を行わずに利用可能なユーザー共有のみを一覧表示するには、net usershare list コマンドを使用します。

任意のユーザーが作成した共有を一覧表示するには、以下のコマンドを実行します。

~]$ net usershare list -l
share_1
share_2
...

コマンドを実行するユーザーが作成した共有のみを一覧表示するには、-l パラメーターを省略します。

特定の共有のみを一覧表示するには、共有名またはワイルドカードをコマンドに渡します。たとえば、名前が share_ で始まる共有のみを一覧表示するには、以下のコマンドを実行します。

~]$ net usershare list -l share_*
16.1.6.4.6. ユーザー共有の削除

ユーザー共有を削除するには、共有を作成したユーザーとして、または root ユーザーとして以下を入力します。

~]$ net usershare delete share_name

16.1.6.5. 共有へのゲストアクセスの有効化

特定の状況では、認証なしでユーザーが接続できるディレクトリーを共有します。これを設定するには、共有でゲストアクセスを有効にします。

警告

共有に認証を使用しないと、セキュリティーリスクとなる場合があります。

共有でゲストアクセスが有効になっている場合、Samba はゲスト接続を、guest account パラメーターで設定したオペレーティングシステムアカウントにマッピングします。ゲストユーザーは、以下の条件のうち少なくとも 1 つを満たしている場合にこれらのファイルへアクセスできます。

  • アカウントがファイルシステムの ACL に一覧表示されます。
  • other のユーザーの POSIX 権限はこれを許可します。

例16.8 ゲスト共有の権限

ゲストアカウントを nobody (デフォルト) にマッピングするように Samba を設定している場合は、下記の例の ACL が、以下を行うようになります。

  • ゲストユーザーによる file1.txt の読み取りを許可
  • ゲストユーザーによる file2.txt の読み込みおよび修正を許可する
  • ゲストユーザーが file3.txt を読み込んだり修正しないようにする
-rw-r--r--. 1 root    root   1024 1. Sep 10:00 file1.txt
-rw-r-----. 1 nobody   root   1024 1. Sep 10:00 file2.txt
-rw-r-----. 1 root    root   1024 1. Sep 10:00 file3.txt

たとえば、既存の [example] 共有のゲストアクセスを有効にするには、以下を実行します。

ゲスト共有のセットアップ

  1. /etc/samba/smb.conf ファイルを編集します。

    1. これが、このサーバーで設定した最初のゲスト共有である場合は、以下を行います。

      1. [global] セクションで map to guest = Bad User を設定します。

        [global]
        	...
        	map to guest = Bad User

        この設定により、ユーザー名が存在しない限り、Samba は間違ったパスワードを使用したログイン試行を拒否します。指定したユーザー名がなく、ゲストアクセスが共有で有効になっている場合、Samba は接続をゲストのログインとして処理します。

      2. デフォルトでは、Samba は、Red Hat Enterprise Linux の nobody アカウントにゲストアカウントをマッピングします。オプションで、別のアカウントを設定できます。以下に例を示します。

        [global]
        	...
        	guest account = user_name

        このパラメーターに設定するアカウントは、Samba サーバーにローカルに存在する必要があります。セキュリティー上の理由から、Red Hat は有効なシェルを割り当てていないアカウントを使用することを推奨しています。

    2. [example] セクションに guest ok = yes 設定を追加します。

      [example]
      	...
      	guest ok = yes
  2. /etc/samba/smb.conf ファイルを確認します。

    ~]# testparm

    詳細はtestparm ユーティリティーを 用した smb.conf ファイルの検証」を参照してください。

  3. Samba 設定を再読み込みします。

    ~]# smbcontrol all reload-config

16.1.7. Samba プリントサーバーの設定

Samba をプリントサーバーとして設定すると、ネットワーク上のクライアントが Samba を使用して印刷できます。さらに、Windows クライアントは、(Samba サーバーが設定されている場合は) Samba サーバーからドライバーをダウンロードすることもできます。

プリンターを共有する前に、Samba をセットアップします。

16.1.7.1. Samba spoolssd サービス

Samba spoolssd は、smbd サービスに統合されているサービスです。Samba 設定の spoolssd を有効にすると、大量のジョブまたはプリンターがあるプリントサーバーのパフォーマンスが大幅に向上します。

spoolssd なしでは、Samba は smbd プロセスをフォークし、各プリントジョブの printcap キャッシュを初期化します。プリンターが多数あると、キャッシュの初期化中に smbd サービスが数秒間応答しなくなることがあります。spoolssd サービスを使用すると、遅延なしでプリントジョブを処理している、プレフォークされた smbd プロセスを開始することができます。主な spoolssd smbd プロセスは、少ないメモリーを使用し、子プロセスをフォークして終了します。

spoolssd サービスの有効化:

spoolssd サービスの有効化

  1. /etc/samba/smb.conf ファイルの [global] セクションを編集します。

    1. 以下のパラメーターを追加します。

      rpc_server:spoolss = external
      rpc_daemon:spoolssd = fork
    2. 必要に応じて、以下のパラメーターを設定できます。

      パラメーターデフォルト詳細

      spoolssd:prefork_min_children

      5

      子プロセスの最小数

      spoolssd:prefork_max_children

      25

      子プロセスの最大数

      spoolssd:prefork_spawn_rate

      5

      新しい接続が確立されると、Samba は、このパラメーターに設定した新しい子プロセスの数を、spoolssd:prefork_max_children に設定された値までフォークします。

      spoolssd:prefork_max_allowed_clients

      100

      子プロセスが処理するクライアントの数

      spoolssd:prefork_child_min_life

      60

      子プロセスの最小有効期間 (秒単位)。最小は 60 秒です。

  2. /etc/samba/smb.conf ファイルを確認します。

    ~]# testparm

    詳細はtestparm ユーティリティーを 用した smb.conf ファイルの検証」を参照してください。

  3. smb サービスを再起動します。

    ~]# systemctl restart smb

サービスを再起動すると、Samba が自動的に smbd 子プロセスを開始します。

~]# ps axf
...
30903 smbd
30912 \_ smbd
30913   \_ smbd
30914   \_ smbd
30915   \_ smbd
...

16.1.7.2. Samba でのプリントサーバーのサポートの有効化

プリントサーバーサポートを有効化するには、以下を実行します。

Samba でのプリントサーバーのサポートの有効化

  1. Samba サーバーで CUPS を設定し、そのプリンターを CUPS バックエンドに追加します。詳細は「印刷設定」を参照してください。

    注記

    Samba は、CUPS が Samba プリントサーバーにローカルにインストールされている場合に限り、CUPS に印刷ジョブを転送できます。

  2. /etc/samba/smb.conf ファイルを編集します。

    1. spoolssd サービスを有効にする場合は、[global] セクションに以下のパラメーターを追加します。

      rpc_server:spoolss = external
      rpc_daemon:spoolssd = fork

      詳細は、「Samba spoolssd サービス」 を参照してください。

    2. 印刷バックエンドを設定するには、[printers] セクションを追加します。

      [printers]
      	comment = All Printers
      	path = /var/tmp/
      	printable = yes
      	create mask = 0600
      重要

      printers 共有名はハードコーディングされており、変更はできません。

  3. /etc/samba/smb.conf ファイルを確認します。

    ~]# testparm

    詳細はtestparm ユーティリティーを 用した smb.conf ファイルの検証」を参照してください。

  4. firewall-cmd ユーティリティーを使用して必要なポートを開き、ファイアウォール設定を再読み込みします。

    ~]# firewall-cmd --permanent --add-service=samba
    ~]# firewall-cmd --reload
  5. smb サービスを再起動します。

    ~]# systemctl restart smb

サービスを再起動すると、Samba は CUPS バックエンドに設定したすべてのプリンターを自動的に共有します。特定のプリンターのみを手動で共有する場合は、「特定のプリンターの手動共有」を参照してください。

16.1.7.3. 特定のプリンターの手動共有

Samba をプリントサーバーとして設定している場合、Samba は、デフォルトで CUPS バックエンドで設定されたプリンターをすべて共有します。特定のプリンターのみを共有する場合は、以下を実行します。

特定のプリンターを手動で共有

  1. /etc/samba/smb.conf ファイルを編集します。

    1. [global] セクションで、以下の設定で自動プリンター共有を無効にします。

      load printers = no
    2. 共有するプリンターごとにセクションを追加します。たとえば、Samba の Example-Printer のように CUPS バックエンドにおいて example でという名前のプリンターを共有するには、以下のセクションを追加します。

      [Example-Printer]
      	path = /var/tmp/
      	printable = yes
      	printer name = example

      各プリンターに個別のスプールディレクトリーは必要ありません。[printers] セクションに設定したのと同じ spool ディレクトリーを、プリンターの path パラメーターに設定できます。

  2. /etc/samba/smb.conf ファイルを確認します。

    ~]# testparm

    詳細はtestparm ユーティリティーを 用した smb.conf ファイルの検証」を参照してください。

  3. Samba 設定を再読み込みします。

    ~]# smbcontrol all reload-config

16.1.7.4. Windows クライアント用の自動プリンタードライバーダウンロードの設定

Windows クライアント用に Samba プリントサーバーを実行している場合は、ドライバーをアップロードし、プリンターを事前設定できます。ユーザーがプリンターに接続すると、Windows により、ドライバーが自動的にクライアントにダウンロードされ、インストールされます。ユーザーがインストールするのに、ローカル管理者の権限を必要としません。また、Windows は、トレイの数などの事前設定済みのドライバー設定を適用します。

注記

自動プリンタードライバーダウンロードをセットアップする前に、Samba をプリントサーバーとして設定し、プリンターを共有する必要があります。詳細は「Samba プリントサーバーの設定」を参照してください。

16.1.7.4.1. プリンタードライバーに関する基本情報

本セクションでは、プリンタードライバーに関する一般的な情報を説明します。

対応しているドライバーモデルのバージョン

Samba は、Windows 2000 以降および Windows Server 2000 以降でサポートされているプリンタードライバーのモデルバージョン 3 のみに対応します。Samba は、Windows 8 および Windows Server 2012 で導入されたドライバーモデルのバージョン 4 には対応していません。ただし、これ以降の Windows バージョンは、バージョン 3 のドライバーにも対応しています。

パッケージ対応ドライバー

Samba は、パッケージ対応ドライバーに対応していません。

アップロードするプリンタードライバーの準備

Samba プリントサーバーにドライバーをアップロードする場合は、以下を行います。

  • ドライバーが圧縮形式で提供されている場合は、ドライバーを展開します。
  • 一部のドライバーでは、Windows ホストにドライバーをローカルにインストールするセットアップアプリケーションを起動する必要があります。特定の状況では、インストーラーはセットアップの実行中にオペレーティングシステムの一時フォルダーに個別のファイルを抽出します。アップロードにドライバーファイルを使用するには、以下のコマンドを実行します。

    1. インストーラーを起動します。
    2. 一時フォルダーから新しい場所にファイルをコピーします。
    3. インストールをキャンセルします。

プリントサーバーへのアップロードをサポートするドライバーは、プリンターの製造元にお問い合わせください。

クライアントに 32 ビットおよび 64 ビットのプリンター用ドライバーを提供

32 ビットと 64 ビットの両方の Windows クライアントのプリンターにドライバーを提供するには、両方のアーキテクチャーに対して、同じ名前のドライバーをアップロードする必要があります。たとえば、Example PostScript という名前の 32 ビットドライバーと Example PostScript (v1.0)という 64 ビットドライバーをアップロードする場合は、名前が一致しません。その結果、ドライバーのいずれかをプリンターに割り当てることしかできなくなり、両方のアーキテクチャーでそのドライバーが使用できなくなります。

16.1.7.4.2. ユーザーがドライバーをアップロードおよび事前設定できるようにする

プリンタードライバーをアップロードおよび事前設定できるようにするには、ユーザーまたはグループに SePrintOperatorPrivilege 特権が付与されている必要があります。ユーザーを printadmin グループに追加する必要があります。Red Hat Enterprise Linux では、samba パッケージをインストールする際に、このグループが自動的に作成されます。printadmin グループには、1000 未満で利用可能な一番小さい動的システムの GID が割り当てられます。

printadmin グループに SePrintOperatorPrivilege 特権を付与するには、次のコマンドを実行します。

~]# net rpc rights grant "printadmin" SePrintOperatorPrivilege \
    -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
Successfully granted rights.
注記

ドメイン環境では、ドメイングループに SePrintOperatorPrivilege を付与します。これにより、ユーザーのグループメンバーシップを更新し、権限を集中的に管理できます。

SePrintOperatorPrivilege が付与されているすべてのユーザーおよびグループの一覧を表示するには、次のコマンドを実行します。

~]# net rpc rights list privileges SePrintOperatorPrivilege \
    -U "DOMAIN\administrator"
Enter administrator's password:
SePrintOperatorPrivilege:
 BUILTIN\Administrators
 DOMAIN\printadmin
16.1.7.4.3. print$ 共有の設定

Windows のオペレーティングシステムは、プリントサーバーの共有 print$ から、プリンタードライバーをダウンロードします。この共有名は Windows でハードコーディングされており、変更はできません。

print$ として /var/lib/samba/drivers/ ディレクトリーを共有し、ローカル printadmin グループのメンバーがプリンタードライバーをアップロードできるようにするには、以下を実行します。

print$ 共有の設定

  1. /etc/samba/smb.conf ファイルに [print$] セクションを追加します。

    [print$]
    	path = /var/lib/samba/drivers/
    	read only = no
    	write list = @printadmin
    	force group = @printadmin
    	create mask = 0664
    	directory mask = 2775

    以下の設定を使用します。

    • printadmin グループのメンバーだけがプリンタードライバーを共有にアップロードできます。
    • 新規に作成されたファイルおよびディレクトリーのグループは printadmin に設定されます。
    • 新規ファイルの権限は 664 に設定されます。
    • 新しいディレクトリーのパーミッションは、2775 に設定されます。
  2. プリンターの 64 ビットドライバーのみをアップロードするには、/etc/samba/smb.conf ファイルの [global] セクションにこの設定を追加します。

    spoolss: architecture = Windows x64

    この設定がないと、少なくとも 32 ビットバージョンでアップロードしたドライバーのみが表示されます。

  3. /etc/samba/smb.conf ファイルを確認します。

    ~]# testparm

    詳細はtestparm ユーティリティーを 用した smb.conf ファイルの検証」を参照してください。

  4. Samba 設定を再読み込みします。

    ~]# smbcontrol all reload-config
  5. printadmin グループが存在しない場合は作成します。

    ~]# groupadd printadmin
  6. printadmin グループに SePrintOperatorPrivilege 特権を付与します。

    ~]# net rpc rights grant "printadmin" SePrintOperatorPrivilege \
        -U "DOMAIN\administrator"
    Enter DOMAIN\administrator's password:
    Successfully granted rights.

    詳細は、「ユーザーがドライバーをアップロードおよび事前設定できるようにする」 を参照してください。

  7. SELinux を enforcing モードで実行する場合は、ディレクトリーに samba_share_t コンテキストを設定します。

    ~]# semanage fcontext -a -t samba_share_t "/var/lib/samba/drivers(/.*)?"
    ~]# restorecon -Rv /var/lib/samba/drivers/
  8. /var/lib/samba/drivers/ ディレクトリーに権限を設定します。

    • POSIX ACL を使用する場合は、以下を設定します。

      ~]# chgrp -R "printadmin" /var/lib/samba/drivers/
      ~]# chmod -R 2775 /var/lib/samba/drivers/
    • Windows ACL を使用する場合は、以下を設定します。

      プリンシパルアクセス適用先

      CREATOR OWNER

      完全な制御

      サブフォルダーおよびファイルのみ

      Authenticated Users

      読み取りおよび実行、フォルダーのコンテンツの一覧表示、読み取り

      このフォルダー、サブフォルダー、およびファイル

      printadmin

      完全な制御

      このフォルダー、サブフォルダー、およびファイル

      Windows での ACL 設定に関する詳細は、Windows ドキュメントを参照してください。

16.1.7.4.4. クライアントが Samba プリントサーバーを信頼できるようにする GPO の作成

セキュリティー上の理由から、最新の Windows オペレーティングシステムでは、クライアントが、信頼できないサーバーから、パッケージ対応ではないプリンタードライバーをダウンロードできないようにします。プリントサーバーが AD のメンバーである場合は、Samba サーバーを信頼するために、ドメインに Group Policy Object (GPO) を作成できます。

GPO を作成するには、お使いの Windows コンピューターに Windows Remote Server Administration Tools (RSAT) がインストールされていなければなりません。詳細は Windows ドキュメントを参照してください。

クライアントが Samba プリントサーバーを信頼できるようにする GPO の作成

  1. AD ドメインの Administrator ユーザーなど、グループポリシーの編集が可能なアカウントを使用して、Windows コンピューターにログインします。
  2. Group Policy Management を開きます。
  3. AD ドメインを右クリックし、Create a GPO in this domain, and Link it here を選択します。

    Samba で GPO の新規作成
  4. Legacy printer Driver Policy など GPO の名前を入力して、OK をクリックします。新しい GPO がドメインエントリーの下に表示されます。
  5. 新たに作成した GPO を右クリックして Edit を選択し、Group Policy Management Editor を開きます。
  6. Computer ConfigurationPoliciesAdministrative TemplatesPrinters の順にクリックします。

    Samba でプリンターの GPO グループの選択
  7. ウィンドウの右側にあるを Point and Print Restriction をダブルクリックし、ポリシーを編集します。

    1. ポリシーを有効にし、以下のオプションを設定します。

      1. Users can only point and print to these servers を選択し、このオプションの横にあるフィールドに、Samba プリントサーバーの完全修飾ドメイン名 (FQDN) を入力します。
      2. 両方のチェックボックスを Security Prompts で選択して Do not show warning or elevation prompt を選択します。

        Samba GPO のポイントおよび印刷
    2. OK をクリックします。
  8. Package Point and Print - Approved servers をダブルクリックして、ポリシーを編集します。

    1. ポリシーを有効にして、Show ボタンをクリックします。
    2. Samba プリントサーバーの FQDN を入力します。

      Samba GPO で承認されたサーバー
    3. OK をクリックして、Show Contents とポリシープロパティーウィンドウの両方を閉じます。
  9. Group Policy Management Editor を閉じます。
  10. Group Policy Management を閉じます。

Windows ドメインメンバーがこのグループポリシーを適用すると、ユーザーがプリンターに接続する際に、プリンタードライバーが Samba サーバーから自動的にダウンロードされます。

グループポリシーの使用に関する詳細は、Windows ドキュメントを参照してください。

16.1.7.4.5. ドライバーのアップロードおよびプリンターの事前設定

Windows クライアントで Print Management アプリケーションを使用してドライバーをアップロードし、Samba プリントサーバーでホストされるプリンターを事前設定します。詳細は Windows ドキュメントを参照してください。

16.1.8. Samba サーバーのパフォーマンスチューニング

本セクションでは、特定の状況における Samba のパフォーマンスを向上させる設定、そしてパフォーマンスを低下させる設定を説明します。

16.1.8.1. SMB プロトコルバージョンの設定

新しい SMB バージョンごとに機能が追加され、プロトコルのパフォーマンスが向上します。最新の Windows および Windows Server オペレーティングシステムは、常に最新のプロトコルバージョンに対応しています。Samba がプロトコルの最新バージョンも使用している場合は、Samba に接続する Windows クライアントで、このパフォーマンス改善を活用できます。Samba では、server max protocol のデフォルト値が、対応している安定した SMB プロトコルの最新バージョンに設定されます。

常に最新の安定した SMB プロトコルバージョンを有効にするには、server max protocol パラメーターを設定しないでください。このパラメーターを手動で設定する場合は、最新のプロトコルバージョンを有効にするために、それぞれ新しいバージョンの SMB プロトコルで設定を変更する必要があります。

設定を解除するには、/etc/samba/smb.conf ファイルの [global] セクションから server max protocol パラメーターを削除します。

16.1.8.2. 大量のファイルを含むディレクトリーとの共有の調整

100,000 以上のファイルがあるディレクトリーを含む共有のパフォーマンスを向上させるには、以下を実行します。

大量のファイルを含むディレクトリーとの共有の調整

  1. 共有の全ファイルの名前を小文字に変更します。

    注記

    この手順の設定を使用すると、小文字以外の名前が付けられたファイルは表示されなくなります。

  2. 共有のセクションに、以下のパラメーターを設定します。

    case sensitive = true
    default case = lower
    preserve case = no
    short preserve case = no

    パラメーターの詳細は、smb.conf(5) man ページを参照してください。

  3. Samba 設定を再読み込みします。

    ~]# smbcontrol all reload-config

この設定が適用されと、この共有に新たに作成されるすべてのファイルの名前が小文字になります。この設定により、Samba はディレクトリーを大文字と小文字で分けたスキャンが不要になり、パフォーマンスが向上します。

16.1.8.3. パフォーマンスが低下する可能性のある設定

デフォルトでは、Red Hat Enterprise Linux のカーネルは、ネットワークパフォーマンスが高くなるように調整されています。たとえば、カーネルはバッファーサイズに自動チューニングメカニズムを使用しています。/etc/samba/smb.conf ファイルに socket options パラメーターを設定すると、このカーネル設定が上書きされます。その結果、このパラメーターの設定により、ほとんどの場合は、Samba ネットワークのパフォーマンスが低下します。

カーネルから最適化された設定を使用するには、socket options[global] セクションから /etc/samba/smb.conf パラメーターを削除します。

16.1.9. 頻繁に使用される Samba コマンドラインユーティリティー

本セクションでは、Samba サーバーを使用する際によく使うコマンドを説明します。

16.1.9.1. net ユーティリティーの使用

net ユーティリティーを使用すると、Samba サーバーで複数の管理タスクを実行できます。本セクションでは、net ユーティリティーで最も頻繁に使用されるサブコマンドを説明します。

詳細は、net(8) man ページを参照してください。

16.1.9.1.1. net ads join および net rpc join コマンドの使用

join ユーティリティーの net サブコマンドを使用すると、Samba を AD ドメインまたは NT4 ドメインに参加させることができます。ドメインに参加するには、/etc/samba/smb.conf ファイルを手動で作成し、必要に応じて PAM などの追加設定を更新する必要があります。

重要

Red Hat は、realm ユーティリティーを使用してドメインに参加させることを推奨します。realm ユーティリティーは、関連するすべての設定ファイルを自動的に更新します。詳細は「ドメインの参加」を参照してください。

net コマンドを使用してドメインに参加するには、以下を実行します。

net コマンドを使用したドメインへの参加

  1. 以下の設定で /etc/samba/smb.conf ファイルを手動で作成します。

    • AD ドメインメンバーの場合:

      [global]
      workgroup = domain_name
      security = ads
      passdb backend = tdbsam
      realm = AD_REALM
    • NT4 ドメインメンバーの場合:

      [global]
      workgroup = domain_name
      security = user
      passdb backend = tdbsam
  2. デフォルトドメインの *、および参加するドメインの ID マッピング設定を /etc/samba/smb.conf[global] セクションに追加します。詳細は「ID マッピングについて」を参照してください。
  3. /etc/samba/smb.conf ファイルを確認します。

    ~]# testparm

    詳細はtestparm ユーティリティーを 用した smb.conf ファイルの検証」を参照してください。

  4. ドメイン管理者としてドメインに参加します。

    • AD ドメインに参加するには、以下のコマンドを実行します。

      ~]# net ads join -U "DOMAINpass:quotes[administrator]"
    • NT4 ドメインに参加するには、以下のコマンドを実行します。

      ~]# net rpc join -U "DOMAINpass:quotes[administrator]"
  5. /etc/nsswitch.conf ファイルの passwd および group データベースのエントリーに winbind ソースを追加します。

    passwd:   files winbind
    group:   files winbind
  6. winbind サービスを有効にして起動します。

    ~]# systemctl enable winbind
    ~]# systemctl start winbind
  7. 必要に応じて、authconf ユーティリティーを使用して PAM を設定します。

    詳細は、Red Hat System-Level Authentication GuidePAM (プラグ可能な認証モジュール) の使用セクションを参照してください。

  8. AD 環境では、必要に応じて Kerberos クライアントを設定します。

    詳細は Red Hat システムレベルの認証ガイドConfiguring a Kerberos Client セクションを参照してください。

16.1.9.1.2. net rpc rights コマンドの使用

Windows では、アカウントおよびグループに特権を割り当て、共有での ACL の設定やプリンタードライバーのアップロードなどの特別な操作を実行できます。Samba サーバーでは、net rpc rights コマンドを使用して権限を管理できます。

権限の一覧表示

利用可能な特権とその所有者の一覧を表示するには、net rpc rights list コマンドを使用します。以下に例を示します。

net rpc rights list -U "DOMAINpass:attributes[{blank}]administrator"
Enter DOMAINpass:attributes[{blank}]administrator's password:
   SeMachineAccountPrivilege Add machines to domain
   SeTakeOwnershipPrivilege Take ownership of files or other objects
       SeBackupPrivilege Back up files and directories
      SeRestorePrivilege Restore files and directories
   SeRemoteShutdownPrivilege Force shutdown from a remote system
   SePrintOperatorPrivilege Manage printers
      SeAddUsersPrivilege Add users and groups to the domain
    SeDiskOperatorPrivilege Manage disk shares
      SeSecurityPrivilege System security

特権の付与

アカウントまたはグループに特権を付与するには、net rpc rights grant コマンドを使用します。

たとえば、DOMAIN\printadmin グループに SePrintOperatorPrivilege 特権を付与します。

~]# net rpc rights grant "DOMAIN\printadmin" SePrintOperatorPrivilege \
    -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
Successfully granted rights.

特権の取り消し

アカウントまたはグループから権限を取り消すには、net rpc rights revoke を使用します。

たとえば、DOMAIN\printadmin グループから SePrintOperatorPrivilege 権限を取り消すには、次のコマンドを実行します。

~]# net rpc rights remoke "DOMAIN\printadmin" SePrintOperatorPrivilege \
    -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
Successfully revoked rights.
16.1.9.1.3. net rpc share コマンドの使用

net rpc share コマンドは、ローカルまたはリモートの Samba または Windows サーバーの共有の一覧表示、追加、および削除を行う機能を提供します。

共有の一覧表示

SMB サーバーの共有を一覧表示するには、net rpc share list command を使用します。必要に応じて、-S server_name パラメーターをコマンドに渡して、リモートサーバーの共有を一覧表示します。以下に例を示します。

~]# net rpc share list -U "DOMAIN\administrator" -S example
Enter DOMAIN\administrator's password:
IPC$
share_1
share_2
...
注記

/etc/samba/smb.conf ファイル内のセクションで browseable = no が設定されている Samba サーバーでホストされている共有は、出力には表示されません。

共有の追加

この net rpc share add コマンドを使用すると、SMB サーバーに共有を追加できます。

たとえば、C:\example\ ディレクトリーを共有するリモートの Windows サーバーに、共有 example を追加するには、以下のコマンドを実行します。

~]# net rpc share add example="C:\example" -U "DOMAIN\administrator" -S server
注記

Windows のディレクトリー名を指定する際は、パスの末尾のバックスラッシュを省略する必要があります。

このコマンドを使用して Samba サーバーに共有を追加するには、以下を行います。

  • -U パラメーターで指定したユーザーには SeDiskOperatorPrivilege 特権が付与されている必要があります。
  • 共有セクションを、/etc/samba/smb.conf ファイルに追加し、Samba を再読み込みするスクリプトを記述する必要があります。スクリプトは、/etc/samba/smb.conf[global] のセクションの add share command パラメーターで設定する必要があります。詳細は、smb.conf (5) man ページの add share command の説明を参照してください。

共有の削除

この net rpc share delete コマンドを使用すると、SMB サーバーから共有を削除できます。

たとえば、example という名前の共有を、リモートの Windows サーバーから削除するには、以下のコマンドを実行します。

~]# net rpc share delete example -U "DOMAIN\administrator" -S server

このコマンドを使用して Samba サーバーから共有を削除するには、以下のコマンドを実行します。

  • -U パラメーターで指定したユーザーには SeDiskOperatorPrivilege 特権が付与されている必要があります。
  • /etc/samba/smb.conf ファイルから共有のセクションを削除し、Samba を再読み込みするスクリプトを記述する必要があります。スクリプトは、/etc/samba/smb.conf[global] セクションの delete share command パラメーターで設定する必要があります。詳細は、smb.conf(5) の man ページの delete share command の説明を参照してください。
16.1.9.1.4. net user コマンドの使用

net user コマンドを使用すると、AD DC または NT4 PDC で以下の操作を実行できます。

  • すべてのユーザーアカウントの一覧を表示
  • ユーザーの追加
  • ユーザーの削除
注記

AD ドメイン用の ads、NT4 ドメイン用の rpc などの接続方法の指定は、ドメインユーザーアカウントを一覧表示する場合にのみ必要です。その他のユーザー関連のサブコマンドは、接続メソッドを自動検出できます。

-U user_name パラメーターをコマンドに渡して、要求されたアクションを実行できるユーザーを指定します。

ドメインユーザーアカウントの一覧表示

AD ドメイン内のユーザーを一覧表示するには、以下を実行します。

~]# net ads user -U "DOMAIN\administrator"

NT4 ドメインのユーザーを一覧表示するには、以下を実行します。

~]# net rpc user -U "DOMAIN\administrator"

ユーザーアカウントのドメインへの追加

Samba ドメインメンバーの場合は、net user add コマンドを使用して、ユーザーアカウントをドメインに追加できます。

たとえば、user アカウントをドメインに追加します。

ユーザーアカウントのドメインへの追加

  1. 以下のアカウントを追加します。

    ~]# net user add user password -U "DOMAIN\administrator"
    User user added
  2. 必要に応じて、リモートプロシージャコール (RPC) シェルを使用して、AD DC または NT4 PDC でアカウントを有効にします。以下に例を示します。

    ~]# net rpc shell -U DOMAIN\administrator -S DC_or_PDC_name
    Talking to domain DOMAIN (S-1-5-21-1424831554-512457234-5642315751)
    
    net rpc> user edit disabled user no
    Set user's disabled flag from [yes] to [no]
    
    net rpc> exit

ドメインからのユーザーアカウントの削除

Samba ドメインメンバーの場合は、net user delete コマンドを使用して、ドメインからユーザーアカウントを削除できます。

たとえば、ドメインから user アカウントを削除するには、以下のコマンドを実行します。

~]# net user delete user -U "DOMAIN\administrator"
User user deleted
16.1.9.1.5. net usershare コマンドの使用

「ユーザーが Samba サーバーのディレクトリーを共有できるようにする」を参照してください。

16.1.9.2. rpcclient ユーティリティーの使用

rpcclient ユーティリティーを使用すると、ローカルまたはリモートの SMB サーバーでクライアント側の Microsoft Remote Procedure Call (MS-RPC) 機能を手動で実行できます。ただし、ほとんどの機能は、Samba が提供する個別のユーティリティーに統合されています。MS-PRC 関数のテストには rpcclient のみ使用します。

たとえば、ユーティリティーを使用すると以下が可能となります。

  • プリンターのスプールサブシステム (SPOOLSS) を管理します。

    例16.9 プリンターへのドライバーの割り当て

    ~]# rpcclient server_name -U "DOMAINpass:quotes[administrator]" \
        -c 'setdriver "printer_name" "driver_name"'
    Enter DOMAINpass:quotes[administrator]s password:
    Successfully set printer_name to driver driver_name.
  • SMB サーバーに関する情報を取得します。

    例16.10 すべてのファイル共有および共有プリンターの一覧表示

    ~]# rpcclient server_name -U "DOMAINpass:quotes[administrator]" -c 'netshareenum'
    Enter DOMAINpass:quotes[administrator]s password:
    netname: Example_Share
    	remark:
    	path:  C:\srv\samba\example_share\
    	password:
    netname: Example_Printer
    	remark:
    	path:  C:\var\spool\samba\
    	password:
  • Security Account Manager Remote (SAMR) プロトコルを使用して操作を実行します。

    例16.11 SMB サーバー上のユーザーの一覧表示

    ~]# rpcclient server_name -U "DOMAINpass:quotes[administrator]" -c 'enumdomusers'
    Enter DOMAINpass:quotes[administrator]s password:
    user:[user1] rid:[0x3e8]
    user:[user2] rid:[0x3e9]

    スタンドアロンサーバーまたはドメインメンバーに対してコマンドを実行すると、ローカルデータベースのユーザーの一覧が表示されます。ADDC または NT4 PDC に対してコマンドを実行すると、ドメインユーザーの一覧が表示されます。

サポートされるサブコマンドの一覧は、man ページの rpcclient(1) の COMMANDS セクションを参照してください。

16.1.9.3. samba-regedit アプリケーションの使用

プリンター設定などの特定の設定は、Samba サーバーのレジストリーに保存されます。ncurses ベースの samba-regedit アプリケーションを使用して、Samba サーバーのレジストリーを編集できます。

Samba regedit

アプリケーションを起動するには、次のコマンドを入力します。

~]# samba-regedit

次のキーを使用します。

  • カーソルを上下に動かして、レジストリーツリーと値の間を移動します。
  • Enter - キーを開くか、値を編集します。
  • Tab: KeyValue ペインを切り替えます。
  • Ctrl+C: アプリケーションを閉じます。

16.1.9.4. smbcacls ユーティリティーの使用

smbcacls での SMB 共有上の ACL の管理」を参照してください。

16.1.9.5. smbclient ユーティリティーの使用

smbclient ユーティリティーを使用すると、コマンドラインの FTP クライアントと同様に、SMB サーバーのファイル共有にアクセスできます。たとえば、ファイルを共有にアップロードしたり、共有からダウンロードしたりできます。

たとえば、DOMAIN\user アカウントを使用して server でホストされている example 共有に対して認証するには、以下のコマンドを実行します。

~]# smbclient -U "DOMAIN\user" //server/example
Enter domain\user's password:
Domain=[SERVER] OS=[Windows 6.1] Server=[Samba 4.6.2]
smb: \>

smbclient が共有に正常に接続すると、ユーティリティーはインタラクティブモードになり、以下のプロンプトが表示されます。

smb: \>

対話式シェルで利用可能なすべてのコマンドを表示するには、以下のコマンドを実行します。

smb: \> help

特定のコマンドのヘルプを表示するには、以下のコマンドを実行します。

smb: \> help command_name

インタラクティブシェルで利用可能なコマンドの詳細と説明は、man ページの smbclient(1) を参照してください。

16.1.9.5.1. インタラクティブモードでの smbclient 使用

smbclient パラメーターを指定せずに -c を使用すると、ユーティリティーは対話モードを開始します。

以下の手順では、SMB 共有に接続し、サブディレクトリーからファイルをダウンロードする方法を説明します。

smbclient を使用して SMB 共有からファイルをダウンロード

  1. 共有に接続します。

    ~]# smbclient -U "DOMAINpass:quotes[user_name]" //server_name/share_name
  2. /example/ ディレクトリーに移動します。

    smb: \> cd /example/
  3. ディレクトリー内のファイルを一覧表示します。

    smb: \example\> ls
     .          D     0 Mon Sep 1 10:00:00 2017
     ..          D     0 Mon Sep 1 10:00:00 2017
     example.txt     N  1048576 Mon Sep 1 10:00:00 2017
    
         9950208 blocks of size 1024. 8247144 blocks available
  4. example.txt ファイルをダウンロードします。

    smb: \example\> get example.txt
    getting file \directory\subdirectory\example.txt of size 1048576 as example.txt (511975,0 KiloBytes/sec) (average 170666,7 KiloBytes/sec)
  5. 共有から切断します。

    smb: \example\> exit
16.1.9.5.2. スクリプティングモードでの smbclient の使用

-c commands パラメーターを smbclient に渡すと、リモートの SMB 共有でコマンドを自動的に実行できます。これにより、スクリプトで smbclient を使用できます。

以下のコマンドは、SMB 共有への接続方法およびサブディレクトリーからのファイルのダウンロード方法を表示します。

~]# smbclient -U DOMAINpass:quotes[user_name] //server_name/share_name \
    -c "cd /example/ ; get example.txt ; exit"

16.1.9.6. smbcontrol ユーティリティーの使用

この smbcontrol ユーティリティーを使用すると、コマンドメッセージをこれらのサービス smbdnmbdwinbindd またはすべてのサービスに送信できます。この制御メッセージは、設定の再読み込みなどのサービスを指示します。

例16.12 smbdnmbd、および winbindd サービスの設定の再読み込み

たとえば、の設定を再読み込みするには smbdnmbdwinbinddreload-config message-type を all の送信先に送信します。

~]# smbcontrol all reload-config

詳細情報および利用可能なコマンドメッセージタイプの一覧は、smbcontrol(1) man ページを参照してください。

16.1.9.7. smbpasswd ユーティリティーの使用

smbpasswd ユーティリティーは、ローカルの Samba データベースでユーザーアカウントおよびパスワードを管理します。

ユーザーとしてコマンドを実行すると、smbpasswd はユーザーの Samba パスワードを変更します。以下に例を示します。

[user@server ~]$ smbpasswd
New SMB password:
Retype new SMB password:

root ユーザーとして smbpasswd を実行する場合は、たとえばユーティリティーを使用して以下を行うことができます。

  • 新しいユーザーを作成します。

    [root@server ~]# smbpasswd -a user_name
    New SMB password:
    Retype new SMB password:
    Added user user_name.
    注記

    Samba データベースにユーザーを追加する前に、ローカルのオペレーティングシステムにアカウントを作成する必要があります。「新規ユーザーの追加」を参照してください。

  • Samba ユーザーを有効にします。

    [root@server ~]# smbpasswd -e user_name
    Enabled user user_name.
  • Samba ユーザーを無効にします。

    [root@server ~]# smbpasswd -x user_name
    Disabled user user_name.
  • ユーザーを削除します。

    [root@server ~]# smbpasswd -x user_name
    Deleted user user_name.

詳細は、smbpasswd(8) man ページを参照してください。

16.1.9.8. smbstatus ユーティリティーの使用

この smbstatus ユーティリティーは以下について報告します。

  • smbd デーモンの PID ごとの接続を Samba サーバーに接続します。このレポートには、ユーザー名、プライマリグループ、SMB プロトコルのバージョン、暗号、および署名の情報が含まれます。
  • Samba 共有ごとの接続このレポートには、smbd デーモンの PID、接続しているマシンの IP、接続が確立された時点のタイムスタンプ、暗号、および署名情報が含まれます。
  • ロックされたファイルの一覧。レポートエントリーには、日和見ロック (oplock) タイプなどの詳細が含まれます。

例16.13 smbstatus ユーティリティーの出力

~]# smbstatus

Samba version 4.6.2
PID Username       Group        Machine              Protocol Version Encryption Signing
-----------------------------------------------------------------------------------------------------------------------------
963 DOMAIN\administrator DOMAIN\domain users client-pc (ipv4:192.0.2.1:57786) SMB3_02      -      AES-128-CMAC

Service pid Machine  Connected at         Encryption Signing:
-------------------------------------------------------------------------------
example 969 192.0.2.1 Mo Sep 1 10:00:00 2017 CEST -      AES-128-CMAC

Locked files:
Pid Uid  DenyMode  Access  R/W   Oplock   SharePath      Name   Time
------------------------------------------------------------------------------------------------------------
969 10000 DENY_WRITE 0x120089 RDONLY LEASE(RWH) /srv/samba/example file.txt Mon Sep 1 10:00:00 2017

詳細は、smbstatus(1) man ページを参照してください。

16.1.9.9. smbtar ユーティリティーの使用

smbtar ユーティリティーは、SMB 共有またはそのサブディレクトリーのコンテンツのバックアップを作成し、そのコンテンツを tar アーカイブに保存します。または、コンテンツをテープデバイスに書き込むこともできます。

たとえば、//server/example/ 共有にある demo ディレクトリーのコンテンツのバックアップを作成し、コンテンツを /root/example.tar アーカイブに保存するには、以下を実行します。

~]# smbtar -s server -x example -u user_name -p password -t /root/example.tar

詳細は、smbtar(1) man ページを参照してください。

16.1.9.10. testparm ユーティリティーの使用

testparm ユーティリティーを 用した smb.conf ファイルの検証」を参照してください。

16.1.9.11. wbinfo ユーティリティーの使用

wbinfo ユーティリティーは、winbindd サービスによって作成され、使用される情報をクエリーして返します。

注記

winbindd サービスは、wbinfo を使用するように設定および実行している必要があります。

たとえば wbinfoを使用して、以下を行うことができます。

  • ドメインユーザーの一覧を表示します。

    ~]# wbinfo -u
    AD\administrator
    AD\guest
    ...
  • ドメイングループの一覧を表示します。

    ~]# wbinfo -g
    AD\domain computers
    AD\domain admins
    AD\domain users
    ...
  • ユーザーの SID を表示します。

    ~]# wbinfo --name-to-sid="AD\administrator"
    S-1-5-21-1762709870-351891212-3141221786-500 SID_USER (1)
  • ドメインおよび信頼に関する情報を表示します。

    ~]# wbinfo --trusted-domains --verbose
    Domain Name  DNS Domain      Trust Type Transitive In  Out
    BUILTIN               None    Yes     Yes Yes
    server               None    Yes     Yes Yes
    DOMAIN1    domain1.example.com  None    Yes     Yes Yes
    DOMAIN2    domain2.example.com  External  No     Yes Yes

詳細は、wbinfo(1) man ページを参照してください。

16.1.10. 関連資料

  • Red Hat Samba パッケージには、パッケージがインストールするすべての Samba コマンドおよび設定ファイルの man ページが含まれています。たとえば、/etc/samba/smb.conf ファイルの man ページを表示して、このファイルに設定できる設定パラメーターをすべて説明します。

    ~]# man 5 smb.conf
  • /usr/share/docs/samba-version/: Samba プロジェクトが提供する一般的なドキュメント、スクリプトの例、および LDAP スキーマファイルが含まれます。
  • Red Hat Cluster Storage Administration Guide: Samba と Clustered Trivial Database (CDTB) の設定に関する情報を提供し、GlusterFS ボリュームに保存されているディレクトリーを共有します。
  • Red Hat Enterprise Linux High Availability Add-on AdministrationAn active/active Samba Server in a Red Hat High Availability Cluster の章では、Samba の高可用性インストールの設定方法を説明します。
  • Red Hat Enterprise Linux 上への SMB 共有のマウントに関する詳細は、Red Hat ストレージ管理ガイドの該当するセクションを参照してください。

16.2. FTP

ファイル転送プロトコル (FTP) は、今日インターネット上で見られる、最も古く、一般的に使用されているプロトコルです。この目的は、ユーザーがリモートホストに直接ログインしなくても、もしくはリモートシステムの使用法についての知識がなくとも、ネットワーク上のコンピューターホスト間で確実にファイルを転送することです。これにより、ユーザーは、標準の簡単なコマンドセットを使用してリモートシステム上のファイルにアクセスすることができます。

本セクションでは、FTP プロトコルの基本および Red Hat Enterprise Linux で推奨される FTP サーバーである vsftpd について概説します。

16.2.1. ファイル転送プロトコル (FTP)

FTP は、クライアント/サーバーアーキテクチャーを使用し、TCP ネットワークプロトコルを使用してファイルを転送します。FTP は古いプロトコルであることから、暗号化されていないユーザー名とパスワード認証を使用します。このため、安全でないプロトコルとみなされており、絶対的に必要でない限り、使用するべきではありません。しかし、FTP はインターネット上で非常に普及しているので、共有ファイルの公開で必要となる場合がよくあります。このため、システム管理者は、FTP プロトコルの特性を認識しておくべきです。

本セクションでは、 vsftpd を設定して TLS による安全を確保する接続の確立方法と、SELinux を用いて FTP サーバーを安全にする方法を説明しています。FTP の代用となるのは、OpenSSH スイートからの sfp です。OpenSSH の設定方法および SSH プロトコル全般に関する情報は、12章OpenSSH を参照してください。

インターネット上で使用されているほとんどのプロトコルとは異なり、FTP が正しく機能するためには複数のネットワークポートを必要とします。FTP クライアントアプリケーションが FTP サーバーへの接続を開始する際に、コマンドポート として知られるポート 21 をサーバー上で開きます。このポートは、すべてのコマンドをサーバーに発行するために使用されます。サーバーから要求されたデータはいずれも データポート を介してクライアントに返されます。データ接続が開始されるデータ接続用ポートの番号は、クライアントが active または passive のモードでデータを要求するかによって異なります。

これらのモードの定義は以下のとおりです。

アクティブモード
アクティブモードは、FTP プロトコルでクライアントへのデータ転送に使用される独自の方法です。FTP クライアントがアクティブモードのデータ転送を開始すると、サーバーは、サーバー上のポート 20 からクライアントの指定する IP アドレスと、ランダムで権限のないポート (1024 以上) への接続を開きます。この方法では、クライアントマシンがポート 1024 以上での接続を受け入れるように許可されている必要があります。インターネットのようなセキュリティー保護されていないネットワークが増加するにともない、ファイアウォールを使用したクライアントマシンの保護が普及しています。このようなクライアント側のファイアウォールは、アクティブモードの FTP サーバーから着信する接続を拒否する場合が多いため、パッシブモードが考案されました。
パッシブモード

パッシブモードはアクティブモードと同様に、FTP クライアントアプリケーションによって開始されます。サーバーからのデータを要求する際に、FTP クライアントはパッシブモードでデータにアクセスしたいことを知らせると、サーバーはサーバー上の IP アドレスとランダムな非特権ポート (1024 以上) を提供します。クライアントは、サーバー上のそのポートに接続して要求した情報をダウンロードします。

パッシブモードは、クライアント側のファイアウォールによるデータ接続障害の問題を解決しますが、サーバー側のファイアウォール管理を複雑化させてしまう場合があります。FTP サーバー上の特権のないポートの範囲を制限することにより、サーバー上で開いておりポート数を減らすことができます。またこの方法により、サーバーを対象としたファイアウォールのルール設定の手順が簡略化されます。

16.2.2. vsftpd サーバー

Very Secure FTP Daemon (vsftpd) は、高速で安定性があり、また重要な点として安全性を確保するため、土台から設計されています。vsftpd は、多数の接続を効率的かつ安全に処理できるため、Red Hat Enterprise Linux とともに配布されるのはスタンドアロン FTP サーバーのみです。

vsftpd で使用されるセキュリティーモデルには、以下に挙げる 3 つの主要な側面があります。

  • 特権プロセスと非特権プロセスの確固たる分離: 別個のプロセスが異なるタスクを処理します。各プロセスは、そのタスクに必要な最低限の権限で稼働します。
  • 高い権限を必要とするタスクを、必要最小限の権限を伴うプロセスで処理: libcap ライブラリー内にある互換性を利用して、通常は完全な root 権限を必要とするタスクを、権限が低いプロセスでより安全に実行できます。
  • ほとんどのプロセスを chroot jail で実行: 可能な場合は常に、プロセスは、ルートディレクトリーを共有ディレクトリーに変更します。すると、このディレクトリーは、chroot jail と見なされます。たとえば、ディレクトリーがプライマリー共有ディレクトリーの /var/ftp/ の場合は、vsftpd/ と呼ばれる新しいルートディレクトリーに /var/ftp/ を再割り当てします。これにより、新たな root ディレクトリー下に格納されていないディレクトリーに対する、ハッカーの潜在的な悪質行為を行うことができなくなります。

これらのセキュリティープラクティスを使用すると、vsftpd によるリクエスト対応方法に以下のような影響があります。

  • 親プロセスは、必要最小限の権限で稼働: 親プロセスは、リスクレベルを最低限に抑えるために必要とされる権限のレベルを動的に算出します。子プロセスは、FTP クライアントとの直接的なインタラクションを処理し、可能な限り権限なしに近い形で稼働します。
  • 高い権限を必要とするオペレーションはすべて、小さな親プロセスによって処理: Apache HTTP Server の場合とほぼ同様に、vsftpd は権限のない子プロセスを起動し、着信接続を処理します。これにより、権限のある親プロセスを最小限に抑えられ、比較的少ないタスクを処理することになります。
  • 親プロセスは、権限のない子プロセスからのリクエストはどれも信頼しない: 子プロセスとの通信はソケット上で受信し、子プロセスからの情報の有効性は動作を実施する前に確認されます。
  • FTP クライアントとのインタラクションの大半は、chroot jail 内の権限のない子プロセスによって処理: これらの子プロセスには権限がなく、共有ディレクトリーへのアクセスしかないため、プロセスがクラッシュした際に攻撃者がアクセスできるのは共有ファイルのみです。

16.2.2.1. vsftpd の起動と停止

現行のセッションで vsftpd サービスを起動するには、シェルプロンプトで root として以下を入力します。

~]# systemctl start vsftpd.service

現在のセッションでサービスを停止するには、root で以下を入力します。

~]# systemctl stop vsftpd.service

vsftpd サービスを再起動するには、次のコマンドを root で実行します。

~]# systemctl restart vsftpd.service

このコマンドは停止し、即座に vsftpd サービスを起動します。これは、この FTP サーバーの設定ファイルを編集した後に設定変更を行う最も効率的な方法です。では、以下のコマンドを使用して、すでに実行している場合にのみ、vsftpd サービスを再起動することができます。

~]# systemctl try-restart vsftpd.service

デフォルトでは、vsftpd サービスがブート時に自動的に起動することは ありません。ブート時に vsftpd サービスが起動するようにするには、root でシェルプロンプトに以下を入力します。

~]# systemctl enable vsftpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

Red Hat Enterprise Linux 7 でシステムサービスを管理する方法は、10章systemd によるサービス管理 を参照してください。

16.2.2.2. vsftpd の複数コピーの起動

1 台のコンピューターを複数の FTP ドメインに使用する場合があります。これは、マルチホーミング と呼ばれるテクニックです。vsftpd を使用してマルチホーミングを行う方法の 1 つに、デーモンの複数コピーを実行し、各コピーに設定ファイルを与える方法があります。

これを行うには、最初に、関連するすべての IP アドレスをシステム上のネットワークデバイスまたはエイリアスネットワークデバイスに割り当てます。ネットワークデバイス、デバイスのエイリアス、およびネットワーク設定スクリプトの追加情報は、Red Hat Enterprise Linux 7 Networking Guide を参照してください。

次に、FTP ドメインの DNS サーバーが正しいマシンを参照するように設定する必要があります。BIND、Red Hat Enterprise Linux で使用されている DNS プロトコル実装、設定ファイルの詳細は、「Red Hat Enterprise Linux 7 ネットワークガイド」を参照してください。

vsftpd が異なる IP アドレスにおけるリクエストに応答するには、デーモンの複数コピーが実行中である必要があります。vsftpd デーモンの複数インスタンスの起動を促進するために、特別な systemd サービスユニット (vsftpd@.service) が vsftpd の起動用にインスタンス化されたサービスとして vsftpd パッケージ内で提供されています。

このサービスユニットを活用するには、vsftpd サーバーで必要な各インスタンスの個別の FTP 設定ファイルを作成し、それを /etc/vsftpd/ ディレクトリーに格納する必要があります。これらの設定ファイルは、(/etc/vsftpd/vsftpd-site-2.conf などの) 一意の名前を持ち、root ユーザーのみが読み取り、書き込み可能とする必要があることに注意してください。

IPv4 ネットワーク上で待機している各 FTP サーバーの設定ファイル内で、以下のディレクティブは一意のものである必要があります。

listen_address=N.N.N.N

N.N.N.N を、使用中の FTP サイト用の 一意IP アドレスに置き換えます。サイトを使用している場合は IPv6、代わりに listen_address6 ディレクティブを使用してください。

複数の設定ファイルを /etc/vsftpd/ ディレクトリーに格納しておけば、vsftpd デーモンの個別インスタンスは、root で以下のコマンドを実行すると開始できます。

~]# systemctl start vsftpd@configuration-file-name.service

上記のコマンドで、configuration-file-name を、vsftpd-site-2 などの、要求しているサーバーの設定ファイルの一意の名前に置き換えます。設定ファイルの .conf 拡張子は、コマンドに含めないことに注意してください。

vsftpd デーモンの複数インスタンスを同時に開始する場合は、vsftpd パッケージに含まれる、systemd ターゲットユニットファイル (vsftpd.target) を活用することができます。この systemd ターゲットにより、/etc/vsftpd/ ディレクトリーで利用可能な vsftpd 設定ファイルごとに独立した vsftpd デーモンが起動します。root として次のコマンドを実行し、ターゲットを有効にします。

~]# systemctl enable vsftpd.target
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.target to /usr/lib/systemd/system/vsftpd.target.

上記のコマンドは、システムの起動時に、(設定された vsftpd サーバーインスタンスとともに) vsftpd サービスを起動するように systemd サービスマネージャーを設定します。システムを再起動することなく、サービスをすぐに開始するには、root で以下のコマンドを実行します。

~]# systemctl start vsftpd.target

systemd ターゲットを使用してサービスを管理する方法は、「systemd ターゲットでの作業」 を参照してください。

サーバーごとに変更するディレクティブには、以下のものがあります。

  • anon_root
  • local_root
  • vsftpd_log_file
  • xferlog_file

16.2.2.3. TLS を使用した vsftpd 接続の暗号化

ユーザー名、パスワード、およびデータを暗号化せずに送信する FTP の従来の不安定な性質に対抗するために、vsftpd デーモンは TLS プロトコルを使用して接続を認証し、すべての送信を暗号化するように設定できます。TLS に対応している FTP クライアントは、TLS 有効になっている状態で vsftpd と通信する必要があることに注意してください。

注記

SSL (Secure Sockets Layer) は、セキュリティープロトコルの古い実装の名前です。新規のバージョンは TLS (Transport Layer Security) と呼ばれています。SSL にはセキュリティーに関する深刻な脆弱性があるため、新規のバージョン (TLS) のみを使用してください。vsftpd サーバーに付随するドキュメントや vsftpd.conf ファイルで使用される設定ディレクティブでは、セキュリティー関連の項目を参照する際に SSL の名前を使用しますが、TLS はサポートされており、ssl_enable ディレクティブが YES に設定されているときにデフォルトで使用されています。

vsftpd.conf ファイルのssl_enable 設定ディレクティブを、YES に設定して、TLS サポートをオンにします。TLS オプションが有効になると自動的にアクティブになる、その他の ssl_enable 関連のディレクティブのデフォルト設定により、合理的に適切に設定された TLS のセットアップが提供されます。たとえば、全接続に TLS v1 プロトコルの使用を必須とする (安全でない SSL プロトコルバージョンはデフォルトで無効になります) ことや、非匿名の全ログインでパスワードおよびデータ送信での TLS の使用を強制することなどです。

例16.14 TLS を使用するように vsftpd の設定

以下の例では、設定ディレクティブは vsftpd.conf ファイルでセキュリティープロトコルの古い SSL バージョンを明示的に無効にします。

ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

設定を変更したら、vsftpd サービスを再起動します。

~]# systemctl restart vsftpd.service

vsftpdTLS の使用を調整するためのその他の TLS 関連の設定ディレクティブについては、vsftpd.conf(5) マニュアルページを参照してください。

16.2.2.4. vsftpd 用の SELinux ポリシー

(他の vsftpd プロセスとともに) ftpd デーモンを管理する SELinux ポリシーは、強制アクセス制御を定義します。これはデフォルトでは、最低限必要なアクセスに基づいています。FTP デーモンが特定のファイルやディレクトリーにアクセスできるようにするには、それらに適切なラベルを割り当てる必要があります。

たとえば、ファイルを匿名で共有できるようにするには、public_content_t ラベルを共有するファイルおよびディレクトリーに割り当てる必要があります。これは、以下のように chcon コマンドを root として使用して実行できます。

~]# chcon -R -t public_content_t /path/to/directory

上記のコマンドでは、/path/to/directory を、ラベルを割り当てるディレクトリーへのパスに置き換えます。同様に、ファイルのアップロード用にディレクトリーを設定する場合は、その特定のディレクトリーに public_content_rw_t ラベルを割り当てる必要があります。その他に、allow_ftpd_anon_write SELinux のブール値オプションを 1 に設定する必要があります。これを行うには、setsebool コマンドを root で使用します。

~]# setsebool -P allow_ftpd_anon_write=1

ローカルユーザーが FTP (Red Hat Enterprise Linux 7 のデフォルト設定) を介してホームディレクトリーにアクセスできるようにするには、ftp_home_dir ブール値オプションを 1 に設定する必要があります。vsftpd をスタンドアロンモードで実行できるようにするには (Red Hat Enterprise Linux 7 ではデフォルトで有効)、ftpd_is_daemon オプションも 1 に設定する必要があります。

他の有用なラベルやブール値オプションの例や FTP に関する SELinux ポリシーの設定方法の詳細情報は、ftpd_selinux(8) man ページを参照してください。SELinux 全般に関する詳細情報は、Red Hat Enterprise Linux 7 SELinux User’s and Administrator’s Guide も併せて参照してください。

16.2.3. 関連資料

vsftpd の詳細情報は、以下の参考資料をご覧ください。

16.2.3.1. インストールされているドキュメント

  • /usr/share/doc/vsftpd-version-number/ ディレクトリー: version-number を、vsftpd パッケージのインストール済みバージョンに置き換えます。このディレクトリーには、ソフトウェアの基本情報を記載した README ファイルが格納されています。TUNING ファイルには基本的なパフォーマンス調整のヒント、そして SECURITY/ ディレクトリーには vsftpd で使用されているセキュリティーモデルに関する情報が含まれています。
  • vsftpd 関連の man ページ: デーモンおよび設定ファイルに関する man ページは多数あります。以下は、その中でも重要な man ページです。

    サーバーアプリケーション
    {blank}
    • vsftpd(8): vsftpd で利用可能なコマンドラインオプションを説明しています。
    設定ファイル
    {blank}
    • vsftpd.conf(5): vsftpd の設定ファイル内で利用可能なオプションの詳細な一覧を格納しています。
    • hosts_access(5): TCP ラッパーの設定ファイルで利用可能なフォーマット hosts.allowhosts.deny オプションを説明します。
    SELinux とのインタラクション
    {blank}
    • ftpd_selinux(8): ftpd プロセスを管理する SELinux ポリシーと、SELinux ラベルの割り当て方法、およびブール値セットが説明されています。

16.2.3.2. オンラインドキュメント

vsftpd および FTP 全般について
{blank}
  • http://vsftpd.beasts.org/: vsftpd プロジェクトページは、最新のドキュメントやソフトウェアの作成者の連絡先を入手することができる便利なサイトです。
  • http://slacksite.com/other/ftp.html: この Web サイトでは、アクティブモードと passive-mode FTP の相違点を簡単に説明します。
Red Hat Enterprise Linux のドキュメンテーション
{blank}
  • Red Hat Enterprise Linux 7 ネットワークガイド: Red Hat Enterprise Linux 7 の ネットワークガイド では、このシステムにおけるネットワークインターフェース、ネットワーク、ネットワークサービスの設定および管理に関する情報を説明しています。hostnamectl ユーティリティーの概要のほか、これを使用してコマンドラインでホスト名を表示したり、設定する方法を説明しています。
  • Red Hat Enterprise Linux 7 SELinux ユーザーおよび管理者のガイド: Red Hat Enterprise Linux 7 の SELinux ユーザーおよび管理者のガイド では、SELinux の原則と、SELinuxApache HTTP ServerPostfixPostgreSQLOpenShift などの様々なサービスに設定して使用する方法が詳細に説明されています。また、SELinux アクセスパーミッションを systemd が管理するシステムサービス用に設定する方法も説明しています。
  • Red Hat Enterprise Linux 7 セキュリティガイド - Red Hat Enterprise Linux 7 の セキュリティガイド は、ユーザーおよび管理者が、ローカルおよびリモートからの侵入、悪用、悪意のある行為に対してワークステーションおよびサーバーを保護するプロセスとプラクティスを学習する際に役に立ちます。また、重大なシステムサービスを保護する方法についても説明しています。
関連 RFC ドキュメント
{blank}
  • RFC 0959: IETF からの FTP プロトコルのオリジナルの Request for Comments (RFC)。
  • RFC 1123: 短いFTP 関連のセクションで、RFC 0959 を拡張、明確化します。
  • RFC 2228: FTP セキュリティー拡張機能。vsftpd は、TLS 接続および SSL 接続のサポートに必要な小規模のサブセットを実装します。
  • RFC 2389: OPTS コマンド FEAT およびコマンドを処理します。
  • RFC 2428: IPv6 サポート。

16.3. 印刷設定

Print Settings ツールを使用すると、プリンター設定、プリンター設定ファイルの管理、印刷スプールディレクトリー、印刷フィルター、プリンタークラスの管理ができます。

このツールは CUPS (Common Unix Printing System) を基本にしています。CUPS を使用した以前の Red Hat Enterprise Linux バージョンからシステムをアップグレードする場合、アップグレードプロセスは設定を行ったプリンターの設定を保持します。

重要

cupsd.conf の man ページには、CUPS サーバーの設定が記載されています。これには、SSL サポートを有効にするためのディレクティブが含まれています。ただし、CUPS では使用されるプロトコルバージョンのコントロールが許可されません。Resolution for POODLE SSLv3.0 vulnerability (CVE-2014-3566) for components that do not allow SSLv3 to be disabled via configuration settings (設定から SSLv3 を無効にできないコンポーネントで POODLE SSLv3.0 脆弱性 (CVE-2014-3566) を解決する方法) に説明されている脆弱性により、Red Hat はセキュリティー保護のためにこれに依存しないことを推奨しています。stunnelを使用してセキュアなトンネルを提供し、SSLv3 を無効にすることが推奨されます。stunnel の使用方法についての詳細は、Red Hat Enterprise Linux 7 セキュリティーガイド を参照してください。

リモートシステムの 印刷設定 ツールへのアドホックのセキュアな接続は、「X11 転送」の記載通りに、SSH で X11 転送を使用します。

注記

CUPS Web アプリケーションまたはコマンドラインから直接、同一および追加の動作をプリンターで実行できます。Web ブラウザーでアプリケーションにアクセスするには http://localhost:631/ を開いてください。CUPS マニュアルについては、この Web サイトの Home タブのリンクからご覧ください。

16.3.1. 印刷設定の設定ツールの起動

印刷設定 設定ツールを使用すると、既存のプリンターで様々な操作を実行したり、新規プリンターを設定できます。CUPS を直接使用することもできます (CUPS web アプリケーションにアクセスするには http://localhost:631/ を開きます)。

コマンドラインから Print Settings ツールを起動するには、system-config-printer シェルプロンプトでと入力します。この結果、印刷設定 ツールが表示されます。また、GNOME デスクトップで Super キーを押してアクティビティーの概要を入力する場合は、Print Settings と入力し、Enter を押します。この結果、印刷設定 ツールが表示されます。Super キーはキーボードまたはその他のハードウェアに応じて様々なキーで表示されますが、多くの場合、Windows または Command キーとして通常は Spacebar の左側に表示されます。

図16.1「印刷設定ウィンドウ」 に示した Print Settings ウィンドウが 表示されます。

図16.1 印刷設定ウィンドウ

印刷設定の構成ウィンドウ

16.3.2. プリンター設定の開始

プリンターの設定プロセスは、プリンターキューのタイプにより異なります。

USB に接続されているローカルプリンターを設定すると、プリンターが検出され、自動的に追加されます。インストールするパッケージの確認、管理者の指定、または root ユーザーパスワードの入力が求められます。他のポートタイプに接続したローカルプリンターやネットワークプリンターの場合は、手動で設定する必要があります。

プリンターを手動で設定するには、以下の手順に従います。

  1. 印刷設定ツールを起動します (「印刷設定の設定ツールの起動」 を参照)。
  2. ServerNewPrinter に移動します。
  3. Authenticate ダイアログボックスで、管理者または root ユーザーパスワードを入力します。リモートプリンターの初回設定時の場合は、ファイアウォールの調整の承認を求めるプロンプトが出されます。
  4. プリンターの接続タイプを選択し、右側エリアでその詳細を記入します。

16.3.3. ローカルプリンターの追加

以下の手順に従って、シリアルポート以外に接続されたローカルプリンターを追加します。

  1. Add プリターダイアログを開きます (「プリンター設定の開始」 を参照)。
  2. デバイスが自動的に表示されない場合は、左側の一覧でプリンターを接続するポートを選択してください (Serial Port #1LPT #1 など)。
  3. 右側で、接続プロパティーを入力します。

    Other の場合:
    URI (例: file:/dev/lp0)
    Serial Port の場合:

    通信速度

    パリティー

    データビット

    フロー制御

    図16.2 ローカルプリンターの追加

    ローカルプリンターの追加
  4. Forward をクリックします。
  5. プリンターのモデルを選択します。詳細は「プリンターモデルの選択と完了」を参照してください。

16.3.4. AppSocket/HP JetDirect プリンターの追加

以下の手順に従って AppSocket/HP JetDirect プリンターを追加します。

  1. New Printer ダイアログを開きます (「印刷設定の設定ツールの起動」 を参照)。
  2. 左側の一覧で、Network PrinterAppSocket/HP JetDirect を選択します。
  3. 右側で、接続設定を入力します。

    Hostname
    プリンターホスト名または IP アドレス。
    Port Number

    印刷ジョブをリッスンするプリンターポート (デフォルトは 9100)

    図16.3 JetDirect プリンターの追加

    JetDirect プリンターの追加
  4. Forward をクリックします。
  5. プリンターのモデルを選択します。詳細は「プリンターモデルの選択と完了」を参照してください。

16.3.5. IPP プリンターの追加

IPP プリンターは同じ TCP/IP ネットワークにある異なるシステムに接続されているプリンターです。このプリンターが取り付けられているシステムは CUPS を実行しているか、または単に IPP を使用するように設定されているだけです。

プリンターサーバーでファイアウォールが有効な場合は、ポート 631 で受信 TCP 接続が可能になるようにファイアウォールを設定する必要があります。プロトコルを参照する CUPS により、クライアントマシンは共有 CUPS キューを自動的に検出することが可能です。これを有効にするには、クライアントマシンのファイアウォールをポート 631 で受信 UDP パッケージを許可するよう設定する必要があります。

以下の手順にしたがって IPP プリンターを追加します。

  1. New Printer ダイアログを開きます (「プリンター設定の開始」 を参照)。
  2. 左側のデバイス一覧で、Network Printer and Internet Printing Protocol (ipp) または Internet Printing Protocol (https) を選択します。
  3. 右側で、接続設定を入力します。

    Host
    IPP プリンターのホスト名。
    Queue

    新規のキューに与えるキューの名前です (このボックスを空白のままにすると、デバイスノードに基づいた名前が使用されます)。

    図16.4 IPP プリンターの追加

    ネットワーク IPP プリンター
  4. 進む をクリックして続けます。
  5. プリンターのモデルを選択します。詳細は「プリンターモデルの選択と完了」を参照してください。

16.3.6. LPD/LPR Host or Printer の追加

以下の手順に従って LPD/LPR ホストまたはプリンターを追加します。

  1. New Printer ダイアログを開きます (「プリンター設定の開始」 を参照)。
  2. 左側のデバイスの一覧で、Network PrinterLPD/LPR Host or Printer を選択します。
  3. 右側で、接続設定を入力します。

    Host

    LPD/LPR プリンターまたはホストのホスト名

    必要に応じて、Probe をクリックし、LSD ホスト上のキューを検索します。

    Queue

    新規のキューに与えるキューの名前です (このボックスを空白のままにすると、デバイスノードに基づいた名前が使用されます)。

    図16.5 LPD/LPR プリンターの追加

    LPD/LPR プリンターの追加
  4. 進む をクリックして続けます。
  5. プリンターのモデルを選択します。詳細は「プリンターモデルの選択と完了」を参照してください。

16.3.7. Samba (SMB) プリンターの追加

Samba プリンターを追加するには、以下の手順を実行します。

注記

Samba プリンターを追加するには、samba-client パッケージをインストールしておく必要があります。root で以下のコマンドを実行できます。

yum install samba-client

Yum を使用したパッケージのインストールの詳細は、「パッケージのインストール」 を参照して下さい。

  1. New Printer ダイアログを開きます (「プリンター設定の開始」 を参照)。
  2. 左側の一覧で、Network PrinterWindows Printer via SAMBA を選択します。
  3. smb:// フィールドに SMB アドレスを入力します。入力形式は computer name/printer share にします。図16.6「SMB プリンターの追加」 では、コンピューター名dellbox で、プリンター共有r2 です。

    図16.6 SMB プリンターの追加

    SMB プリンター
  4. 利用できるワークグループやドメインを確認するには、閲覧する (Browse) をクリックします。特定のホストのキューだけを表示させるには、ホスト名 (NetBios 名) を入力して、閲覧する をクリックします。
  5. 以下のオプションのいずれかを選択します。

    1. Prompt user if authentication is required: ドキュメントを印刷する際に、ユーザーからユーザー名とパスワードを収集します。
    2. Set authentication details now: 認証情報を提供するため、後で認証情報は必要ありません。Username フィールドには、プリンターにアクセスするユーザー名を入力します。このユーザーは、SMB システムで存在している必要があり、ユーザーはプリンターへのアクセス権限を持っている必要があります。デフォルトのユーザー名は通常、Windows のサーバーでは guest、あるいは Samba サーバーでは nobody です。
  6. Username フィールドで指定したユーザーの Password (必要な場合) を入力します。

    警告

    Samba プリンターのユーザー名とパスワードは、root および lpd (Linux Printing Daemon) が読み取り可能な非暗号化ファイルとしてプリンターサーバーに保存されています。そのため、プリンターサーバーに root アクセスを持つ他のユーザーは、Samba プリンターへのアクセスに使用するユーザー名とパスワードを閲覧することができます。

    Samba プリンターへアクセスするためのユーザー名とパスワードを選択する場合は、ローカルの Red Hat Enterprise Linux システムにアクセスする時に使用するパスワードとは異なるパスワードを選ぶことをお勧めします。

    Samba プリンターサーバーで共有するファイルがある場合も、印刷キューで使用されるパスワードとは異なるパスワードを使用することが推奨されます。

  7. 確認 (Verify) をクリックし、接続をテストします。確認が成功すると、ダイアログボックスが表示され、プリンター共有のアクセスを確認します。
  8. Forward をクリックします。
  9. プリンターのモデルを選択します。詳細は「プリンターモデルの選択と完了」を参照してください。

16.3.8. プリンターモデルの選択と完了

適切なプリンターの接続タイプを選択すると、システムはドライバーを取得するよう試行します。プロセスが失敗した場合は、ドライバーリソースを手動で検索できます。

以下の手順に従い、プリンタードライバーを設定してインストールを完了します。

  1. ドライバーの自動検知が失敗すると、ウィンドウが表示されます。以下のオプションのいずれかを選択します。

    1. Select a Printer from database: システムは、Makes リストの選択したプリンターの製造元に基づいてドライバーを選択します。ご使用のプリンターのモデルが一覧にない場合は、Generic を選択してください。
    2. Provide PPD file: システムは、備わっている ポストスクリプトプリンターデスクリプション (PPD) を使用します。PPD ファイルは製造元が通常提供するプリンターに同梱されています。PPD ファイルが利用可能な場合は、このオプションを選択し、オプションの詳細の下にあるブラウザバーを使用して、PPD ファイルを選択できます。
    3. Search for a printer driver to download: Make and model フィールドにプリンターの製造元とモデルを入力し、OpenPrinting.org で適切なパッケージを検索します。

      図16.7 プリンターブランドの選択

      プリンターデータベースブランドからプリンターブランドを選択する。
  2. 上で選択した内容により、以下に表示される詳細は異なります。

    • Select printer from database オプションのプリンターブランド
    • Provide PPD file オプションの PPD ファイルの場所
    • Search for a printer driver to download オプションのプリンター製造元とモデル
  3. 進む をクリックして続けます。
  4. 選択したオプションが該当する場合は、図16.8「プリンターモデルの選択」 のようなウィンドウが表示されます。左側の Models の列で該当するモデルを選択します。

    注記

    右側で、推奨される印刷ドライバーが自動的に選択されています。ただし、別の利用可能なドライバーを選択することもできます。ただし、別の利用可能なドライバーを選ぶことも可能です。ローカルプリンターはコンピューターに直接接続されているため、プリンターに送信されるデータを処理するにはプリンタードライバーが必要です。

    図16.8 プリンターモデルの選択

    ドライバーメニューでプリンターモデルを選択する
  5. Forward をクリックします。
  6. Describe Printer 下で、Printer Name フィールドにプリンターの一意の名前を入力します。名前には文字、数字、ハイフン (-)、アンダースコア (_) を使用できますが、スペースは使用できませんDescription および Location フィールドを使用して、さらにプリンター情報を追加することもできます。どちらもオプションで、スペースを入れることは可能です。

    図16.9 プリンターの設定

    プリンターの設定
  7. 設定が正しければ、適用 (Apply) をクリックして、ご使用のプリンター設定を確認し、印刷キューを追加できます。戻る (Back) をクリックすると、プリンター設定を変更できます。
  8. 変更が適用されると、テストページの印刷を行うダイアログボックスが表示されます。Yes をクリックするとテストページが印刷されます。「テストページの印刷」 の記載通りに、テストページを後で印刷することもできます。

16.3.9. テストページの印刷

プリンターを設定、またはプリンターの設定を変更した後は、テストページを印刷して、プリンターが適切に機能していることを確認します。

  1. Printing ウィンドウでプリンターを右クリックし、Properties をクリックします。
  2. プロパティーウィンドウで、左側の Settings をクリックします。
  3. 表示されている Settings タブで、テストページの印刷 (Print Test Page) ボタンをクリックします。

16.3.10. 既存プリンターの修正

既存のプリンターを削除するには、Print Settings ウィンドウでプリンターを選択し、PrinterDelete に移動します。プリンターの削除を確認します。別の方法として、Delete キーを押しても削除できます。

デフォルトのプリンターを設定するには、プリンターの一覧で該当するプリンターを右クリックし、コンテキストメニューの Set as Default ボタンをクリックします。

16.3.10.1. 設定ページ

プリンターのドライバー設定を変更するには、Printer 一覧で該当する名前をダブルクリックします。そして、左側の Settings ラベルをクリックし、Settings ページを表示します。

製造元やモデルなどのプリンター設定の変更、テストページの印刷、デバイスの場所 (URI) の変更など行うことができます。

図16.10 設定ページ

設定ページ

16.3.10.2. ポリシーページ

プリンターの状態や出力を変更するには、左側の Policies ボタンをクリックします。

プリンターの状態を選択したり、プリンターの Error Policy を設定できます (エラーが発生した場合は、印刷ジョブを中止、再試行、停止できます)。

バナーページ (banner page) (送信元プリンター、ジョブを開始したユーザー名、印刷中の文書のセキュリティー状態など、印刷ジョブの特徴を説明するページ) の作成も可能です。Starting Banner または Ending Banner のドロップメニューをクリックし、印刷ジョブの性質に最適なオプションを選択します (confidential など)。

16.3.10.2.1. プリンターの共有

Policies ページでは、プリンターを共有としてマークできます。プリンターが共有されている場合は、ネットワーク上で公開されているユーザーはそれを使用できます。プリンターの共有機能を許可するには、Server に移動して SettingsPublish shared printers connected to this system を選択します。

図16.11 ポリシーページ

ポリシーページ

ファイアウォールがポート 631 への受信 TCP 接続、Network Printing Server (IPP) のポートを許可していることを確認してください。Red Hat Enterprise Linux 7 でファイアウォールを通過する IPP トラフィックを許可するには、firewalldIPP サービスを使用します。これを実行するには、以下を行います。

firewalld での IPP サービスの有効化

  1. グラフィカルの firewall-config ツールを起動するには、Super キーを押してアクティビティーの概要に入り、firewall と入力して Enter を押します。Firewall Configuration ウィンドウが開きます。次に管理者または root パスワード入力が求められます。

    もしくは、コマンドラインを使用してグラフィカルなファイアウォール設定ツールを開始するには、root で以下のコマンドを入力します。

    ~]# firewall-config

    Firewall Configuration ウィンドウが開きます。

    ウィンドウ左下の「接続しました」の表示を確認してください。これは、firewall-config ツールがユーザースペースデーモン firewalld に接続されていることを示します。

    現行のファイアウォール設定をただちに変更するには、Configuration というラベルのドロップダウン選択メニューが Runtime に設定されていることを確認します。または、システムの次回の起動時またはファイアウォールの再読み込み時に設定が適用されるように編集するには、ドロップダウンリストから Permanent を選択します。

  2. Zones タブを選択してから、使用されるネットワークインターフェースに対応するファイアウォールゾーンを選択します。デフォルトは public ゾーンです。Interfaces タブには、ゾーンに割り当てられたインターフェースが表示されます。
  3. Services タブを選択してから ipp サービスを選択して共有を有効にします。ipp-client サービスがネットワークプリンターへのアクセスに必要です。
  4. firewall-config ツールを起動します。

firewalld でのポートのオープンおよびクローズの詳細については、Red Hat Enterprise Linux 7 Security Guide を参照してください。

16.3.10.2.2. アクセス制御のページ

Access Control ページで設定したプリンターへのユーザーレベルのアクセスを変更できます。左側の Access Control ラベルをクリックし、ページを表示します。以下でユーザーセット Allow printing for everyone except these users または Deny printing for everyone except these users を選択し、以下でユーザーセットを定義します。テキストボックスにユーザー名を入力し、追加 ボタンをクリックしてユーザーセットにユーザーセットを追加します。

図16.12 アクセス制御のページ

アクセス制御のページ
16.3.10.2.3. プリンターオプションのページ

Printer Options ページにはプリンターのメディアや出力の様々な設定オプションがあります。内容はプリンターごとに異なる場合があります。一般的な印刷の用紙、品質、サイズ設定が含まれます。

図16.13 プリンターオプションのページ

プリンターオプションのページ
16.3.10.2.4. ジョブオプションページ

Job Options ページで、プリンタージョブのオプションの詳細を設定できます。左側の Job Options ラベルをクリックし、ページを表示します。デフォルト設定を編集し、部数、印刷の向き、スライドごとのページ、拡大縮小 (印刷可能領域のサイズを拡大または縮小して、サイズが印刷領域を超えるものを印刷媒体である用紙に合うようにします)、テキストオプションなど、カスタムのジョブオプションを適用します。

図16.14 ジョブオプションページ

ジョブオプションページ
16.3.10.2.5. Ink/Toner Levels ページ

Ink/Toner Levels ページには、トナーの状態の詳細 (該当する場合)、およびプリンターの状態のメッセージが表示されます。左側の Ink/Toner Levels ラベルをクリックし、ページを表示します。

図16.15 Ink/Toner Levels ページ

Ink/Toner Levels ページ

16.3.10.3. 印刷ジョブの管理

Emacs からのテキストファイルの印刷、GIMP からの画像の印刷など、プリンターデーモンに印刷ジョブを送ると、印刷ジョブは印刷のスプールキューに追加されます。印刷のスプールキューはプリンターに送られた印刷ジョブの一覧で、各印刷要求に関する情報 (印刷要求の状態、ジョブ番号など) を表示します。

印刷が処理されている間、Printer Status のアイコンがパネルの Notification Area に表示されます。その Printer Status をクリックすると、図16.16「GNOME 印刷の状態」 のようなウィンドウが表示され、印刷ジョブの状態を確認できます。

図16.16 GNOME 印刷の状態

GNOME 印刷の状態

印刷ジョブをキャンセル、保留、解除、再印刷、認証するためには、GNOME Print Status でジョブを選択し、ジョブメニューでそれぞれコマンドをクリックします。

シェルプロンプトから印刷スプールの印刷ジョブの一覧を表示させるには、lpstat -o コマンドを入力します。最後の数行は以下のようになります。

例16.15 lpstat -o 出力例

$ lpstat -o
Charlie-60       twaugh      1024  Tue 08 Feb 2011 16:42:11 GMT
Aaron-61        twaugh      1024  Tue 08 Feb 2011 16:42:44 GMT
Ben-62         root       1024  Tue 08 Feb 2011 16:45:42 GMT

印刷ジョブをキャンセルするには、コマンド lpstat -o コマンドで要求のジョブ番号を見つけ、cancel job number を使用します。たとえば、cancel 60 は、例16.15「lpstat -o 出力例」 の印刷ジョブをキャンセルします。cancel コマンドでは、その他のユーザーによって開始された印刷ジョブはキャンセルできません。ただし、cancel -U root job_number コマンドを実行して、対象のジョブの削除を強制できます。このようなキャンセルを防止するには、プリンターの動作ポリシーを Authenticated に変更し、root 認証を強制します。

シェルプロンプトから直接ファイルを印刷することもできます。たとえば、コマンド lp sample.txt はテキストファイル sample.txt を出力します。印刷フィルターはファイルのタイプを決定し、プリンターが理解できる形式に変換します。

16.3.11. 関連資料

Red Hat Enterprise Linuxでの印刷の詳細については、以下のリソースを参照してください。

インストールされているドキュメント
  • lp(1): コマンドラインからのファイルの印刷を可能にする lp コマンドの man ページです。
  • lpr(1): コマンドラインからのファイルの印刷を可能にする lpr コマンドの man ページです。
  • cancel(1): 印刷キューから印刷ジョブを削除するためのコマンドユーティリティーの man ページです。
  • mpage(1): 1 枚の用紙に複数ページを印刷するためのコマンドラインユーティリティーの man ページです。
  • cupsd(8): CUPS プリンターデーモンの man ページです。
  • cupsd.conf(5): CUPS プリンターデーモンの設定ファイルの man ページです。
  • classes.conf(5): CUPS のクラス設定ファイルの man ページです。
  • lpstat(1): クラス、ジョブ、プリンターなどの状態情報を表示する lpstat コマンドの man ページです。
オンラインドキュメント
  • http://www.linuxprinting.org/: Linux Foundation web サイトの OpenPrinting グループには、Linux の印刷に関する豊富な情報が記載されています。
  • http://www.cups.org/: CUPS web サイトでは、CUPS のドキュメンテーション、FAQ、およびニュースグループについて記載しています。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。