Skip to content

Instantly share code, notes, and snippets.

@261shimizu
Last active June 23, 2017 09:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 261shimizu/da195000478bf14defe781f089e0f03a to your computer and use it in GitHub Desktop.
Save 261shimizu/da195000478bf14defe781f089e0f03a to your computer and use it in GitHub Desktop.
Linuxの基本的なこと

Linux基礎

歴史


もともとLinuxはUNIX互換のOSを目指して作られた。
UNIXというOSは、主に大型汎用機やワークステーションで利用されていたが、当初は商用ではなく、研究用として開発されていた。
そのため、UNIXは設計内容が公開され自由に利用できるようになっていた。
この特徴のため、各自で改造が繰り返され、同じUNIXでも全然違うものができてしまった。

そこで、UNIXの開発元であるAT&Tがライセンス契約を始めることでUNIXを管理するようになった。
これ以降、AT&TおよびUNIXのライセンス管理団体と契約を結んだ組織だけがUNIXを名乗り、ライセンス契約を結んでいないものは「UNIX互換OS」と呼ばれるようになった。
これがUNIX系OSの誕生。

UNIXが動作するコンピュータは高価で、UNIXライセンスも高額だったことから、ユーザは企業や大学でしかUNIXを利用できなかった。
そんな中、リーナス・トーバルズがPCで使えるUNIX風OS「Linux」を公開。

現在UNIX系と称されるOSは、大きく分けて3つ。

  1. AT&Tのベル研究所が開発したオリジナルの流れをくむ「System V系」。多くの商用UNIXに採用されている
  2. Bill Joy氏がカリフォルニア大学バークレー校にいたときに開発した「BSD(Berkley Software Distribution)系」。研究・教育機関に強いとされている。FreeBSDが有名。
  3. Linux。GPL(GNU General Public License)というライセンス形式で公開された。

GPLとは、以下の4項目を定めたライセンス形式。

  • プログラムを実行する自由
  • プログラムの動作を調べ、それを改変することへの自由
  • プログラムの利用や再配付の自由
  • プログラムを改良し、改良したものを公にリリースする自由

なお、通常はGPLプログラムから派生して作られた二次的著作物もまたGPLでライセンスされる

Linuxディストリビューションの多くが無償で公開されているのも、このライセンス形式が大きく影響している。

ネットワークの設定と管理

目次


ネットワーク周りの用語整理


  • TCP/IPとイーサネット
    インターネットでは、TCP/IPがデフォルトスタンダードとなっている
    規格としてはイーサネットが広く使われていて、イーサネットは、プロトコルとしてTCP/IPを使用する規格になっている

  • IPアドレス
    IPアドレスは、住所のようなもので、グローバルIPアドレスとプライベートIPアドレスが存在する
    グローバルIPアドレスは、WANの中での場所を示すものであり、JPNICが管理している
    JPNICが各プロバイダに割り当て、各プロバイダがユーザに割り当てる
    LAN内での場所を示すものがプライベートIPアドレスで、こちらはLAN内で一意であればよい
    これはLANのネットワーク管理者が自由に割り当てることができる
    IPアドレスはネットワークアドレス部とホストアドレス部に分かれている。その境を表すのがサブネットマスク
    ホストアドレス部がすべて0のアドレスは、そのネットワーク自身のアドレスを示す
    ホストアドレス部がすべて1のアドレスは、そのネットワーク内のすべてのホストに届くブロードキャストアドレスを表す
    サブネットマスクによって、通信先ホストが同一ネットワークにいるかいないかが判断できる
    また、サブネットマスクを変えることで、ネットワークを分割し、効率的にIPアドレスを使用できるメリットがある

  • DHCP
    プライベートIPアドレスは、ネットワーク内で一意に決まらないといけない
    管理者が自由に決められるといっても、空いているアドレスを探して、割り振ったりというのは面倒
    これを自動的にやってくれるのが、DHCP
    ネットワーク起動時に、自動的にそのPCに適切なIPアドレスを割り振ってくれる
    これはMACアドレスと紐づいた管理をしているので、起動ごとにアドレスが変わることは少ない

  • DNS
    IPアドレスはわかりづらい。なので名前を付けるのが良い。IPアドレスの名前解決をするのが、DNS(ドメインネームシステム)サーバ
    DNSサーバがIPアドレスとドメインネーム(-.com等)の対応付けを行っている

  • TCPとUDP
    TCPとは、IPを使用してデータを送るプロトコルで、データの破損等のエラーチェックを行う信頼性の高いプロトコル
    UDPは、エラーチェックを行わない代わりに高速に通信できるプロトコルで、小さなデータや映像等の多少欠損しても問題ない通信に適する
    あくまで「エラーチェック」の有無であって、安全性の問題でない。信頼性の問題

  • NIC
    ネットワークへアクセスするためには、ネットワークインタフェースが必要。
    現在はネットワークへアクセスすることが当然になっているので、ネットワークインタフェースがコントロールチップの中に統合されている
    有線LANを使う場合には、ネットワークインタフェースカードと呼ばれるNICを利用する
    eth0等で表されるのがネットワークインタフェース。NICにはMACアドレスという、NICを識別するための番号がついている
    さらに、物理的なNICだけでなく、仮想的なNICもある。
    仮想的なNICとしては、ループバックインタフェースという、自分自身と通信するためにプログラムが内部的に使用するNICがある
    ネットワークインタフェースは、広くネットワークの窓口を指している
    **ネットワークインタフェースカード(NIC)**というのが具体的なカードのこと
    したがってNICがネットワーク接続に必須なわけではなく、窓口であるネットワークインタフェースが必須だということ
    コントロールチップに内蔵されているのはインタフェースであってカードではない

  • ゲートウェイ
    LANとLANをつなげるのは、ゲートウェイ(ルータ)。異なるネットワークをつなげる役割を果たし、他のネットワークと通信する際に必ず通らなければならない接続ポイントであるといえる
    異なるプロトコルをつなぐ場合には、プロトコルを変換し、よしなにしてくれる
    ゲートウェイはゲートウェイのアドレスを持つ
    たとえばプライベートネットワークとインターネットの接続点となるルータは、ゲートウェイの役割を果たす。
    デフォルトゲートウェイといった場合のゲートウェイは、狭義のゲートウェイであり、ルータとほぼ同義となる。
    同一ネットワークに存在しない外部ネットワークと通信する際に、どのゲートウェイ(ルータ)を使用したらよいかあらかじめ指定しておく
    ネットワーク内部からみると、デフォルト(規定)のゲートウェイさえ知っておけば、外部ネットワークとの通信はゲートウェイが取り持ってくれる
    PC→L2SW→L3SW→ゲートウェイ→ゲートウェイ→…→L3SW→L2SW→PCという流れ
    自分に一番近い出口を探して(出口は設定する)、相手に近い方に近い方に投げられていく

  • MACアドレステーブルとARPテーブル
    L2スイッチにあるテーブルがMACテーブル(バカハブ:リピータハブだと持っていない→つながっているもの全部に垂れ流し)
    MACテーブルは、MACアドレスと自分のポート(ポート番号ではない、差込口のこと)を対応させたもの
    L2スイッチにとって、IPアドレスは意味不明。MACアドレスで判断している
    クライアントPCにあるのが、ARPテーブル
    ARPテーブルは、MACアドレスとIPアドレスを対応させたもの

  • スタティックNAT、ダイナミックNAT、NAPT
    Network Address Translationの略
    LAN内部ホストの(プライベート)IPアドレスと、外部向け(グローバ)IPアドレスを変換する機能

    1. スタティックNAT
      内部ホストのIPアドレスと、外部向けIPアドレスを1対1で結びつける
      内部から外部へアクセスするパケットの送信元IPアドレスを、外部向けIPアドレスに書き換えて通信を行う

    2. ダイナミックNAT
      複数の内部ホストのIPアドレスと、複数の外部向けIPアドレスをN対Nで結びつける

    3. NAPT(IPマスカレード)
      複数の内部ホストのIPアドレスと、1つの外部向けIPアドレスを結びつける
      内部向けIPアドレスは、外部に出る際に外部向けIPアドレスに書き換えられる
      その際にNAPTではポート番号の変換も行う
      つまりポート番号と、内部ホストを対応させることで識別する

通信・通信経路の確認


  • pingコマンド

    • ping ターゲット
    • ターゲットにデータを送り、返答が戻るまでの時間を表示する
    • 通信が可能かどうか調べるのに使ったりする
    • -cオプションをつけると、pingを発行する回数を指定することができる
    • オプションなしだと無限に発行し続ける、Ctrl+Cで終了する
  • tracerouteコマンド

    • traceroute ターゲット
    • ターゲットや、その途中で通過するゲートウェイへデータを送って、ゲートウェイから返答が返ってくるまでの時間を表示する
    • どこのゲートウェイまで行けてるのか調べるのに使うことがある
    • minimalインストールしたり、vagrantのboxに入っていなかったりするから、その場合はインストールする必要がある

pingやtracerouteは、セキュリティ面の考慮から、必要ない場合は応答しない設定にする
pingはICMPというプロトコルを使用するので、このプロトコルをブロックすることで実現する
pingのレスポンス結果(RTT)の目安としては、同じネットワークセグメント上のホストは、1ms(ミリ秒)以内、国内なら10-30ms、地球の裏側だと500ms程度

IPアドレスの確認と設定ファイル


  • ifconfigコマンド

    • ifconfig (インタフェース)
    • ネットワークインタフェースに設定されたIPアドレスとサブネットマスクを表示
    • インタフェースを省略すると、全インタフェース情報を表示
    • eth0が物理インタフェース(イーサネットを使っている場合)。loはループバック用。virbr0は仮想インタフェース
    • cf) ipコマンド、ethtoolコマンド
  • IPアドレスの設定ファイル(/etc/sysconfig/network-scripts/ifcfg-XXX)

    • RedHat系のディストリビューションはIPアドレスの設定を2つの設定ファイルに記述しておき、ブート時にその2つを使って設定する

    • XXXの部分にはインタフェース名を記述し、そのファイルにはXXXのIPアドレスとサブネットマスクなどを記述する

    • 以下がその項目

      項目 内容
      ONBOOT 起動時にアドレスを自動設定する(yes)か否(no)か
      DEVICE ネットワークインタフェース
      HWADDR MACアドレス
      BOOTPROTO アドレスの指定(dhcpにすると自動)、staticにすると指定できる
      --- 以下BOOTPROTOをstaticにした場合の設定項目
      IPADDR IPアドレス
      NETMASK サブネットマスク
      NETWORK ネットワークアドレス
  • 起動時のアドレス設定ファイル(/etc/sysconfig/network)

    • 起動時にアドレスを自動設定するには、DHCP機能を有効にした環境が必要(クライアント側ではこれだけでOK)

    • なぜDHCPのアドレスが必要ないのかというと、DHCP向けの信号をブロードキャストで最初は行うから(DISCOVERをブロードキャストで流す)

    • 受け取ったDHCPサーバは、そのアドレス宛に自分のアドレス情報を返し、DHCPがどこにあるかクライアントはわかるようになる。

    • こういう理屈で、クライアントはDHCPを有効にするだけで、アドレスを割り当ててもらえる

    • /etc/sysconfig/network設定ファイルは、データがほかのネットワークへ転送されるゲートウェイのアドレスとホスト名を記述する

    • 以下がその項目

      項目 内容
      NETWORKING ネットワークを有効にする(yes)か否(no)か
      HOSTNAME ホスト名
      GATEWAY ゲートウェイアドレス
  • 設定を書き換えた後のリスタート

    • /etc/init.d/networkスクリプトにrestartオプションをつけると変更できる
    • このスクリプトはLinuxがブートされるときに実行される

ネットワークインタフェース情報の確認


ネットワークインタフェースに対するハードウェアスペックやファームウェア(*)、リンク状態、リンクスピードなどの確認や、
アクセラレーション機能の有効化・無効化を制御するのに使うのが、ethtoolコマンド

  • ethtool オプション インタフェース名
    • インタフェースの情報を確認する
    • オプションは、-iでファームウェアのバージョン等を表示
    • 仮想ネットワークインタフェースの場合は、多くの情報が取得できない場合がある

*ファームウェアとは、コンピュータに内蔵されるソフトウェアの一種で、回路などの基本的な制御をつかさどるもの。ROMに内蔵される

ルーティングの確認・変更


なんか通信がうまくいってない時に、原因がルーティングにあることが、よくある

  • netstatコマンド

    • 本来は、ネットワークに関する様々な状況を表示してくれるコマンド(network statistics)

    • ルーティングを調べるのにも使うことができ、routeとした時とnetstat -nrとした時の表示がほぼ一緒

    • オプションは、

    • -rでルーティング(ゲートウェイへの流れ)を表示する

    • -aですべてのサービスを表示

    • -nでIPアドレスを数値で表示する

    • -tでTCPソケットを表示する

    • -uでUDPソケット表示

    • -iでネットワークインタフェースの統計情報を表示(各インタフェースのパケット転送量を表示)

    • -lで状態が接続待ち(LISTEN)状態にあるソケットのみ表示する

    • **netstat -tnlp**として使うことが多い(LISTEN状態のTCPをポート番号込みの、IPは数字で表示)

    • cf) ipコマンド

  • routeコマンド

    • route add [-net|-host] ターゲット [netmask サブネットマスク] [インタフェース]

    • このコマンドでルーティングに経路を追加できる

    • ターゲットには、-netを追加した場合はネットワークアドレスを、-hostの場合にはホストアドレスを宛先として指定

    • サブネットマスクを省略した場合、ターゲットに設定したアドレスから判別されるマスク値が設定される

    • インタフェースを省略すると、カーネルが自動的に最適なデバイスを設定する

    • route add default gw ターゲット [インタフェース]

    • default gwとすると、デフォルトゲートウェイ(適切な経路がほかにない場合のゲートウェイ)をルーティングに追加

    • route del [-net|-host] ターゲット [netmask サブネットマスク] [インタフェース]

    • delを指定すると、ルーティングから経路を削除する

    • routeとしてオプションをなしにすると、ルーティングを表示する(netstat -nrとほぼ同じ)

    • cf) ipコマンド

ipコマンド


ipコマンドは、ネットワークにおける操作全般を扱うことができる
CentOSでは今後、ifconfig,route,arp,netstatコマンドなどのnet-toolsパッケージに含まれていたコマンドは標準ではなくなり、ipコマンドに置き換わる

  1. IPアドレス、MACアドレスの確認(= ifconfig)

    • ip address show
  2. ルーティングテーブルの確認(= route, netstat -nr)

    • ip route show
  3. ARPテーブルの確認(= arp)

    • ip neighbor(neighでも可) show

名前解決


DNSとは、Domain Name Systemの略で、IPアドレスとドメイン名を紐づけるシステム
一般に、名前の機能を使うには、

  1. 定義ファイルを使う
  2. DNSを使う

かの二つが考えられる
どちらを(優先して)使うかは、/etc/nsswitch.confという設定ファイルで指定する
ファイルを使う場合には**/etc/hostsを参照し、DNSを使う場合には/etc/resolv.conf**を参照してDNSサーバを使う

  • /etc/nsswitch.conf
    ファイルとDNSのどちらを優先して使うかを指定するファイル
    項目に、hosts:という所があり、これに続くのがファイルとDNSの優先順位
    たとえば、hosts: files dnsだった場合には、まず/etc/hostsを参照して、解決しなかった場合にDNSを使うということ

  • /etc/resolv.conf
    DNSサーバを指定するファイル
    このファイルでは、nameserverとしてDNSサーバを3つまで指定できる
    優先は上に記述されているもので、応答が返ってこない場合は順番に次に指定しているサーバに問い合わせる
    プロバイダが解決
    DHCPサーバに設定されている

    この、/etc/resolv.confは、直接編集するのはNG
    NetworkManagerやnetworkサービス、DHCPクライアントの設定ファイルなどによって、自動的に変更されるので、意図しない動きをする可能性があることが理由
    DNSサーバの設定は、/etc/sysconfig/network-scripts/ifcfg-eth0に、DNS1=192.xxx.xxx.x``DNS2=192.xxx.xx.xxと追記すると、ネットワークインタフェースが有効になる際に/etc/resolv.confが設定される
    なので、システム再起動、NetworkManager、networkを再起動すると反映される

  • /etc/hosts
    ファイルで、静的に名前を定義するファイル
    書式はIPアドレス 名前(FQDN) ホスト名で、1行に1つの定義を記述する
    自力解決(自分で解決できるものは自力で解決したい)

  • nslookupコマンド
    インターネット上では、IPアドレスだけを使うとわかりづらいので、FQDN(Fully Qualified Domain Name)と呼ばれる名前(例:www.xyz.co.jp)を使うことができる
    DNSに問い合わせて、名前とIPの対応を表示してくれるのがnslookupコマンド
    名前からIPを調べるのが、正引き(nslookup xxx.co.jp → xxx.yyy.zzz)
    IPから名前を調べるのが、逆引き(nslookup xxx.yyy.zzz → xxx.co.jp)

ポート番号


TCP/IPにおいては、IPアドレスでどこのPC(ノード)かはわかるが、そのPCのどのサービスにアクセスするかまでは指定できない
この、どのサービスかを指定するのが、ポート番号
ポート番号には、何番がどのサービスに対応するかが規格で決まっている
一般的なサービスは、ポート番号との対応が**/etc/service**に記述されている
規格で決まっている対応は、

  • WELL KNOWN PORT NUMBERS(一般的なポート番号) → 0-1023
  • REGISTERED PORT NUMBERS(登録済みポート番号) → 1024-49151
  • DYNAMIX AND/OR PRIVATE PORTS(自由に利用できるポート番号) → 49152-65535

サーバで使われる主なポート番号は以下の通り

ポート番号 サービス
20 FTP(データ)
21 FTP(制御)
22 SSH
23 Telnet
25 SMTP
53 DNS
80 HTTP
443 HTTPS

たとえば、SSHが22番だということは皆知っているので、アタックされやすい
だからポート番号を変えることがあり、その時に割り当てられるのが、上記のPRIVATE PORTS(49152-65535)になる

ネットワークセキュリティの設定


  • TCPラッパー
    ネットワークセキュリティのためにTCPラッパー(TCP Wrapper)というきのうが提供されている
    TCPラッパーでセキュリティを強化する場合は、サービスがTCPラッパー機能を提供するライブラリ(プログラム)を利用している必要がある
    TCPラッパーには、アクセスを制限する**/etc/hosts.denyと、アクセスを許可する/etc/hosts.allow**の二つのファイルが必要
    この二つのファイルは、サービス名 : 適応するネットワークやIPアドレス、ホスト名、ドメイン名などのクライアントのリストという書式で記述
    クライアントのリストの後に:で区切ると、制限に引っかかる場合に実行するシェルスクリプトを記述できる
    denyのファイルですべて不可にしてから、allowで必要なサービスを開放すると安全

    • TCPラッパー概要
      TCPラッパーの実態は、tcpdというプログラムであり、これを利用することで全てのサービスをtcpd経由(アクセス制限)で動作させることができ、ログも残せる
      TCPラッパーとはIT用語

      TCPwrapperとは、UNIX系OSで稼動するコンピュータにシステムの一部として常駐し、ネットワークを通じたサービスの提供を一元管理して通信履歴(ログ)を保存するソフトウェア。UNIX上で動作するプログラムはTCP/IPというプロトコル(通信規約)を使って様々なサービスを提供するが、TCP wrapperはこれらプログラムが外部との交信に使うTCPポートをすべて抑え、アクセス制御や通信履歴の保存を行う。外部からどのポートへのアクセスをどの程度許可するかを細かく指定でき、どのサービスを提供するかや、どのIPアドレスからの通信を受け付けるかなどをサービスごとに設定することができる。

      ファイアウォールとの関連@IT

      最近の主流としては、接続元によるアクセス制限を上位のファイアウォールなどで行う傾向にある。そのメリットとしては、ネットワーク全体に対するアクセス制御ポリシーを一元管理できること、そして何より対象ホストへの不要なサービスに対する攻撃を到達する前に遮断できるということが挙げられる。そのため、ファイアウォールでさえ防いでいれば、TCP Wrapperなどのような対象サーバ自身で行うアクセス制限は、一見すると必要ないように思える。
      しかし、対象サーバのセキュリティをさらに向上させたいのであれば、対象サーバ自身でのアクセス制限の実施も併せて行うことをお勧めする。その理由としては、例えば内部の別のサーバが侵入された時のことを考えてみるとよいだろう。侵入したサーバを踏台として利用された場合、上位のファイアウォールによるアクセス制限は、全く意味をなさなくなってしまう。対象サーバ上でアクセス制限を行うと、たとえ同一ネットワーク上からのアクセスであっても制限できるため、更なる2次被害を防ぐことが可能だ。

  • ファイアウォール(パケットフィルタリング)の設定
    ポート番号単位でセキュリティの設定ができるのが、ファイアウォール
    ファイアウォールの設定には、iptablesコマンドを使う(管理者権限)
    iptablesは、実際にはパケットフィルタリングであり、ファイアウォールの機能の一部
    これに加えて、iptablesは、NATの機能を持つ
    iptablesは、カーネルのNF(netfilter)によって定義されており、ユーザーランド(カーネル以外のOS)のパケットフィルタリングのルール定義を行うコマンドとして用意されている

    • iptalesコマンド

      • ファイアウォールの設定に使う
      • -Lオプションで引数なしにすると、現在のファイアウォール設定を表示してくれる
    • iptablesの設定ファイル(/etc/sysconfig/iptables)

      • コマンドではなく、設定ファイルをいじると、サービス起動時に設定される
    • service iptables start/stop

      • iptablesの起動と停止が行える
    • iptables-save

      • iptablesコマンドの設定を、iptablesコマンドのオプションの形式で表示しつつ保存する
    • service iptables save

      • iptablesコマンドの設定を保存する
    • service iptables reload

      • ファイルを直接変更した場合に、その変更を適用するときにリロードするコマンド
      • restartでもできるが、プロトコルによっては、iptablesの追加モジュールを使用している場合があり、restartすると接続が切れる
      • reloadだと接続を切らずに適用できる
    • iptables -A チェーン 条件 -j ターゲット

      • コマンドでの設定の基本的な書式の一例(-Aは追加、-Dだと削除、-Rで置き換え)
      • チェーンにはINPUT(受信パケット)やOUTPUT(送信パケット)を
      • 条件にはさまざまなパラメータを使用する
      • ターゲットにはACCEPT(許可)やDROP(破棄)などを指定
      チェーン 説明
      INPUT 受信パケット
      OUTPUT 送信パケット
      FORWARD フォワードするパケット
      PREROUTING 受信時に変換するチェーン
      POSTROUTING 送信時に変換するチェーン
      ターゲット 説明
      ACCEPT パケットの通過を許可
      DROP パケットを破棄
      REJECT パケットを拒否し、ICMP(pingにも使うプロトコル)で通知
      LOG パケットの情報をsyslogに出力
      パラメータ 説明
      -p プロトコル指定
      -s 送信元アドレスを指定
      -d 宛先のアドレスを指定
      --sport, --dport 送信元、宛先のポートを指定
      -j ルールにマッチした場合の移動先をターゲットとする

iptablesのルールは設定された順番に適用される。
デフォルトでは、すべてのパケットをREJECTするルールが設定されているため、コマンドで一番最後に追加されたルールは実際には機能しない(-Iとかでインサートするとまた別)

また、iptablesの設定をGUIで行えるツールがある
system-config-firewall-tui
これは、インストールする必要があることもある(yum install system-config-firewall-tui)
これで設定の変更を行うと、/etc/sysconfig/iptablesの設定が上書きされるので、シャットダウンしても変更は反映されたまま

networkサービスとNetworkManager


CentOS上のネットワークの管理は、networkサービスおよびNetworkManagerサービスで行う

networkサービスは、Linuxで従来から使われているネットワーク管理の仕組み
起動時に設定ファイルからネットワークの情報を読み込み、ネットワークインタフェースに対してIPアドレスなどの設定を行ったり、デフォルトゲートウェイやDNSサーバの情報を起動時に反映させる
これ等の中身はシェルスクリプトの集まりになっている

一方、NetworkManagerは、Linuxにおけるネットワークの管理を抽象化して新たに作った仕組み
また、NetworkManagerはD-bus(*)のAPIを持っていて、ネットワークを利用するアプリケーションと連携を行うことができる

*D-busとは、アプリケーション間で通信を行う時に使用するもの

CentOS6では、NetworkManagerを標準で利用しているがあ、Minimalインストールや、NetworkManagerに非対応のアプリケーションでnetworkサービスを使いたい場合、これ等をいじることがある

  • NetworkManagerの停止とnetworkサービスの有効化
    networkサービスを有効化したい場合には、事前にNetworkManagerを停止、無効化してからnetworkサービスを起動、有効化する
    この作業は、SSH接続したターミナルで行うと、接続が切れて制御できなくなることがあるので注意が必要

    1. service NetworkManager stop として、停止する
    2. chkconfig NetworkManager off として、システム起動時のNetworkManagerサービスの自動実行を無効にする
    3. service network start として、networkサービスを実行
    4. chkconfig notwork on として、システム起動時のnetworkサービスの自動実行を有効にする

**chkconfig**コマンドは、ランレベルに応じて、サービス(デーモン)の自動起動の有効・無効を操作するコマンド
chkconfig サービス on/offとする
chkconfig --listとすると、自動起動するサービスをランレベル別にリスト表示する
--listのあとにサービス名を記述すればそのサービスだけ表示する

ランレベルとは、LinuxOSの動作モードを表す

ランレベル 説明
0 システムが停止した状態
1 シングルユーザモード(セーフモード)。rootでしかログインできない。サーバにトラブルがあった時、コンソールでのトラブル対応時に利用する
2 NFSマウントなしのマルチユーザモード
3 X Windows以外のデーモンのほとんどを起動する動作モード
4 未使用
5 X Windowsのデーモンも起動する
6 システム再起動時

DHCPサーバ構築


DHCPは、IPアドレスを自動的に取得するためのプロトコル
DHCPサーバから、DHCPクライアントに対してIPアドレスなどの設定を自動的に提供する仕組みになっている

*DHCPサーバは、同一ネットワークセグメント内に1つだけ設置すること
そうしないとクライアントは先に受け取ったDHCPサーバからの設定でIPアドレスを設定する
DHCPプロトコルはルータを超えることができないので、ルータで分割された別のネットワークセグメントネットワークセグメントには別のDHCPサーバを設置できる

  1. DHCPサーバのインストール → yum install dhcp
  2. DHCPサーバの設定をいじる → /etc/dhcp/dhcpd.conf
  3. DHCPサービスの開始 → service dhcpd start
  4. DHCPサービスの起動時の自動有効化 → chkconfig dhcpd on
  • DHCPサーバ設定ファイルの編集
    • /etc/dhcp/dhcpd.confにはインストール直後はコメントしかない
    ddns-update-style none;

    ↓ ネットワークアドレスとマスクの設定(ネットワークアドレスとマスクは、サーバ自身のネットワークと一致させなければならない)
    subnet 192.xxx.xxx.xx netmask 255.255.xxx.xx {
        range 192.168.0.200 192.168.0.254; ← 何番から何番までの範囲で割り当てるか  
        option routers 192.xxx.xxx.xx; ← デフォルトゲートウェイ(ルータ)の指定
        option domain-name-servers 192.168.xxx.xx, 192.xxx.xxx; ← DNSサーバの指定
        default-lease-time 18000; デフォルトの貸出時間(秒)を指定  
        max-lease-time 36000; 最大の貸出時間(秒)を指定
    }
    以下、特定のクライアントに固定のIPアドレスを割り当てる設定
    host client1 {
        hardware ethernet FA:XX:YY:ZZ:SS; ← 物理(MAC)アドレス
        fixed-address 192.168.zzz.zzz; ← 割り当てる指定IPアドレス
    }

リース時間が過ぎるとDHCPクライアントはDHCPサーバに対してIPアドレスの再要求を行う
クライアントがIPアドレス要求時にリース時間を指定しなかった場合、default-lease-timeが設定される
リース時間を指定しても、maxより長い時間は要求できない

また、DHCPクライアントの方では、ネットワークインタフェースの設定ファイルにBOOTPROTO=dhcpとしなければならない
DHCPサーバからDNSの情報を受け取ると、デフォルトでクライアントの/etc/resolv.confが自動的に変更される
この自動変更を有効にする設定項目は、PEERDNS=yes

  • DHCPサーバが提供しているIPアドレスの確認
    /var/lib/dhcpd/dhcpd.leasesの中に記録されている

  • WindowsクライアントでのDHCPクライアント設定

    1. 「コントロールパネル」→「ネットワークと共有センター」
    2. 「アダプタの設定の変更」
    3. 使用するネットワークアダプターを右クリックして、ポップアップメニューから「プロパティ」を選択
    4. 「TCP/IPv4」を選択し、「プロパティ」
    5. 「IPアドレスを自動取得する」を選択
    6. DNSサーバ設定をDHCPから取得する場合には、「DNSサーバのアドレスを自動的に取得する」を選択
    7. 閉じる
    8. 使用するネットワークアダプターをクリック 接続状態によって「IPv4接続」の状態表記が変わる
    9. 詳細ボタンをクリックすると、設定された項目が確認できる

設定ファイルまとめ


  1. ネットワークの有効化やホスト名などの情報→/etc/sysconfig/network

  2. 静的な名前解決→/etc/hosts

  3. 参照DNSファイル→/etc/resolv.conf

  4. ネットワークインタフェース設定(DNS情報含む)→/etc/sysconfig/network-scripts/ifcfg-xxx

  5. 名前解決(参照優先順設定)→/etc/nsswitch.conf

  6. ポート番号とサービスの対応リスト→/etc/services
    各種コマンドがポート番号を表示する際、ポート番号に対応した名前に置き換えて表示するのに使う
    名前とポート番号の表示に使うだけであって、実際にはほかのプロトコルがポートを使用している場合がある

  7. プロトコル定義ファイル→/etc/protocols
    各種プロトコルの名前とプロトコル番号が記述されている

  8. iptables(パケットフィルタリング)→/etc/sysconfig/iptables

  9. DHCPサーバ設定→/etc/dhcp/dhcpd.conf

  10. DHCPサーバが提供しているIPアドレス一覧→/var/lib/dhcpd/dhcpd.leases

runlevel変更(CLI⇔GUI)

背景


OracleインストールはCUIでもできるが、推奨はGUIになっている。
このため、runlevelを変更してCLI⇒GUIにする方法を調べた

概要


方法は以下の2つ

  1. inittabを編集し、起動時にGUIで上がってくるようにする
  2. startxコマンドによって、CLIから一時的にGUIにする

方法


  1. /etc/inittabの、id:○:initdefaultの部分を編集

    • GUIにする場合、○の部分を5に変更
    • CUIに戻す場合、○の部分を3に変更
  2. startxコマンドを実行する

    • Ctrl+DeleteでCUIに戻す←要確認。Ctrl+alt+Deleteかも。※VirtualBoxとかだと、ローカルマシンの画面ロックにしかならないので注意。その場合は↓。
    • もしくはログアウトする。(右上のユーザ名のとこから、quitを選択)

その他注意点など


  • X window systemなどがインストール済みでないとダメ。
    • yum groupinstall "X Window System" "GNOME Desktop Environment"
    • yum groupinstall "X Window System" "Desktop" "General Purpose Desktop"

↑環境によって違うかもしれないけど、とりあえず自分の仮想環境では、X Window SystemとDesktopだけでGUIにできた。
逆にX Window SystemとGNOME Desktop EnvironmentだけだとGUIにできなかった。

  • SSH接続では、コマンドラインしか使用できない
    • teraterm等の代わりに、VNCやRDPを使用する
    • VNC(Virtual Network Computing)
    • RDP(Remote Desktop Protocol)

※VNCとRDPについては「GUIでのリモート接続」を参照のこと

Ubuntuインストール

ブートローダーとは(参考)

コンピューターの起動直後に動作し、OSをディスクから読み込んでOSを起動させるプログラム
マスターブートレコード(MBR)とは、ハードディスクの領域の最初の1セクタ。
この領域に、ブートローダーが入っている
BIOS起動→各種ハードウェア認識→MBRからブートローダー読み込み→呼び出したいOSを保管しているハードディスクの位置を知る→OS読み込み
BIOSの中には基本的な周辺機器のドライバが入っているので、周辺機器を認識する。

GRUBとLILOとファイルシステム(参考)

GRUB,LILOの両者ともブートローダー
ファイルシステムは、データファイルがHDDのどのせくたに保管されているかを管理する
LILOは、ファイルシステムを認識できない
なので、LILOは、あるコマンドを使って、MBRにカーネルイメージのあるセクタ位置を記録させる
    ・そのコマンドをうち忘れるとLinuxが起動できない
    ・当然カーネルイメージの移動(mv)も厳禁
GRUBはファイルシステムを認識できるので、ファイル名で設定ファイルを探せる
なのでGRUBが普及している

ターミナルとコンソールについて


  • ターミナルの意味は終端装置
    • 末端機器(電話やテレビなど)を指している
  • コンソールは元はコンピュータを操作するためのもの(画面、卓)
  • TSS(time sharing system: 1台のPCを複数人で同時利用)が出たときに、コンソールをたくさんつないで利用したので、それらのコンソールをターミナルと呼んだ
  • UNIXもTSSの機能を持つ
    • UNIXでは、カーネルと直接対話する装置をコンソール、
    • 外部ネットワークから接続する装置をターミナルと呼ぶ

流れ

  1. F12
  2. インストール中の言語選択
  3. システムロケール等に使用する場所の選択
    • 日本語にしてもコンソールでは日本語を表示できないので文字化けする
  4. キーボード設定 検出しますか いいえ レイアウト日本語
  5. CD-ROMを検出するための~
  6. ホスト名入力(ネットワーク上での自分のシステムを識別する→マシン名??)
  7. ユーザとパスワードのセットアップ(ユーザは非管理者権限、rootアカウントの代わり)
    • 最初は本名を入力、次にユーザ名、パスワード
  8. ホームディレクトリの暗号化 参考
    • LinuxはOSとは別にユーザーごとのホームディレクトリにデータが保存される
    • OSの鍵(ログインパスワード)とは別にホームディレクトリにも鍵をつけると安全
    • ユーザがログインすると自動で暗号解除される(ログインパスワードに鍵がひもづいている)
    • デュアルブート(1つのPCに2つのOS)ではOS間でのデータのやり取りがある→暗号化されていると不便
  9. 時間の設定(タイムゾーン設定)
  10. ディスクのパーティショニング
    • パーティション・・・1つのHDD上で、論理的に分割された各領域のこと。
      • ファイルシステム障害の局所化、ディスク容量不足に伴うトラブル防止、
      • 性能劣化の防止、複数OSの共存等を目的としている
    • マウント・・・ファイルシステムが階層上のどの場所に存在するかを指定すること
    • Linuxでは接続されたデバイスはファイルとして扱われる→/dev以下に配置される
    • /dev/hda→IDEタイプHDD
    • /dev/sda→SCSIタイプHDD (参考 IDEとSCSIタイプについて)
  11. ディスクのパーティショニングをガイドするか、手動にするか、LVMをセットアップするか
    • LVM(logical volume manager)とは、複数のハードディスクやパーティションにまたがった記憶領域を1つの論理的なディスクとして扱うことのできるディスク管理機能(仮想記憶っぽい感じ) 参考図
  12. パーティショニングをすると、そのディスク内のデータは失われる。
    • 既存の論理ボリュームデータを削除する
  13. パーティションの初期化→削除するとしたパーティションのすべてのデータを破壊して初期化(SCSI1 (0,0,0) (sda) の表記は?)
    • スワップ・・・実メモリーを使い切りそうになり、空き容量が不足した場合、実メモリーから一部を追い出して退避することでメモリ容量を確保。この時に退避するための領域のことをスワップ領域という
  14. HTTPプロキシ情報の入力
    • プロキシ・・・代理(参考)
  15. aptとは・・・advanced package tool
    • パッケージ管理システム(Red HotでいうところのRPM)
  16. tasksel・・・参考 注:英語 パッケージをインストールするのに使う
  17. ハードディスクへのGRUBブートローダのインストール

ファイル・ディレクトリ(フォルダ)操作

参照

ls -(a,l,t,r) ファイル

  • List 一覧表示(ファイル・フォルダ共に。指定ディレクトリの一覧も表示できる)
  • オプションは順にall(隠しファイルも)、long(長形式)、time(最終更新順にソート)、reverse(逆順)

コピー

cp -(i,r,p) コピー元 コピー先

  • Copy 別名としてもできるし、違うディレクトリにコピーもできる。もともとあるファイルにコピーすると上書きされる。
  • オプションはidentify(?処理の確認をする)、recursive(ディレクトリ丸々、中身も。再帰的の意)、p(元ファイルの情報を保持してそのままコピー)

ファイル・ディレクトリを移動する

mv -(i,f) 移動元ファイル 移動先ファイル

  • move ファイルの移動も、ディレクトリの移動も可能。ファイル名・ディレクトリ名の変更にも使える
  • オプションはi(処理の確認)、f(処理を強行)

削除

rm -(i,f,r) ファイル名

  • remove UNIXでは、一度削除したファイルは戻せない。ディレクトリを削除するときは、rmdirもあるけど、空じゃないディレクトリはrm -rを使う。
  • オプションはi(確認)、f(強行)、recursive(ディレクトリ丸々、再帰的の意)

rmdir -(p) ディレクトリ名

  • remove directory 中身が空のディレクトリを削除する
  • オプションはpath(?) 指定したディレクトリまでのものを一括削除 ex) rmdir -p a/b/c/d → a,b,c,dをすべて削除

ディレクトリ作成

mkdir -(p) ディレクトリ名

  • make directory オプションで指定ディレクトリを一括で作成 ex) mkdir -p a/b/c → a,b,cを一度に作成(オプションなしだと一個ずつ作らなきゃならない)

現在のディレクトリ

pwd

  • print working directory

自分の立ち位置の移動

cd ディレクトリ名

  • change directory 自分がいる位置を変える

ディレクトリのetc

.(ドット) , ..(ドット2つ) , ~(チルド) , /(ルート)

  • 順に、今いるディレクトリ、今より1つ上のディレクトリ、ホームディレクトリ、ルートディレクトリ
  • 絶対パスでも相対パスでも指定できるので、その時に使う

ファイルの中身を見る

more/less ファイル名

  • ページャ(ページング(画面に収まらない量でも、画面制御により途中で勝手にスクロールするのを止めてくれるもの)に使う)
  • /単語とすると出力の中から文字列を検索できたりする。qで表示終了

head/tail -(n,c) ファイル名

  • 先頭/後尾10行(デフォルト値)を参照できる
  • number(?デフォルトの10行を任意の数字に変更できる), c(バイト数)
  • 特にtailは、-fと組み合わせると、変更をリアルタイムで監視できるようになる。ログなどで便利らしい。

cat -(n) ファイル名

  • concatnate 本来はファイルとファイルを連結するコマンドらしい。ファイル名の指定なしだと標準入力(キーボードで打つもの)が標準出力(画面に出てくる)になる
    • cat > a.txt とかやるとa.txtに標準入力が出力されるから割と便利?
  • n(行数付きで出力)

検索

find パス -name ファイル名

  • ファイルがどこのディレクトリにあるか探したりするのに使う。パスで指定した配下のすべてのディレクトリを検索してくれる

コマンドのetc

which コマンド名

  • コマンドの実体はプログラム。プログラムもファイルの一種なので、パスが存在する

コマンド --help

  • コマンドに関するヘルプを表示(cf man)

man (セクション) コマンド

  • コマンドのマニュアルを表示。説明やオプション、関連項目(*セクション)等の情報を表示する
  • セクションについて
    • そのコマンドのマニュアルがどんな分類をされているかを表す。
    • 1~9までで、順にユーザコマンド、システムコール、システムライブラリ・関数、デバイス、ファイル形式、ゲーム・デモ、その他、システム管理系コマンド、カーネル等の情報

標準入出力、パイプ(参考)

#標準入出力

  • 入力には標準入力、出力には標準出力・標準エラー出力がある
  • 標準入力先は一般的にはキーボード
  • 標準出力先、標準エラー出力先は一般的には端末の画面になっている

echoコマンド

  • echo -(n) 文字列
  • 引数で与えた文字列を標準出力に出力する
  • オプション-nは改行を抑制。出力に際して改行されない
  • 変数は$をつけると中身を表示できる
  • javaでいうところのsysoutのようなイメージ

リダイレクト

  • 入出力先を別の入出力先へ変更すること
  • 出力のリダイレクト > ex) ls > ls-outputlsした結果をls-output(なければ新規作成される)へ出力(書き換え)
  • 2> で標準エラー出力を、任意の出力先へ出力
  • コマンド > 出力先 2>&1でエラーでも正常でも出力を任意の出力先へ出力

パイプ

  • コマンドとコマンドをパイプでつなげることでパイプの前のコマンドの出力を後のコマンドの入力とする
  • ex) ls -l a | lessls -l した結果の出力を less で表示(出力)する

ファイルの中身からデータを検索する

grep -(e,i.v) 検索条件 [指定ファイル]

  • globally search a regular expression and print(正規表現の検索と出力)
  • ファイルの中身からデータ(検索条件)を検索する
  • 検索条件に正規表現を使ったりする
    • ^(行頭), $(行末), .(任意の一時), *(直前の文字の0文字以上の繰り返し), [...](...の内のどれか1文字), [^...](...が含まれない), \(正規表現の記号をエスケープ)
  • オプションは、e(文字列を検索パターンとして扱う→? escape?? -で始まるパターンを保護するのに有効らしい)、i(検索パターン、指定ファイルともに大文字小文字の区別を行わない)、v(検索パターンとマッチしなかった行を選択する)
  • ex) ls -f /etc | grep -e .*.conf$ → パス/etcにあるファイルでファイル名がconfで終わるもの

ファイルのタイムスタンプの変更

touch -(t) ファイル名

  • ファイルには更新時刻情報がある。これをいじるのがtouch
  • オプションはt(任意の時刻で更新できる。形式は[[CC]YY]MMDDhhmm[.ss][]内は省略可能。)
  • ファイル名で存在しないファイルを指定すると、空のファイルを新規作成する

テキストファイルのソート

sort -(r,k 数字, n) ファイル名

  • テキストファイルの中身を、ソートして表示してくれる
  • オプションは、reverse(逆順),k 数字(数字番目の列でソート),n(数値としてソート)

テキストの重複の消去(行単位)

uniq ファイル名

  • 直後の行が同じ内容であれば省いて表示する。
  • 連続した行でないと反映されない。スペース、空行も認識する

文字の置き換え

tr 置き換え前文字 置き換え後文字

  • 指定文字を指定文字に置き換えてくれる
  • 置き換え前文字をabcに、置き換え後文字をdefとして実行するとadに、beに、cfに置き換わる。
    • *あくまで1文字ずつ、文字列の置き換えではない。aadechならdddefhになる。

ファイルの比較

diff -(c,u) ファイル1 ファイル2

  • ファイルの中身を比べてくれる。ファイル1を基準に、ファイル2がどうなっているかを見てくれている。オプションなしだと、差分だけ表示(増えた、減ったという詳しいことはわからない)
    • なので、差分を見るのに使える(オプション使用)。変更前と変更後でどうなったかが比べられる
  • オプションは、u(ファイルの詳細情報表示)、c(より詳細な情報が表示される)

ユーザ・グループの管理

ユーザ・グループ概要


  • UNIXやLinux等のサーバOSでは、複数のユーザが同時に1台のマシンを利用できるようなものになっている

  • これに対応しやすいように、ユーザという仕組みがある

  • 複数ユーザの管理を楽にするために、グループという仕組みがある

  • 管理者は利用者一人一人にユーザアカウントを作成し、ユーザは自分専用のアカウントでログインする仕組みになっている

  • ユーザアカウントには以下の種類がある

    種類 用途 ID
    一般ユーザ ユーザの個人アカウント 500-65535
    rootユーザ 管理者権限を持つユーザ 0
    システムユーザ バックグラウンドで動くデーモン(*)等のためのユーザ 1-499

    *デーモン

    • メモリ上に常駐し処理要求を待ち続け、要求があればサービスを提供するプロセスの一種
    • 要求があると、自分のコピーを作ってコピーに処理させる
    • 要求によって作るコピーの種類を変えるスーパーデーモンというのもある
  • 現在のユーザ情報はidコマンドでで参照可能

  • 他のユーザやグループ、詳しい情報は/etc/passwd/etc/groupにある。
    (ホームディレクトリは指定したものにできるので、/home/にあるとは限らない、したがってチェックするときはパスワードファイルを見る)

ユーザ・グループの作成とパスワード変更


  • useradd -(c,g,G,d,s,u id番号,e YYYY-MM-DD) ユーザ名

    • ユーザーの作成。ログインするにはパスワードの設定(passwdコマンド)が必要。

    • useraddは、主グループの指定がない場合、作成するユーザ名と同名のグループを作成する

    • オプション

      オプション 意味
      -c コメントを追加
      -g プライマリグループ指定
      -G 補助グループ指定(複数指定はカンマ区切り)
      -d ホームディレクトリ指定
      -s シェルを指定(デフォルトは/bin/bash ログインしないユーザなどはnologinを指定)
      -u id番号 ユーザID番号を指定
      -e YYYY-MM-DD ユーザアカウントが無効になる年月日を指定
  • passwdコマンド

    • 引数なしだと今のユーザのパスワード変更をする
    • 引数に任意のユーザを指定し、パスワードの設定・変更ができる(root権限)
  • groupadd -(g) グループ名

    • グループの作成
    • オプション -g ID番号で、グループID番号を指定
      (IDは指定することは少ない)
※rootユーザのパスワードを変更する場合、  
ログインできなくなる事態を避けるために、コンソール2つ開いて、1つでログインしっぱなしにしてキープしておく**  
もう片方でパスワード変更を行う  


ちなみに、useraddとadduserは、redhat系では同じ  
FedraとかDebianとかだと、adduserが対話型になっているみたい  
redhat系で、ls -l /bin/adduserとかを見ると、確かuseraddへのリンクになっている  

ユーザ・グループ情報変更


  • usermod -(c,g,G,l,u,e) ユーザー名

    • user modify
    • 登録情報の変更(/etc/passwdをいじっている)
    • オプションでaddと違うところは、-l(既存のユーザ名変更)だけ。
    • -G サブグループ名 サブグループ名.... で所属サブグループすべて(もともと所属していたサブグループ含め)列挙しないと、記述のないサブグループから外れる
    • usermod -e YYYY-MM-DDで有効期限を変更する際、''(シングルクオート2つ)を指定すると、無期限有効になる
  • groupmod -(n,g) 変更対象のグループ名

    • group modify
    • グループ情報を変更
    • オプションは
      • -n 新しいグループ名 → 名前変更
      • -g 新しいID → ID変更
  • gpasswdコマンド

    • 追加や除外したいサブグループを1つだけ指定できる
    • gpasswd -a 追加するユーザ名 グループ名
    • gpasswd -d 除外するユーザ名 グループ名
  • chageコマンド

    • ユーザのパスワードの有効期限を設定・確認するコマンド
    • ex) chage -M 30 suzuki → suzukiのパスワードの有効期限を30日に変更(=30日ごとにパスワード変更を強制する)
    • パスワードの有効期限を即座に失効させるには、オプションで-d 0とする
    • -lオプションで、アカウント・パスワードの有効期限を確認できる

削除


  • usrdel -(r) ユーザ名

    • 既存のユーザを削除
    • オプションはそのユーザのホームディレクトリ(やメールスプール)も一緒に削除
    • ユーザをオプションなしで削除(旧ユーザ)後、再度ユーザを作る(新ユーザ)とき、旧ユーザと同じユーザIDが新ユーザに割り当てられると、ファイルやディレクトリの所有権も新ユーザに移るので注意
  • groupdel グループ名

    • 既存のグループ削除
    • ユーザが所属している主グループは削除できない
    • サブグループは警告なしに削除される
      • なのでグループを削除する際には所属しているユーザがいないかチェックすること

別ユーザへの移動


  • su,su -

    • switch userの略。ユーザ名を指定するとそのユーザになれる。
    • -をつけると、ユーザ移動+移動先ユーザのホームディレクトリに移動
    • ユーザ名を指定しないと、rootへの移動
  • sudoについて

    • sudoコマンドは、一時的にroot権限でコマンドを実行すること。
    • これを使えるようにするには、設定(root権限の項を参照のこと)が必要

パスワードファイル、グループファイル


  • グループの定義は/etc/group、ユーザ情報は/etc/passwd

  • パスワードファイルを見るときなどは、パイプとgrepとかで、必要なものだけ見ること(全部見えると、ログとかに残ったりしてあんまよろしくない)

  • ユーザを新規作成すると、指定がない限り自動的にユーザ名と同じ名前のグループが作成される。

  • パスワードファイルは、1行に1ユーザ情報を:区切りで記述

    • パスワードファイルの項目

      項目 意味
      ユーザ名 ユーザ名
      パスワード ユーザのパスワード(xはシャドウパスワードが設定されている)
      ユーザID ユーザID
      所属グループID グループID
      コメント ユーザに関するコメント
      ホームディレクトリ ユーザのホームディレクトリ
      コマンドインタプリタ ログインしたときに起動するシェル
    • このうちパスワードは、シャドウファイル(/etc/shadow)に暗号化されて保存されている

      • シャドウファイルは、デフォルトでパーミッションが000(もしくは400)

      • rootユーザはパーミッションに関係なく読み書きできる(あんまり見ない)

      • シャドウファイルの項目

        項目
        ユーザ名
        暗号化パスワード
        最後にパスワード変更があった日付(19700101からの日数)
        パスワード変更が可能になるまでの日数
        パスワードを変更しなければならない日までの日数
        パスワード有効期限前の警告を表示する日数
        パスワード有効期限が切れてアカウントが使用不能になるまでの日数
        19700101からアカウントが使用不能になるまでの日数
        予約フィールド
  • グループファイルは、1行に1グループ情報を:区切りで保持

    • グループの項目

      項目
      グループ名
      グループのパスワード
      グループID
      所属ユーザのリスト

ユーザ権限とアクセス権


  • ファイルの所有者と所有グループは、そのファイルの作成者のユーザIDと所属グループID

  • これを変更するのが、chownchgrp

  • chown -(R) ユーザ名[.グループ] ファイル・ディレクトリ名

    • ユーザとグループの区切りには:を使うこともできる
    • ルート権限でないと実行できない
    • オプション -Rは、recursiveで、ディレクトリの内部も含めた変更
  • chgrp -(R) グループ ディレクトリ・ファイル

    • ルート権限でないと実行できない
    • オプション -Rは、recursiveで、ディレクトリの内部も含めた変更

アクセス権・パーミッション


  • ファイル・ディレクトリにはアクセス権がある

  • drwxrw-r--なんかがアクセス権を表している。

    • dの位置にあるのは、ファイル種別(dだとディレクトリ)
    • あとは3文字ずつ区切って、ユーザー、ユーザが所属しているグループの中でそのユーザ以外のユーザ、それ以外のアクセス権を表す
  • 数字でもアクセス権の指定が可能

  • これらのアクセス権を変えるコマンドが、chmod -(R) 指定アクセス権 ファイル・フォルダ名

    文字 数字 意味
    r 4 読み込み可能
    w 2 書き込み可能
    x 1 実行・移動可能
    - 0 全て不可
  • ディレクトリのパーミッションにxがないと、そのディレクトリをカレントディレクトリにできない

  • 数字の他にも、直接 u+r(ユーザの権限にrを追加),uo=rw(ユーザとグループ以外のその他をrwに指定),g-x(グループの権限から実行を抜く)などできる(a=rwxとすると、rwxrwxrwxとなる。aは全てということ。)

マスク


  • デフォルトのモードと、デフォルトのマスクがある。

  • デフォルトのモードは、ファイル・フォルダを作る時のアクセス指定。

  • デフォルトのマスクは、デフォルトのモードから何を引くかを指定する

  • なので、実際にファイル・フォルダを作ると、指定しなければデフォルトモードからデフォルトマスクを引いたアクセス権になっている。

    • ex)デフォルトが rwxrw-rw-で、デフォルトマスクが0022の場合→ 新規作成すると、rwxr--r--になっている。
    • このデフォルトモードとデフォルトマスクは、ファイルの場合とディレクトリの場合で異なる。
  • このマスクを変えるのが、umask

  • umask -(S)

    • 引数なしだと、現在のマスクを表示する
    • 引数に指定のマスク値をつけると、マスクが変更できる
      • ex)umask 002 → マスク値を002に指定(デフォルトモードから、その他ユーザだけwを引く)
    • オプション-Sは、マスク値の指定を数字ではなくアルファベットでできる
      • ex) umask -S u=rwx,g=,o=rwxumask 070

root権限


rootは何でもできてしまうので、適切に管理する必要がある
root権限を得る方法は次の三つ

  1. rootへ直接ログイン
  2. 一般ユーザでログイン後、su -でrootへ移動
  3. sudoコマンド

rootへ直接ログインすると、誰がログインしたのかログに残らない問題がある。 一般的には、rootへ直接ログインすることは許さずに、2.か3.の方法を取らせる設定にすることが多い
また、rootとして実行したコマンドのログは記録されない問題もあるので、suコマンドも制限するのが良い
sudoは、実行履歴がログに残る+実行時の認証がユーザパスワードなのでrootのパスワード管理が最小限で済むメリットがある
ちなみに、最近ログインしたユーザを調べるコマンドがある → lastコマンド
(ちなみにちなみに、現在ログインしているユーザを調べるコマンドは、wコマンド)
どのユーザがrootユーザに切り替えたかは、/var/log/secureにあるから、tailで見るとよい。

  • rootユーザへの直接ログインの禁止設定

    • SSH編の設定(/etc/ssh/sshd_config)を参照のこと(PermitRootLoginをnoにする)
  • suコマンドを実行できるユーザ設定

    • PAM(Plugable Authentication Modules)の設定を変更する
      (wheel:ホイール グループに所属しているユーザのみ、suコマンドでrootに切り替え可能にする)
    # vi /etc/pam.d/su

    #%PAM-1.0
    auth sufficient pam_rootok.so
    ...
    ...
    ...
    auth sufficient pam\_wheel.so trust use_uid   ←この行のコメントアウトを外す(wheelグループのユーザはパスワードなしでsuできる)
    ...
    ...
    auth required pam\_wheel.so use_uid   ←この行のコメントアウトを外す(wheelグループのユーザのみsuコマンドを実行できる)
    ...
    ...
    ...

  • sudoコマンドを実行できるユーザ(グループ)設定
    指定ユーザがsudoを使えるようにする設定

    $ su -
    # usermod -G wheel ユーザ名
    # vigr   ←  これは vi /etc/group  と同じ

    として、

    wheel:x:10:root,ユーザ名

    になっていることを確認後、

    # visudo

    から、

    # %wheel ALL(ALL) ALL

    の部分の、`#`を削除する(コメントアウトを外す)。  
    ちなみに、sudoするときにいちいちパスワードを入力するのが嫌なら

    # %wheel ALL=(ALL) NOPASSWD: ALL

    の部分のコメントアウトを外せばできる
  • sudoで実行できるコマンドの制限

    • sudoでは、ある特定のグループに対して、一部のコマンドのみを実行できるように制限できる → visudoコマンド(/etc/sudoers.tmpの編集)

    ex) webadmグループに、sudo service httpd start stop restart コマンドを実行する許可を与える↓


    # visudo

    以下の一行を追加

    %webadm ALL=NOPASSWD: /sbin/service httpd start, /sbin/service httpd stop, /sbin/service httpd restart

/sbin/service httpdのみだと、start,stop,restartだけでなく、service httpd コマンド全部を使えるようにする

記述ルールは、 ユーザ名 ホスト名=(権限) コマンド
(ユーザ名の前に%をつけるとグループを指定できる)
(コマンドに、NOPASSWD:とすると、パスワードいらないコマンドを指定できる)
(権限をALLにすると、全てのユーザ権限(=root権限)を与えることになる)
(でも、実際のファイルのコメント部を見てみると、書式は USER MACHINE=COMMANDとなっていたりする)
NOPASSWDは、スクリプトの自動実行とかで、パスワード認証すると動かなくなるから、パスワードなしに設定したりする
基本sudoはパスワード入力させるべし

ちなみに、上の工程でwebadmグループにsudo実行権を与え、service httpd startとしたあとに、本当にスタートしているのか確認したい時には psコマンド(現在実行されているアクティブなプロセスのIDと状態、コマンド、経過時間などを表示)を使う
ちなみにちなみに、psコマンドはオプションauxfと一緒によく使う。ps aufxで、コマンドを階層構造で表示してくれたり、userの名前を表示してくれたりする

viエディタ基本操作

基本コマンド

  • 起動 → vi ファイル名(新規作成もできる)
  • コマンドモード/編集(インサート) Esc/a,i,I,A等々
  • 保存 → :w(write)
  • 保存せず終了 → :q(quit)
  • 保存して終了 → :wq
  • 保存せず強制終了 → :q!
  • n行目へ移動 → :n
  • 上下左右移動 → hjkl(またはカーソルキー)
  • 1文字削除 → x/X(小文字は次の文字、大文字は前)
  • n行削除 → ndd
  • n行コピー → nyy
  • ペースト → p/P(小文字は次の文字または行にペースト、大文字は前)
  • 削除/ペーストの取り消し → u
  • 先頭へ移動/最後尾へ移動 → gg/G
  • 検索 → /検索文字列
  • 下/上方向へ再検索 → n/N
  • 置き換え → :対象の行s/検索文字列/置き換え文字/オプション
    • ex)n行目の最初のoldをnewに置換して終了 → :ns/old/new
    • ex)n行目の全てのoldをnewに置換して終了 → :ns/old/new/g
    • ex)ファイル全体の検索語句を置換 → :%s/old/new/g
    • ex)ファイル全体の語句置換(確認しながら) → :%s/old/new/gc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment