■23/2/11 1:46AM
HSTS/CORS/CSPOAuth/OpenID/SAML/XSS/CSRF/JSOP/SSO/SSL/SVG/JWT/WebAssembly
2024-10-6
クレカ情報の流出があったタリーズオンラインストアのWebアーカイブから原因を特定した猛者が現れる→集まった有識者たちにより巧妙な手口が明らかに - Togetter [トゥギャッター]
レスポンスヘッダーに Content-Security-Policy が適切に設定されていれば防げた可能性は高い。具体的には▼ connect-src ディレクティブの設定スクリプトからの外部リソースへの通信先を制限して、マルウェアが悪意あるドメインにデータを送信するを防ぐ。例. Content-Security-Policy: connect-src 'self' https://api.trustedservice.com;▼ eval() の禁止Content-Security-Policy はデフォルトで eval() の使用を禁止しているが、 'unsafe-eval' を指定することで許可できる。
slick.jsのライブラリに仕込まれていたので、管理者がやったんじゃないの?slickスライダー実装まとめ16選【サンプル付き】 - じゅんぺいブログ (junpei-sugiyama.com)
2024-7-5
Webサービス公開前のチェックリスト (zenn.dev)
2023-02-11
フロントエンド開発のためのセキュリティ入門 - Speaker Deck
HTTPとHTTPSが混ざっているwebサイトはHSTS(http strict transport securityヘッダ)でHTTPS強制できる JSのfetch,xhr/iframe/canvas/WebStorage,IndexedDBでクロスオリジンは危険 Access-Control-Allow-OriginレスポンスヘッダでCORS(cross origin resource sharing)許可を判定できる CSP(Content-Security-Policy)レスポンスヘッダあるはmetaタグで許可するJSを判定できる
SVG
SVG Repo - Free SVG Vectors and Icons
Vector Icons and Stickers - PNG, SVG, EPS, PSD and CSS (flaticon.com)
SVGはテキストファイルなので開いてタグとして使える
ChatGPTにSVGでお絵描きさせる|temoki / Tomoki Kobayashi (note.com)
タグで図が書ける
SVGファイルについて (zenn.dev)
sizeを決めてviewBoxの座標を設定するのがやりやすい
JWT (JSON WEB TOKEN?)
JWTセキュリティ入門 - Speaker Deck
WebAssemblyとは?〜実際にC言語をブラウザで動かす〜【2019年6月版】 #JavaScript - Qiita
コンパイルしてバイナリをWebで実行する、速いJSみたいな、ゲームやエミュやCアプリ的な奴
=========================
2022-04-06
SAML SSOのログイン状態を保持する認証プロバイダー(IdP)を使い各アプリ(ServiceProvider)でSSOを実現する SSOの仕組みにはエージェント方式、リバースプロキシ方式、代理認証方式など ユーザはWebサービスにアクセス WebサービスからSSO認証プロバイダーサーバにSAML認証要求をPostする SSO認証プロバイダーサーバでSAML認証を解析、ユーザに認証を転送 ユーザはそれでWebサービスにログインする
SAMLはログイン時にユーザー情報をチェック、OAuthはユーザーの情報を登録OAuthはアプリケーションを連動させるAPIで有効なアクセストークンかを見る アクセストークンには「いつ」「どこで」「なんのために」作られたのか分からないOpenIDはIDトークンを使い「いつ」「どこで」「なんのために」作られたのか分かる
OAuth 2.0、OpenID Connect、SAMLを比較OAuth 2.0:新しいアプリケーションに登録して、新しい連絡先をFacebookや携帯電話の連絡先から自動的に取得することに同意した場合は、おそらくOAuth 2.0が使われています。この標準は、安全な委任アクセスを提供します。つまり、ユーザーが認証情報を共有しなくても、アプリケーションがユーザーに代わってアクションを起こしたり、サーバーからリソースにアクセスしたりすることができます。これは、アイデンティティプロバイダー(IdP)がユーザーの承認を得て、サードパーティのアプリケーションにトークンを発行できるようにすることで実現されます。
OpenID Connect:Googleを使ってYouTubeなどのアプリケーションにサインインしたり、Facebookを使ってオンラインショッピングのカートにログインしたりする場合に使用されるのが、この認証オプションです。OpenID Connectは、組織がユーザーを認証するために使用するオープンスタンダードです。IdPはこれを利用して、ユーザーがIdPにサインインした後、他のWebサイトやアプリにアクセスする際に、ログインしたりサインイン情報を共有したりする必要がないようにします。
SAML:SAML認証は、多くの場合に仕事環境で使用されます。たとえば、企業のイントラネットやIdPにログインした後、Salesforce、Box、Workdayなどの多数の追加サービスに、認証情報を再入力せずにアクセスできるようになります。SAMLは、IdPとサービスプロバイダーの間で認証・認可データを交換するためのXMLベースの標準で、ユーザーのアイデンティティとアクセス許可を検証し、サービスへのアクセスの許可/拒否を決定します。OAuth、OpenID Connect、SAMLの違いとは? | Okta
Oath: idpがトークンを発行、Webサイト間でユーザを認識し3rdからでも個人情報を使えるようになるOpenID(OIDC): idpとJWT(トークン)で認証するOauth系のSSO、Oauthの拡張でログインが3rdからもできるようになるSAML: idpで各アプリやAD間をXMLメッセージにより認証管理しSSOを実現 OpenIDとSAMLが同じような機能 SAMLはユーザ固有の傾向で大企業SSOが多い、OpenIDはアプリ固有の傾向でWebサイトやモバイルアプリが多い SAMLよりOIDCの方が新しくSPAやスマホと親和性が高い SaaSとしてOpenIDはOktaのidp、SAMLはPingFederateのidpがメジャー
=========================
2016-01-03
■XSS対策、CSRF対策、脆弱性チェック
情報処理推進機構にチェックリスト有
https://www.ipa.go.jp/security/vuln/websecurity.htmlXSS対策
フォーム送信後の確認画面ではHTMLエスケープ等でサニタイズされた内容の結果を表示
DBへのクエリについてはプレースホルダやエスケープ等でSQLインジェクションを防ぐ
target="_blank"はXSSになるので危ない、rel="noopener noreferrer"を付ける
https://b.hatena.ne.jp/entry/s/webtan.impress.co.jp/e/2020/03/13/35510
https://laboradian.com/test-window-opener/
CSRF対策
前ページでhidden値を入れる
他
クッキーに具体的なものは入れない、CookieにHttpOnly属性、HTTPS通信ではsecure属性
エラーメッセージを表示しない
不要なファイルは削除
XMLの外部実態参照は禁止、サーバ上でコードが実行される
→libxml_disable_entity_loader(true)で止める、xmlをアップロードさせない/使用しない、JSON使う
PDFからHTTPリクエストが発行される
→PDFをアップロードさせない
------
//SQLインジェクション対策
$sql = "UPDATE users SET name='.mysql_real_escape_string($name).'WHERE id='.mysql_real_escape_string ($id).'";
\ " ' を最低限、\エスケープNUL (ASCII 0) /n /r / ' " およびCTRL+Zをエスケープしたい
//クロスサイトスクリプティング対策
表示時には<>&"をメタ文字へ変換
echo htmlspecialchars($_GET['username'], ENT_QUOTES);
$ent = htmlentities($ent, ENT_QUOTES, "UTF-8"); //100個の文字を変換
//クロスサイトスクリプティング対策
別サイトからのポストを弾く
refferを送信しないリクエストもある(別サイトのリファラを弾き、nullもしくは適切ページからを許可する)
セッションIDで判断する
//DOS対策
2重ポスト
IPと日付で2重ポストを防ぐ(同IPのポストがx秒以内を弾く)
■サニタイズの方法DOCには生のテキスト、DBとHTMLにはエスケープ済みのものを入れる• 入力があればhtmlエスケープしDBに入れる• html表示はそのままhtmlエスケープ状態で出力• Docへはhtmlエスケープを解除し表示• htmlフォーム内表示はhtmlエスケープを解除し表示htmlエスケープhttps://weblan3.com/html/special-characterバッククォート以外は分かり易いで文字表記でエスケープする、改行はエスケープしない< < < 不等号(より小さい)> > > 不等号(より大きい)& & & アンパサンド" " " 二重引用符' ' ' シングルクォート,アポストロフィ; ;: ; セミコロン\ \ &bsol バックスラッシュ` ` バッククォート
========
■JSONP
scriptタグを使用してクロスドメインなデータを取得する仕組みのことである。
HTMLのscriptタグ、JavaScript(関数)、JSONを組み合わせて実現される
GoogleAnalyticsのクッキーは1stパーティでサイト側がオーナでありGoogleがオーナーではない
サイト側のJSでクッキーが作成されるようなっている
クッキーが送信される相手はどこか?が重要でGoogleでなくサイト側に送信される
アクセス履歴は別途データをGoogleに送信しており、クッキーはセッション管理に使用される
■SSO
色々な方法がある、SAMLや、サイトにエージェントを組み込み+SSO認証サーバ等
ロジックを確認しないと詳しくは分からない
=========
■SSL【図解】よく分かるデジタル証明書(SSL証明書)の仕組み 〜https通信フロー,発行手順,CSR,自己署名(オレオレ)証明書,ルート証明書,中間証明書の必要性や扱いについて〜 | SEの道標 (nesuke.com)デジタル証明書の仕組み (infraexpert.com)
認証局とは | GMOグローバルサインカレッジ (globalsign.com)
サーバでRSA秘密鍵とCSRを生成し公開鍵を認証局(CA)登録CAはサーバに証明書(署名)を発行====クライアントが接続要求サーバが証明書(署名とRSA公開鍵を含む)を送るクライアントが証明書を検証(
どっち?
1)署名をルート証明書のチェーン(RSA公開鍵)で複合化しドメインを確認
該当のルート証明書(RSA公開鍵)がブラウザにないと該当CAに要求?
CRLやOCSPで失効について問合せができるようだがRSA公開鍵の要求は出来なさそう (ルート証明書はブラウザにある結局オレオレ証明書に違いない:厳密な審査の上で組込まれている)
2)クライアントが公開鍵をサーバに送りRSA秘密鍵で暗号化し送り返すとクライアントが複合化してRSA秘密鍵が正しい事を確認
)クライアントが共通鍵(セッションキー)を生成し公開鍵で暗号化し送るサーバが秘密鍵で共通鍵を複合
以降共通鍵暗号で通信 ※ホンマか??
====
ホスト(ドメイン)を持って接続要求をし、暗号化通信後にパスやクエリパラメータを送るので、詳細は暗号化され守られている
Comment (0)
■22/7/24 3:46AM
Docker
どこでビルドしてもデプロイしてもImmutableインフラ(不変の)なので変更したい場合はDockerfileの方を変えるコンテナはOS上のDockerEngine上に配置する(コンテナは複数配置できる、Dockerfileさえあれば再現可)
DockerfileでなくてもDockerイメージでもいいが、Dockerは可搬性をもたらすのである なおVMはOSをもシミュレート
1部: はじめに|実践 Docker - ソフトウェアエンジニアの「Docker よくわからない」を終わりにする本 (zenn.dev)
2部: Dockerfile の基礎|実践 Docker - ソフトウェアエンジニアの「Docker よくわからない」を終わりにする本 (zenn.dev)
3部: Docker Compose|実践 Docker - ソフトウェアエンジニアの「Docker よくわからない」を終わりにする本 (zenn.dev)
Dockerのチュートリアル - とほほのWWW入門 (tohoho-web.com)
Dockerコマンド - とほほのWWW入門 (tohoho-web.com)
コンテナ設計方針をまとめてみた - Qiita
社内のDockerfileのベストプラクティスを公開します│FORCIA CUBE│フォルシア株式会社
Docker完全に理解した | IIJ Engineers Blog
ボリュームマウント=DockerEngine上にボリュームを作りコンテナにマウント(操作が面倒で仮使用や永続ファイル用)
バインドマウント=LinuxOS上のファイルやディレクトリをマウント(ファイル編集が多い場合)
dockerfile(イメージを作る)、docker compose(yamlで一括でコンテナ/nw/volを作る)
dockerfile: dockerイメージを作る→runでコンテナ(アプリ)になる
docker composer: コンテナを作る、NWやボリュームも作る→1台にまとめる
マニフェスト: k8sを作る→複数台になる
Dockerfileによるビルド - とほほのWWW入門 (tohoho-web.com)
Docker Compose - とほほのWWW入門 (tohoho-web.com)
■Dockerインスコ
/// BANGBOO BLOG /// - GCP script ここの下の方に記載あり
docker --versionwho 誰がログインしているかsudo gpasswd -a [ユーザ名] docker dockerグループへ追加?
■Docker Engine起動
sudo systemctl start docker これ要る?
■オプション
-i キーボードを繋ぐ
-t 特殊キーを使用可能にする
-e 環境変数名=値(複数記載可能)
--net=ネットワーク名
-v ${pwd}:/app はOSローカル環境とコンテナ内のディレクトリを同期-p, -public 80:8000 ポートの紐づけ-d, -detach バックグラウンド実行(デタッチ)-rm コンテナ実行後にコンテナを自動削除する(イメージは残る)
-dit とまとめられる
■操作コマンド
docker images リストdocker tag [イメージID] img_unco:latest 名前がつかない場合docker rmi [イメージID] 削除docker ps -a コンテナ一覧
docker container ls コンテナのステータス確認docker rm [コンテナID] 削除
■起動
httpd3つを1つのイメージで建てられる(以前はdocker runだった)docker container run --name コンテナ名001 -d -p 8081:80 イメージ名httpd
docker container run --name コンテナ名002 -d -p 8082:80 イメージ名httpddocker container run --name コンテナ名003 -d -p 8083:80 イメージ名httpd
■仮想NW
コンテナ間をつなぐ(ネットワークタグ名で紐づける感じ)
1)ブリッジネットワーク(デフォルト 同一の Docker Engine 上のコンテナ が互いに通信をする場合に利用する デフォルト: 全てのコンテナ間をリンクする操作が必要 コンテナ間の通信は IP アドレスで ●(コレ使う)ブリッジネットワークを定義し作成: 相互通信は同じネットワークを割り当てるだけ コンテナ間でDNS解決される ネットワークでコンテナは隔離され隔離度が上がる2)オーバーレイネットワーク 異なる Docker Engine 上のコンテナ が互いに通信をする場合に利用
docker network create ネットワーク名net001
↓
docker container run --name mysql001 -dit --net=net001 ~~~ イメージ名mysql
docker container run --name wordpress001 -dit --net=net001 -p 8085:80 -e WORDPRESS_DB_HOST=mysql001 ~~~ イメージ名wordpress
Docker仮想NW一覧docker network ls仮想NWの確認docker network inspect net001
コンテナ間はservice_nemeで通信し、コンテナ名ではないhttp://unco-sv:8000 で通信できる各コンテナで同番ポートを使っていても問題はないdocker info プロキシ等が確認できる.docker/config.json でプロキシやプロキシを使わないnoProxyを設定
■停止
docker stop コンテナ名
docker rm コンテナ名
docker network rm ネットワーク名
■コピー OS⇔コンテナ
docker cp コピー元 コピー先
例)docker cp /home/a.txt コンテナ名:/app/
■ボリュームのマウント
データをコンテナ内に置くとコンテナが消えるとデータも消えてしまう
永続化1)ボリュームマウント:DockerEngine上
永続化2)バインドマウント:OS上
永続化3)一時メモリマウント:(tmpfs)
■バインドマウント
docker volume create ボリューム名vol001
docker run --name コンテナ名httpd001 -d -p 8080:80 -v /home/a:/usr/local/apache/htdocs イメージ名httpd (OS側パス:コンテナ側パス、コンテナ側のパスをどこにすべきかはDockerイメージのドキュメントを見よ)
docker volume inspect vol001 (確認できる)
docker volume rm vol001
ホストディレクトリ共有ともいう
コンテナはrootで動作しているものが多くホスト共有しているDir/Fileにコンテナから変更するとrootで変更しPermissionが変わるそのためホストディレクトリ共有は本番に向かない
■ボリュームマウント
ちょい面倒らしいのでバインドマウントでいいのでは?
docker volume create ボリューム名vol001
docker run --name コンテナ名httpd001 -d -p 8080:80 -v ボリューム名vol001:/usr/local/apache/htdocs イメージ名httpd (OS側パス:コンテナ側パス)docker volume inspect vol001 (確認できる)
docker volume rm vol001
Dockerボリューム共有ともいう
コンテナが削除されても明示的に消さない限り保持される永続化したいパスを指定してマウントできる(通常コンテナ内で作成されたデータは永続化しない)
■揮発的データを退避docker cp コンテナ名:ファイルパス ホスト側退避パス docker cp test-db-a:/opt/test.txt /tmp/config消えるファイルをホスト側に退避したいときのコマンド
■ボリュームマウントの確認やOS側にバックアップ
アプリコンテナとは別のshellコンテナを用意してlsしたりtar.gz等する
Apacheコンテナ <-> vol001 <- Linuxコンテナ -> vol002バックアップ
マウントを2つ(DockerEngine上のマウント、OS上のマウント)
tar.gzコピーでDockerEngine上の指定フォルダにコピーするが其れはOS側にもマウントされている、最後のドットも要る
イメージは軽量Linuxのbusyboxを使用
docker run --rm -v vol001:/usr/local/apache/htdocs -v /home/b:/tmp busybox tar CXvf /tmp/bjk.tar.gz -C /usr/local/apache/htdocs .
■ログdocker logs コンテナ名docker logs -f コンテナ名 追従確認docker exec -t コンテナ名 /bin/bash ログファイル等はこれで入り確認
■Appコンテナ(PHP)
docker container run \ --name app \ コンテナにappと名付る --rm \ コンテナ停止時に自動削除 --detach \ バックグラウド実行 --interactive \ 対話可能なセッションに --tty \ コンテナとのTTY接続しコマンド出力可 --mount type=bind,src=$(pwd)/src,dst=/src \ osにバインドマウント --publish 18000:8000 \ ポートマッピング
--network docker-sample-network \ 仮想NWに割り当て docker-php:app \ Dockerイメージの名前とタグ php -S 0.0.0.0:8000 -t /src コンテナ内で実行するコマンド
※永続化バインドマウントos上ホストマシンのディレクトリをコンテナ内のディレクトリにバインドマウント。ホストマシンのカレントディレクトリ($(pwd))の"src"ディレクトリが、コンテナ内の"/src"ディレクトリにマウントされます
※ポートマッピング-p, --publishがコンテナのポートをホストマシンに公開するオプションホストマシンの18000ポートを通じてコンテナの8000ポートにアクセスさせるブラウザからhttp://localhost:18000 でphpにアクセス
※起動コマンドPHPのビルトインウェブサーバを起動し、IPアドレス "0.0.0.0" およびポート "8000" でリクエストを受け付け、コンテンツを"/src"ディレクトリから提供します
■コンテナの詳細情報の確認
docker container inspect app
■DBコンテナ(MySQL)
docker container run \ --name db \ --rm \ --detach \ --platform linux/amd64 \ --env MYSQL_ROOT_PASSWORD=rootpassword \ --env MYSQL_USER=hoge \ --env MYSQL_PASSWORD=password \ --env MYSQL_DATABASE=event \ --mount type=volume,src=docker-db-volume,dst=/var/lib/mysql \ --mount type=bind,src=$(pwd)/docker/db/init.sql,dst=/docker-entrypoint-initdb.d/init.sql \ --network docker-sample-network \ --network-alias db \ docker-db:db
※仮想NWでのエイリアス名dbと名付ける
■コンテナの疎通の確認$ docker container exec --interactive --tty app ping db -c 3appコンテナがdbに疎通できるかping
■アプリ
/// BANGBOO BLOG /// - GCP script 下の方に記載あり
■Dockerfile
ビルドしてイメージを作成
FROM イメージ名
COPY コピー元パス コピー先パス
RUN Linuxのコマンド
ENTRYPOINT イメージを実行するときのコマンド
CMD コンテナ起動時に実行する規定のコマンドを指定
例えばこのコマンドを実行するCMDは $ go run /echo/main.go ↓空白で分割し配列化しCMD化される CMD["go", "run", "/echo/main.go"]
ただCMDは下記のように実行中に上書き指定ができ echo yayの実行となる
docker container run $(docker image build -q .) echo yayONBUILD ビルドが完了したときに任意の命令を実行する
EXPOSE 通信を想定するポートをイメージの利用者に伝える
VOLUME 永続データが保存される場所をイメージ利用者に伝える
ENV 環境変数を定義するWORKDIR RUN/CMD/ENTRYPOINT/ADD/COPYの際の作業ディレクトリSHELL ビルド時のシェルを指定
LABEL 名前やバージョンや制作者情報等を設定
USER RUN/CMD/ENTRYPOINT実行するユーザやグループを設定ARG docker buildする際に指定できる引数を宣言
STOPSIGNAL docker stopの際にコンテナで実行しているプログラムに対して送信するシグナルを変更する
HEALTHCHECK コンテナの死活確認をするヘルスチェックをカスタマイズする
社内のDockerfileのベストプラクティスを公開します│FORCIA CUBE│フォルシア株式会社
RUN adduser -D myuser && chown -R myuser /myapp
(-Dはデフォルト設定で追加している、-Rは指定dir以下を再帰的に所有権変更)USER myuser
(以降のRUNやENTRYPOINT等のINSTRUCTIONを実行するユーザを指定)Dockerセキュリティベストプラクティス トップ20:究極ガイド
Dockerfileの作り方を考え直したらすごく効率が上がった。 (zenn.dev)
■ビルドでイメージを作成
Dockerfileや材料ファイルのあるフォルダパスを最後に指定、-tはタグでイメージ名
docker build -t img_httpd001 ./
ビルド後にdocker runが必要docker container run -d --name cnt_httpd001 -v ${pwd}:/app img_httpd001:latest↓これが便利docker container run -rm --name cnt_httpd001 -v ${pwd}:/app img_httpd001:latest
■commitでコンテナからイメージを作成コンテナにexecで幾つかインスコする操作をしてからイメージにする等ができる
docker commit httpd001 img_httpd001
■コンテナ/イメージはDockerEngine上から移動できない
saveするとファイル化され、できるようになる
docker save -o save_img_httpd001.tar img_httpd001
ファイルからイメージとして取り込みたいときはdocker load
ファイル化せずにパブリックならDocker hubへ登録してもよい、プライベートレジストリを作ってもよい
その中にそれぞれリポジトリを持つ > docker push レジストリ/リポジトリ名:バージョン
■コンテナに命令する
2つの方法がある
1)docker exec → docker container execに変わった
起動中のコンテナ内でコマンドを実行するdocker container exec [option] <container> commandファイルを見るdocker container exec ubuntu1 cat ~/hello.txtコンテナに接続してbashを使うdocker container exec --interactive --tty ubuntu1 bash
2)docker run に引数を付ける→ソフトウェア(apache)が動いていない状態になり改めてdocker startが必要
docker exec -it コンテナ名httpd001 /bin/bash
apt install mysql-server など対話でコンテナにインスコできる
exit 抜ける
■Docker composedocker runコマンドの集合体、コンテナ等作って消すだけ(k8sはコンテナ等を管理する)
以前はdocker-composeコマンドで別ツールだったが今は統合済み
フォルダに1つだけdocker-compose.yml
基本はdocker runを実行せずにdocker composeしたい
手順は、1)Docker run方法で一応の検討>2)docker-compose.ymlの記述>3)docker composeコマンドの実行
docker run~~に対するdocker-compose.ymlとdocker composeコマンド の対比
1)docker run --name cnt_wordpress001 -dit --net=net001 -v wordpress001vol2:/var/www/html -p 8080:80 -e WORDPRESS_DB_HOST=mysql001 -e WORDPRESS_DB_NAME=wpdb001 -e WORDPRESS_DB_USER=wpu001 -e WORDPRESS_DB_PASSWORD=my-secret-pw wordpress
↓2) docker-compose.ymlの記述
version: "3"services: cnt_wordpress001: depends_on: - cnt_mysql001 image: wordpress networks: - net001 volumes: - wordpress001vol2:/var/www/html ports: - 8080:80 restart: always environment: WORDPRESS_DB_HOST=mysql001 WORDPRESS_DB_NAME=wpdb001 WORDPRESS_DB_USER=wpu001 WORDPRESS_DB_PASSWORD=my-secret-pw
cnt_mysql001: image: mysql:5.7 networks: - net001 volumes: - mysql001vol1:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD=my-root-pw MYSQL_DATABASE=wpdb001 MYSQL_USER=wpu001 MYSQL_PASSWORD=my-secret-pwnetworks: net001volumes: mysql001vol1: wordpress001vol2:
/// restartの設定値(コンテナが停止した時にどうするか?)
no =何もしない
always =必ず再起動する
on-failure =プロセスが0以外のステータスで終了したときは再起動する
unless-stopped =停止していたときは再起動しないがそれ以外は再起動する
Bashで終了ステータスよる条件分岐 | Codebase Blog
※bashは前に実行されたコマンドの終了ステータスは「$?」で取得できるが慣習的にコマンドが正常終了した場合は0を返す
/// その他の定義項目command =起動時の規定コマンドを上書きするentrypoint =起動時のENTRYPOINTを上書きするenv_file =環境設定情報のファイルを読み込む
他 container_name / dns / eternal_links / extra_hosts / logging / network_mode etc.
3)docker compose コマンド
up=イメージDL、コンテナ/nw/volの作成・起動
down=コンテナとnwの停止と削除、volとイメージは残る
stop=削除せず停止のみ
docker compose -f /home/a/docker-compose.yml up -d
docker compose up -d --scale unco001=3 (コンテナ名はput-folder-name_unco001_1, put-folder-name_unco001_2, put-folder-name_unco001_3になる)
-f ファイルの場所(省略でカレントパス)
-d バックグラウンド実行
--build コンテナ開始前にビルド
--no-build イメージが見つからなくてもビルドしない
-t コンテナ停止のタイムアウト(デフォ10S)
--force-recreate 設定やイメージに変更が無くてもコンテナを再生成 --no-create コンテナが存在していれば再生成しない
--abort-on-container-exit コンテナが一つでも停止したら全てのコンテナを停止 --remove-orphans 定義ファイルで定義されていないコンテナを削除 --scale 同じコンテナを複数作る
docker compose -f /home/a/docker-compose.yml down --rmi {all | local} 破棄後にイメージも削除、localの時はimageにカスタムタグが無いイメージのみを削除
-v volumesに記載されているボリュームを削除、但しexternalの指定を除く
--remove-orphans 定義ファイルで定義されていないコンテナを削除
docker compose -f /home/a/docker-compose.yml stop コンテナを停止
■Docker composeはコンテナ名を勝手につける
docker-compose.yml内は下記の通り、DockerEngine上のコンテナ名は変わるがdocker-compose.yml内のコンテナ名は変わず指定できるservices:
unco001~
unco002 depends_on:
- unco001
environment:
WORDPRESS_DB_HOST: unco001
↓
DockerEngine上のコンテナ名は put-folder-name_unco001_1 となる
DockerEngine上で操作したいときは docker ps -a 等で実際の名前を確認して操作する
■コンテナ デバッグ
3部: デバッグノウハウ ( 番外編 )|実践 Docker - ソフトウェアエンジニアの「Docker よくわからない」を終わりにする本 (zenn.dev)
====================
基本はLinuxの機能を使っているnamespaceで分離しファイル構造、ユーザーID、グループID、コマンド、ライブラリなど諸々をラップしコンテナ化し(単一の)プロセスとして動く↓
Dockerがやっている仕事は少ない
区切ってコンテナ
それら仮想ネットワークで繋ぐ
ボリュームの永続化
Dockerfileでイメージからイメージを作成Docker composeでdocker runを記述docker execでコンテナを操作etc.
Comment (0)
■22/5/18 3:20AM
LPIC
Level1 Ver4.0
■システムアーキテクチャ周辺機器のon/offや起動ドライブ検索順序はBIOS/UEFI/proc以下のファイルによりカーネルが認識しているデバイスを確認できる/dev以下にはデバイスファイルがあるUSBはホットプラグデバイスlsusbでUSBデバイスの情報、lspciでpciデバイスの情報を確認できるmodprobeコマンドでデバイスドライバをロード起動時にカーネルが出すメッセージはdmesgで表示SysVinitのシステムでは/etc/inittabでデフォルトのランレベル設定0:停止、1:シングルユーザモード、5:マルチユーザモードGUI、6:再起動ランレベル移行はinitやtelinitsystemdのシステムはsystemctlでサービス管理shutdownでシステム停止や再起動
■インスコとパッケージ管理インスコにはルートパーティション/とスワップ領域が必要中大規模では/varや/homeと/は別パーティションが良い/varはログやメールデータ/homeは各ユーザのホームディレクトリで肥大化しやすいスワップ領域は物理メモリと同程度から2倍を確保GRUBのインスコにはgrub-installGRUB Legacyの設定ファイルは/boot/grub/menu.lstGRUB 2の設定は/etc/default/grub、grub-mkconfigを実行すると設定ファイル/boot/grub/grub.cfgができる共有ライブラリはld.soによってリンクされる実行ファイルが必要とするライブラリはlddで確認ld.soが参照する/etc/ld.so.cacheは/etc.ld.so.confを元にldconfigで作成Debianパッケージ管理はdpkgやAPTツールで、apt-get、apt-cache、aptitudeがあるAPT設定ファイルは/etc/apt/sources.listRPMパッケージ管理はrpmやYUMrpmでパッケージをインスコするには-i、アップグレードには-Uもしくは-F、アンインスコには-eオプションrmp -qはパッケージ情報の参照YUMレポジトリ設定は/etc/yum.repos.dディレクトリ以下のファイルで
■GNU変数名=値 でシェル変数を設定echo $変数名 で変数の中身を確認できるunsetで変数を削除exportでシェル変数を環境変数に環境変数を一覧 env や printenv環境変数とシェル変数を一覧 set環境変数PATHでコマンドの検索パスを定義複数コマンドを連続実行は;で区切る直前のコマンドが成功したときのみ次コマンド実行 &&失敗した時のみ実行は ||'や"の囲みは文字列として、`の囲みはコマンドと解釈"や`の囲みの中は変数展開されるが、'ではされないhistoryでコマンド履歴表示manでマニュアル参照、1:ユーザコマンド、5:ファイルfmt、8:システム管理cmd属性を保持したままコピーは cp -p移動先で上書きしたい場合は cp -f、あるいは mv -fディレクトリ作成で必要な親ディレクトリを作る場合は mkdir -pサブディレクトリを含めて削除 rm -rfile でファイルの種別を確認できるシェルでワイルドカードが使える. 任意1文字* 直前の文字の0回以上繰り返し[] いずれか1文字[a-c] aからcの範囲[^ab] aとb以外^ 行頭$ 行末\ エスケープ+ 直前の文字の1回以上の繰り返し? 直前の文字の0回もしくは1回の繰り返し| 左右いずれかにマッチコマンドの出力を別コマンドの入力化やファイル格納するにはパイプやリダイレクトtee 標準入力をファイルに格納し同時に標準出力に出すファイルの表示・連結は catバイナリファイルを8進数法事するには odテキストファイルの先頭表示 head、末尾表示 tail、-nで行数tail -f でファイル末尾を継続監視テキストファイルの列の取り出しや連結 cut や join や pastetrは文字列を置換uniqは重複する行を1行にまとめるxargsで標準入力から受け取った文字を引数にし与えられたコマンドを実行grepやsedで正規表現を使う
■ファイルとプロセスの管理gzip, bzip2, xy はファイル圧縮unzip, bunzip2, xz(unxz)はファイル解凍tar, cpio はアーカイブ作成・展開chown ファイルやディレクトリの所有者設定 ユーザは必ずどこかのグループに登録しなければならない 一般的にはユーザ名と同じグループ名でメイングループとして登録していることが多い ユーザがメイン以外で登録しているグループ。複数登録できる ファイルやディレクトリの作成時点では所有ユーザ=作成ユーザのメイングループがそのまま所有グループとなる 所有者をuser2に変更 chown user2 test.txt 所有者をuser2にグループをgroup2に変更 chown user2:group2 test.txt :から書くとグループだけ変更 chown :group2 test.txt
ファイルのグループの調べ方
ls -lchgrp は所有グループ変更chmod ファイルやディレクトリのアクセス権変更SUIDやSGID適用のプログラムは実行ユーザに関係なく所有者or所有グループの権限で実行スティッキービットを設定したディレクトリは自分が所有するファイル以外削除不可
アクセス権
所有者/グループ/その他 r読み 4 w書き 3 x実行 1 ナシ 0 アクセス権はファイルは666から、ディレクトリは777からumask値を引いた値ln でハードリンク、ln -s でシンボリックリンク作成ps, pstree, pgrep でプロセス参照、top でシステム状況を一定間隔で表示kill, killall, pkull でプロセス終了・再起動等1:HUPハングアップ、2:INT割り込みctl+c、9:KILL強制終了、15:TERM終了デフォ、18:CONT再開、19:STOP一時停止コマンドラインの最後に&でバックグラウンド実行jobs でシステム上のジョブを確認ログアウトでもプログラムを実行しつけるには nohup
nohup python main.py &
ログアウトしてもバックグラウンド ジョブを継続する方法 (codereading.com)free でメモリの利用状況を確認uptime でシステムの平均負荷を確認nice でプロセスの実行優先度を指定、変更には reniceナイス値-20-19で実行優先度を指定
■デバイスとLinuxファイルシステムfdisk, gdisk, parted でパーティション作成mkfs でファイルシステムを作成ext2, ext3, ext4ファイルシステムを作成するには mke2fsmkswap でスワップ領域を作成df でファイルシステムの利用状況を確認du でファイルやディレクトリを含めたサイズを確認fsck, e2fsck でファイルシステムの整合性チェックや修復ext2, ext3, ext4ファイルシステムのパラメータ設定は tune2fsmount でファイルシステムのマウント、解除は umount継続利用や頻繁利用のファイルシステム情報は /etc/fstab に格納ディスク利用容量の制限はディスククォータを使う、ハードリミット、ソフトリミット、猶予期間を設定できるfind, locate でファイル検索、locateはあらかじめ準備されたDBに基づいて検索which, whereis でコマンドのフルパスを表示
■シェル、スクリプト、データ管理コマンドの別名設定は alias、設定解除は unalias関数の定義はfunction、定義済み関数を表示は declare -fbashのログイン時に全ユーザで実行される/etc/profile、ユーザ毎は~/.bashrc条件判定するには test直前に実行したcmdの戻り値は$?で確認できる、正常終了:0、それ以外はそれ以外の値が多い条件分岐 if-then-else-fi、case-in-esac繰り返し for-in-do-done、while-do-doneseq は連続した数値を生成するread は標準入力から文字列を読み込んで変数に代入する
■ユーザインターフェイスとデスクトップXサーバは入出力管理を担当、Xクライアントはユーザアプリに対応Xの設定はxorg.confでセクションごとに記述する、セクション: ServerLayout=入出力デバイスとスクリーン Files=フォントやカラーDBファイルのパス InputDevices=キーボードやマウスなど入力装置の設定 Monitor=モニター設定 Device=ビデオカードの設定 Screen=ディスプレイの色深度や画面サイズ設定Xサーバとクライアントが別コンピュータの場合の設定 1)Xクライアントで環境変数DISPLAYにXサーバを指定 2)XサーバでXクライアントからのアクセスを受け付けるよう xhost で設定xwininfo はウィンドウの情報を表示する
ディスプレイmgrはユーザ認証やシェルの起動で XDM, GDM, KDM, LightDM等ウィンドウmgrはXの外観で twm, fvwm, enlightenment, Mutter, Fluxbox, Compiz, KWin等キーボードのアクセシビリティには スティッキーキー、スローキー、バウンスキー、トグルキー、マウスキー等
■システム管理1ユーザ情報は /etc/passwd に格納シャドウパスワード利用時はパスワード情報は /etc/shadow に格納グループ情報は /etc/group に格納ユーザ情報の追加 useraddユーザ情報の削除 userdelユーザ情報の変更 usermodグループ情報の追加 groupaddグループ情報の削除 groupdelグループ情報の変更 groupmodユーザパスワードの設定 passwduseradd時は /etc/skel以下がユーザのホームdirにコピーされる定期的なジョブ実行には croncronへのジョブ追加は crontab 分時日月曜日cmdの記述順
ユーザーを指定してcronを実行 | Codebase Blog ログインユーザで設定・実行される(sudo crontab -eでRoot実行という意味)システムが起動していなかった時のcronジョブは anacron で実行anacron の設定は /etc/anacrontab1回限りのジョブ予約は at 日時cmd、確認は atq あるいは at -lジョブの削除は atrm あるいは at -dロケール確認は locale文字コードを変換 iconvタイムゾーンは /usr/share/zoneinfo 以下にあり /etc/localtime にコピーするシステムのタイムゾーンは環境変数 TZ、/etc/timezone に設定する
■システム管理2システムクロックを設定するには dateハードウェアクロックは hwclockNTPサーバに問い合わせシステムクロックを設定するには ntpdateNTPサーバプロセスは ntpd、設定ファイルはntp.confsyslogの設定は etc/syslog.conf、ファシリティ、プライオリティに応じたログの出力先を指定rsyslogの設定は /etc/rsyslog.conflogger でログの生成ができるログローテーションは logrotate、設定は /etc/logrotate.confメールサーバMTAには Postfix, sendmail. qmail, exim等
メールアドレスの別名は /etc/aliases で定義し newaliases で有効にするメールの転送は ~/.forward で設定するメールキューの状況は mailq で確認印刷は lpr で行う、 -# オプションで印刷部数プリントキューの状況確認は lpqプリントキューの印刷要求を削除するには lprm
■ネットワークの基礎IPv4は32ビットで8ビットずつを10進数に変換した表記を使うIPv6は128ビットサブネットマスクはネットワーク部とホスト部の境界を表すIPアドレスとサブネットマスクの論理積がネットワークアドレスプライベートアドレス クラスAは10.0.0.0~10.255.255.255 (10.0.0.0/8)クラスBは172.16.0.0~172.31.255.255 (172.16.0.0/12)クラスCは192.168.0.0~192.168.255.255 (192.168.0.0/16)サービスとポート番号の対応は /etc/services に記載 Well-Known-Port:0-1023TCP20:FTP(データ)TCP21:FTP(制御)TCP22:SSHTCP23:TelnetTCP25:SMTPUDP53:DNSUDP67:DHCP(サーバ)UDP68:DHCP(クライアント)TCP80:HTTPTCP110:POP3TCP123:NTPTCP443:HTTPSTCP587:SMTP(サブミッションポート)IMAP overSSL:993POP3 overSSL:995ホストと通信ができるか ping経由するルータ情報は traceroute や tracepathホスト名からIPアドレスは dig や hostホスト名の確認や設定は hostnameルーティングテーブルの確認や設定は routeネットワークインターフェイスの設定や動作状況確認は ifconfig有効化は ifup、無効化は ifdown/etc/resolv.conf に参照先DNSサーバを設定するホスト名とIPアドレスの対応は /etc/hostsファイルに記述名前解決の順序は /etc/nsswitch.confに設定
■セキュリティスーパーサーバ inted や xinetd は他のサーバプログラムに変わって要求を受けサーバプログラムを起動し常駐プロセスを減らすことでシステムリソースの節約をするxinetd の全体設定は /etc/xinetd.conf、各サービスの設定は /etc/xinetd.d 以下TCP wrapper等を利用しているアプリケーションの場合 /etc/hosts.allow や /etc/hosts.denyにアクセス制限を設定する開いているポートを確認するには netstat, lsof, nmapパスワードの有効期限を設定するには change/etc/nologinファイルを作成しておくと一般ユーザはログインできないsu で他のユーザになれるsudo でroot権限の一部を一般ユーザが利用できる設定は visudo で /etc/sudoers ファイルに記録されるユーザが利用できるシステムリソースを設定するには ulimitOpenSSHはユーザ認証以外にホスト認証も行うセキュアな通信を実現信頼できるホストのホスト鍵は ~/.ssh/known_hosts公開鍵認証で利用する鍵ペアは ssh-keygenscp で安全なファイル転送ができるssh-agent と ssh-add でパスフレーズを記憶させることができるgpg で GnuPGの鍵管理やファイルの暗号化・複合ができる
=============
Level2 Ver4.0■キャパシティプランニングメモリやスワップの情報は top, free, vmstatプロセス情報は top, ps, pstreeCPUの平均負荷(直近1分、5分、15分)は top, uptimevmstat はメモリや仮想メモリの詳細な状態を継続的に監視iostat はCPUの利用状況とディスクの入出力の情報を継続的に監視NFSでは nfsiostat、CIFSでは cifsiostat でsar で様々なシステム統計情報を確認w でログイン中ユーザとそのプロセス情報を確認netstat でネットワークの統計情報を確認lsof で開いているファイルとポートを確認システム監視ツールには collectd, Nagios, MRTG, Cacti等でWeb IFあり
■Linuxカーネルカーネルバージョン確認は uname -r や /proc/version や /usr/src/linux/Makefileカーネルモジュールは /lb/modules/`uname -r` dirにインスコされるdirのパスは /usr/src/linux/Makefile で設定カーネルモジュール操作は:lsmod ロードされているモジュールをリスト表示insmod モジュールをロードrmmod モジュールをアンロードmodprobe 依存関係を解決してモジュールをロード、アンロードdepmod モジュールの依存関係情報を更新modinfo モジュールの情報を表示modprobe が利用するモジュールの依存関係情報はmodules.depファイルにあり depmod で更新可カーネルの設定ファイルは .configカーネル2.6以降は下記手順でカーネル再構築make config | menuconfig | xconfig | gconfigmakemake modules_installmake install初期RAMディスクを作成するには mkinitrd や mknitramfsデバイスファイルは udev が動的に作成するudev の設定ファイルは /etc/udev/rules.dディレクトリ以下にあるudevadm monitor で udevd をモニタできるsysctl でカーネル設定を表示更新できるdmesg で起動時のカーネルメッセージを確認できる/proc ディレクトリ以下のファイルを通してカーネルが認識しているハードや実行中のプロセスやシステムリソース等の情報が分かる/proc 以下の情報は lsdev, lspci, lsusb で表示
■システムの起動BIOS->MBR->ブートローダ->カーネル->initの順で起動initの設定は /etc/inittab 、書式は ID:ランレベル:action指示子:処理ランレベルごとの起動スクリプトは /etc/rc.[0-6].dディレクトリにあるデフォルトで起動するサービスは chkconfig や update-rc.d で設定起動プロンプトでカーネルやinitに渡すパラメータを指定できる起動時に指定したパラメータは /proc/cmdline で確認できるgrub でGRUBシェルが使えるGRUB Legacyの設定ファイルは /boot/grub/menu.lstGRUB 2の設定ファイルは /boot/grub/grub.cfgGRUB 2の設定は /etc/default/grub に記述し update-grub を実行すると /boot/grub/grub.cfgが生成されるLILOの設定ファイルは /etc/lilo.confLILOの設定変更後は lilo よりMBRを更新するSYSLINUX はFATファイルシステムからカーネルを起動するISOLINUXはISO09660ファイルシステムからカーネルを起動するPXEはネットワークブートの規格
■デバイスとファイルシステムマウント設定は /etc/fstab で行う、デバイス名にはUUIDやラベルも使えるカーネルがサポートしているファイルシステムは /proc/filesystems で確認できる/etc/mtab には現在マウントしているファイルシステムの情報がある/etc/mtab と /proc/mounts はほぼ同じ内容mount -o remount でファイルシステムを再マウント、マウントオプションの変更に利用tune2fs で ext2/ext3/ext4ファイルシステムの各種パラメータを表示・変更できるblkid でデバイスのUUIDを確認できるsync はディスクバッファ領域にあるデータをディスクに書き込むmkswap でスワップ領域を作成できるファイルとしてスワップ領域を用意するには dd で任意のサイズのファイルを作成するswapon でスワップ領域を有効化、 swapoff で無効化できるswapon -s か /proc/swaps でスワップ領域を確認できるext2ファイルシステムを作成するには mke2fs あるいは mkfs -t ext2ext3なら mke2fs -j あるいは mkfs -t ext3ext4なら mkfs -t ext4XFSファイルシステムを作成するには mkfs.xfs あるいは mkfs -t sfsCD/DVD-ROMイメージの作成は mkisofsファイルシステムの整合性チェックには fsck あるいは e2fsck あるいは xfs_checkS.M.A.R.T.はハードディスク自己診断機能で smartdデーモンが情報収集する
smartctl で S.M.A.R.T.情報を表示オートマウントの設定は /etc/auto.master とマップファイルで行う
■高度なストレージ管理RAID0は冗長性が無いが高速RAID1は冗長性があるがディスク容量は半減RAID4やRAID5はパリティを使って冗長性を保つRAID4はパリティを専用ディスクに保存、RAID5はパリティ情報を分散madadm でRAIDを構築・管理/proc/mdstat でRAIDの状態を確認物理ボリュームを作成するには pvcreateボリュームグループを作成するには vgcreate論理ボリュームを作成するには lvcreateスナップショットを利用するとアンマウントなしで lvcreate でバックアップができるhdparm でIDEハードディスクのパラメータを設定sdparm でSCSI/SATA/USBハードディスクのパラメータを設定iSCSIストレージを利用するホストをイニシエータ、iSCSIストレージをターゲットと呼ぶiscsiadm はSCSI管理ユーティリティiSCSIストレージ内の論理ドライブ番号をLUNという
■ネットワークMACアドレスとIPアドレスの対応はARPキャッシュに保存され、arp で参照・設定できるネットワーク関連コマンドでは -n オプションで名前解決を抑制できるtcpdump はNIC上のパケットをダンプ出力するGUIのパケットキャプチャツールにはWiresharkがあるnetstat はネットワークの情報を表示するルーティングテーブルは route で設定するip は ipconfig, arp, route といったコマンドと同等の操作ができるnmap でポートスキャンやIPアドレススキャンができるNIC間でパケット転送を行うには /proc/sys/net/ipv4/ip_forward の値が1である必要がある
■システムメンテナンスtarボールは tar を利用して作成・展開するconfigureスクリプトはシステム環境に応じたMakefileを生成する、多くのオプションの指定ができるmake はMakefileに記述された処理を行う、Makefileには各種ターゲットを設定できる、ターゲットにはinstall や clean などがあるバックアップには、フルバックアップ、差分バックアップ、増分バックアップなどの種類があるバックアップなどに利用できるコマンドとして tar, cpio, dd, dump, restore, rsync などがあるmt でテープドライブを操作するテープドライブを表すデバイスファイル /dev/st0 は巻き戻しあり、/dev/nst0 は巻き戻しなしネットワークバックアップツールには Amanda, Bacula, BackupPC などがあるログイン直後に表示するメッセージは /etc/motd に記述するログイン時に表示するメッセージは /etc/issue に記述するネットワーク経由のログイン時に表示するメッセージは /etc/issue.net に記述するバッチを適用するコマンドは patch で -R オプションでパッチの適用と取り消しを行う
■DNSDNSサーバには、BIND, dnsmasq, djbdns, PowerDNSなどがあるDNSクライアントコマンドには、 dig, host, nslookup があるBIND9は mdc で管理できる/etc/named.confでは様々なオプションが指定できるallow-query DNS問い合わせを受け付けるホストallow-recursion 再帰的な問い合わせを受け付けるホストallow-transfer ゾーン転送を許可するホストblackhole 問い合わせを受け付けないホストdirectory ゾーンファイルを格納するディレクトリforwarders 問合せの回送先DNSサーバforward forwardersの回送方法max-cache-size 最大キャッシュサイズrecursion 再帰的問合せを受け付けるかどうかversion バージョン表示ソーンファイルのレコードはSOA ゾーンの管理情報NS ゾーンを管理するネームサーバMX メールサーバA ホスト名に対応するIPアドレス正引きAAA ホスト名に対応するIPv6アドレス正引きCNAME 別名に対応するホスト名PTR IPアドレスに対応するホスト名逆引きSOAレコードのメールは@を.に変更して指定するゾーンファイル内では@はゾーン名を表すMXレコードではプリファレンス値が小さいものほど優先度が高くなるNSレコードやMXレコードには別名を使わないBIND9では dnssec-keygen でセキュリティ用のカギを作成できるdnssec-signzone でゾーンに署名を行う
■WebサーバとプロキシサーバApacheのメイン設定ファイルはhttpd.confだがディストリビューションによって異なるDirectoryIndexディレクティブでインデックスページを定義するErrorDocumentディレクティブでエラーページを定義するAliasディレクティブでドキュメントルート外のコンテンツを参照できるCustomLogディレクティブでログファイルを定義する、デフォルトのログファイルはaccess_logであるErrorLogディレクティブでエラーログファイルを定義する、デフォルトのログファイルはerror_logであるUserDirディレクティブで公開するユーザのホームディレクトリを定義するMaxClientsディレクティブで最大子プロセス数を指定するapachectl でApacheを管理できる基本認証を使ったアクセス制御でユーザとパスワード設定は htpasswd を使うダイジェスト認証を使ったアクセス制御でユーザとパスワードを設定するには htdigest を使う.htaccessファイルでhttpd.confの設定を上書き、httpd.conf内のAllowOverrideディレクティブで上書きを許可する範囲を設定AccessFileNameディレクティブで外部設定ファイルの名前を定義するApacheではIPベースのバーチャルホストと名前ベースのバーチャルホストを利用できるSSLサーバ証明書はIPアドレスとドメイン名のペアに対して発行されるNginxはオープンソースのWebサーバ、リバースプロキシサーバであるNginxの設定は nginx.confを中心とした /etc/nginxディレクトリ以下のファイルで行うSquidの設定ファイルは squid.confであり、aclディレクティブと http_accessディレクティブでアクセス制御を設定する
■ファイル共有Sambaユーザを作成するには smbpasswd, pdbedit を使うパスワード変更には smbpasswdユーザ認識方法はsmb.conf のsecurityパラメータで指定Sambaサーバがマスターブラウザになる優先度はOSレベルに基づくOSレベルはsmb.confのoslevelパラメータで指定testparm でsmb.confの構文をチェックできるsmbstatus でSambaに接続されているクライアントとオープンされているファイルを確認できるnmblookup でNetBIOS名やマスターブラウザを照会できるsmbclient を使うとSambaクライアントとして共有リソースを利用できるMicrosoftネットワークの共有リソースをマウントするには smbmountrpcinfo でRPCサービスの状況を確認できるexportfs でエクスポート状況を表示したり/etc/exportsの変更を反映させたりできるNFSサーバでエクスポートしているディレクトリを調べるには showmount を使う
■ネットワーククライアント管理/etc/dhcpd.confで割り当てるIPアドレスの範囲を指定するには range 192.168.0.0 192.168.0.99; のように記述するリース中のIPアドレス情報はdhcpd.leasesファイルに記録されるdhcrelayはDHCPリレーエージェントであるPAMの設定ファイルは/etc/pam.dディレクトリに配置されるが/etc/pam.confが使われることもあるPAM設定ファイルの書式は モジュールタイプ コントロール モジュールのパス 引数requiredとrequisiteコントロールの違いは認証に失敗したときrequiredは同じタイプのモジュールの実行が全て官僚した時点で認証を拒否するのに対し、requisiteはすぐに認証を拒否するLDAPエントリはLDIF形式でテキストファイルに記述できるエントリを一意に識別する名前をDN(識別名)という個々のエントリはいずれかのオブジェクトクラスに属するldapadd でLDAPエントリを追加するldapsearch でLDAPエントリを検索するldapdelete でLDAPエントリを削除するldapmodify でLDAPエントリの内容を変更するldappasswd でLDAPエントリに設定されるパスワードを変更できるOpenLDAPサーバの設定ファイルは slapd.confslapadd でLDAPデータベースをリストアできるslapcat で全てのエントリの情報をLDIF形式で出力できる(オフラインバックアップ)slapindex でLDAPデータベースのインデックスを再構築できるSSSDは識別サービス・認証サービスとの通信を管理しキャッシュをするデーモンである
■メールサービスSMTPサーバには Postfix, exim, sendmailなどがあるメールボックスには1ユーザ1ファイルに格納されるmbox形式と1メール1ファイルに格納されるMaildir形式があるPostfixのメイン設定ファイルはmain.cfであるpostconf で設定パラメータを表示できるpostqueue -p でメールキューを確認できるpostqueue -f でメールキュー内のメール配送を直ちに試みる/etc/aliases にはメールのエイリアスを設定する。別名指定方法は次の通り user[,user..] ユーザのメールに配信 /path ファイルに追加 |command コマンドの標準入力へ user@domain メールアドレスへ転送 :include:/path 外部ファイルを読み込む/etc/aliasesの変更を反映させるには newaliases を実行するprocmail の設定ファイルは/etc/procmailrcと~/.procmailrc/etc/procmailrcと~/.procmailrcのレシピの書式は次の通り :0 [フラグ] [:ロックファイル] * 条件式 アクションDovecotの設定は/etc/dovecot.confで行う
■システムセキュリティiptables でパケットフィルタリングを設定するproftpd.confは ProFTPD の設定ファイルであるvsftpd.confは vsftpd の設定ファイルであるpure-ftpd.confは Pure-FTPD の設定ファイルである/etc/ftpusers にはFTPログインアクセスを許可しないユーザを記述する信頼できるホストのホスト鍵は ~/.ssh/known_hostsに格納される公開鍵認証で利用する鍵ペアは ssh-keygen で生成する~/.ssh/authorized_keysファイルには接続するユーザの公開鍵を登録するscp で安全なファイル転送ができるssh-agent と ssh-add でパスフレーズを記憶させることができるSnort はネットワークベースのIDSツールTripwireはファイルの改ざんを検知するIDSツールOpenVASは脆弱性のチェックを行うツールFail2banはログから判断して攻撃を遮断するツールnmap はポートスキャンを行うツール開いているポートは netstat, lsof, nmap, fuser などのコマンドで調査OpenVPNにはルーティング接続とブリッジ接続があるOpenVPNサーバにはCA証明書、サーバ証明書、サーバ秘密鍵、DHパラメータを配置するOpenVPNクライアントにはCA証明書、クライアント証明書、クライアント秘密鍵を配置するOpenVPNサーバはUDPポート1194番を使用する
=============
【ざっくりと理解する】SELinuxとは? (eng-entrance.com)SELinuxは事後防衛的な手段だ。もしサーバに侵入されたとしても、被害を最小限に抑えるための仕組みとなっている。そのため侵入事態を防衛できるものではないredhat系
この辺は抑えておきたい、昔は無かっただけだと思うが
LVM(logical volume manager) シェル変数をexportして環境変数
ルートログイン不可、警告文表示 プロセスの優先順位ナイス値 バックグラウンドジョブでログアウトしても実行 スーパーサーバ、TCPwrapperでプロセス省略 パケットフィルタリング、ルーティングテーブル(nat/forward) SSHポート転送(popやftpでも可)
ver5でもそれほど変化がないのでは、systemdの強化辺りか?gitやdockerをカバーしたように思ったが?
=============
/etc 各種の設定ファイルの保存場所 hostsとか.confとか バイナリファイルを置かないこと /opt用の設定ファイルを置くために/etc/optを設けること/opt アプリパッケージ/usr 各ユーザー共通利用のプログラムやライブラリが置かれるunix shared resouces/var ログやキャッシュ、再起動しても残り続ける /etc/logrotate.confで1週間4世代等を設定/sbin システム管理者用bin
/etc/fstab マウント情報が記載されているmount -a マウント情報を書き直すと全てマウントしなおす
■/varを別ディスクにしたい
デバイスを追加しフォーマットfstabにマウントとディレクトリの紐づけを追記(新ディスクと/var)マウントやリブート前に既存ファイルの移動対処 tmpDirを作成 mount (type) (device) (mountDir:tmpDir) cp -a 旧 tmpDirリブート
Comment (0)
Navi: < 2 | 3 | 4 | 5 >
-Home
-Column [128]
-Europe [9]
-Gadget [77]
-Web [133]
-Bike [4]
@/// BANGBOO BLOG ///