新入社員ブログ 斎藤01[XSSについて]

25年度入社の斎藤です。

 今回は、Webアプリケーションに対する代表的な攻撃手法であるXSS(クロスサイトスクリプティング)について、概要を簡単にまとめ、XSS攻撃に対する一般的な対策とLaravelでどのように対策が行われているのかについて説明しようと思います。

XSS(クロスサイトスクリプティング)とは

 XSSとは、脆弱性のあるwebサイト上で悪意のあるスクリプトを紛れ込ませることで、Webサイトを閲覧したユーザの環境において、紛れ込ませたスクリプトを実行させる攻撃手法です。具体的なXSSの流れを以下の簡単な例で説明します。

前提条件
・脆弱な掲示板サイトが存在
・投稿内容をそのままHTMLとして表示する仕様(エスケープ処理がない)

※エスケープ処理については後述

ステップ1:攻撃者が悪意のあるスクリプトを投稿
攻撃者が掲示板の投稿フォームに、以下のようなスクリプトを投稿する。

document.cookie:閲覧者のCookie情報を取得
fetch():攻撃者のサーバーにCookie情報を送信

このスクリプトが実行されると、閲覧者のCookie情報が攻撃者のサーバーに送信される仕組みになっている。

ステップ2:被害者が掲示板を閲覧
攻撃者の投稿内容が、閲覧者のブラウザに送信されます。

ステップ3:被害者のブラウザでスクリプトが実行される
被害者のブラウザは、<script>タグの中身を正規のJavaScriptコードとして実行してしまう。

ステップ4:攻撃者に閲覧者のCookie情報が抜き取られる

このようにして攻撃者は、盗んだCookie情報を使って被害者になりすまし、不正に被害者のアカウントでログインすることが可能になります。

今回の例は、XSSの中でも特に格納型XSSと呼ばれる攻撃手法です。ほかに、反射型XSSやDOM Based XSSといった攻撃手法も存在します。

XSS対策

 有効な対策としてエスケープ処理を行うことが重要です。
エスケープ処理とは、 <script>のようなウェブページの表示に影響する特別な記号文字を無害な文字(HTMLエンティティ)に置き換えることです。
具体的には以下のような置き換えを行います。

 “<script>”であれば、 &lt;script&gt; に変換される。

Laravelでのエスケープ処理
Laravelでは {{ $変数 }} という記述方法で、変数の中身を自動的にエスケープしてくれる機能があります。


※{{}}内の変数に対して自動でhtmlspecialchars(エスケープ処理のメソッド)を施してくれます

エスケープ処理を行わずに表示させたい場合は、{{!! $変数 !!}}という記述方法を用います。

最後に

 今回、XSS(クロスサイトスクリプティング)ついて学ぶ機会を得たことで、Webアプリケーションのセキュリティに対する理解が深まりました。
特に、攻撃者がどのように悪意のあるスクリプトを実行させるのか、ブラウザのCookie送信の仕組みをどう悪用するのかといった、攻撃の手順と仕組みを理解することで、知らないことに対する不安から、知識に基づいた適切な警戒心へと意識が変化したことが、今回の学びの最も大きな収穫だと考えています。

今回の話は以上です。
ありがとうございました。

2025年 新入社員ブログ 遠藤06 [リーダブルコード]

2025年4月入社の遠藤です。

今回は「リーダブルコード」という本についてお話いたします。
より良いコードを書くためのシンプルで実践的なテクニックが書かれています。
先輩方も読んでおり、実務にも役立つ内容であったので、紹介したいと思います。

リーダブルコード

読みやすいコードとは、決して面白いという意味ではなく、意味の分かりやすい名前がつけられている、コメントが適切である、きれいに成形されているという基本的なことの積み重ねであり、そのコードの組み立て方を、この本はわかりやすく丁寧に説明してくれています。
実際のコードを用いた説明や、絵での説明が入っているので、普段活字の本を読まない方や、まだコードに対しての理解が浅い自分でも読み進めるのに苦では無いように感じました。

感想

書いたコードがただ動けば良いだけでなく、きれいに並べられており、わかりやすく書かれているか。誰もが読んで理解できるものか。複雑な条件にしてしまっていないかなど、自分自身読んでいて反省すべき点がいくつか思い浮かびました。
実務に入ると自分だけでなくチームで一つの機能を作成することもあるため、自分が理解できれば良いのではなく、チームの作業者が理解できるかが大切になると理解しました。

また、人によって読みやすいコードが違うという点も考慮しなくてはいけません。例えば条件式の場合でも、if文で書いてあるほうがわかりやすいと感じる人もいれば、三項演算子で一行にまとめられているほうが読みやすいと感じる人もいます。
そういった場合には、その時の内容次第で臨機応変に読みやすくなるように考えていかなければなりません。これは経験していく中で自分なりの最適を見つけていきます。

一度作成したものに満足するのではなく、より読みやすくならないかコードを見返し、考えていきたいと思います。

今回のお話は以上となります。
ありがとうございました。

2025年 新入社員ブログ 遠藤05 [休日]

2025年4月入社の遠藤です。

今回は先日参加したイベント、「稲妻フェスティバル」を紹介したいと思います。

稲妻フェスティバル

稲妻フェスティバルはライフスタイル全般にこだわり、アメリカンカジュアルを中心としたファッションアイテムや雑貨、古着の販売を行っているイベントです。
お台場の特設会場で開催され、近くではハンバーガーフェスも同時開催しているため、一日満喫できるイベントです。
毎年開催されており、今年は11月30日に行われました。

おすすめ

私は今年初めて参加したのですが、服や雑貨がたくさんあり、見て回るだけでとても楽しいイベントでした。
出店しているお店のほとんどがセール価格で出しているため、ついお財布のひもが緩んでしまいます。
服だけでなく、コップやステッカー、ワッペン、ラグなどの雑貨もたくさん出ているのでお気に入りのものが見つかると思います。

また、バイクで来ている方も多いため、駐車場にはバイクが何台も止まっており、バイク好きの方は駐車場から楽しめます。
開催会場がお台場なので、イベントをみてお買い物をするのにもとても良い場所です。

会場でお買い物をし、ハンバーガーを食べてお台場でゆっくりする。とても気持ちの良い休日でした。

今年の開催は終了してしまいましたが、きっと来年も開催されると思うので、来年もあればぜひ参加してみてください。

今回のお話は以上となります。
ありがとうございました。

2025年 新入社員ブログ 遠藤04 [おすすめ小説2]

2025年4月入社の遠藤です。

今回は前回に引き続き、最近読んだ小説についてお話いたします。
紹介するのは、降田天さんの「女王はかえらない」という小説です。
前回紹介した本と同様に、「このミステリーがすごい!」大賞の大賞受賞作品です。

あらすじ

舞台は田舎の小学校です。
学校内でどのような問題が起き、その問題に主人公がどのように立ち向かうのか、小学生視点の一部、教師視点の二部、真相編の三部構成で物語は進んでいきます。

第一部では、スクールカーストが確立されているクラスに、東京からやってきた美しい転校生、エリカの出現でクラスの女子が二分され、日々クラス内で言い争いなどが起きるようになり、その結果事件に発展してしまいます。

第二部、第三部では教師の立場からクラスはどう見えているのか、事件の真相が徐々に明らかになっていきます。

感想

一部では事件に発展するまでの経緯や、子どもたちの心情が描かれ、二部三部と明らかになる真相に、ドキドキして読み進める手が止められませんでした。
読み切るまでは想像もできなかった結末に誰もが驚かされると思います。
戦慄の学園ミステリー、二度読み必至の紹介通り、あの時の話はこういうことだったのかと読み直してしまいました。
ミステリーが好きな方にはぜひ読んでいただきたいです。

今回のお話は以上となります。
ありがとうございました。

2025年 新入社員ブログ 遠藤03 [おすすめ小説]

2025年4月入社の遠藤です。

今回は最近読んだ小説についてお話いたします。
紹介するのは、小西マサテルさんの「名探偵のままでいて」という小説です。
この本は、宝島社が主催する、「このミステリーがすごい!」大賞の大賞受賞作品なのですが、タイトルの響きに惹かれ、読んでみました。

あらすじ

物語は、主人公の小学校教師である楓が、日常で起こった謎を認知症を患い、介護を受けながら暮らしている祖父と解決していくというものです。
認知症と聞くと、そのような状態で謎を解決することは難しいのではないかと思ってしまいますが、この祖父の認知症はレビー小体型というめずらしいタイプのもので、幻視や記憶障害などは起こるものの、体調によっては日常生活を送ることも困難ではありません。
また、祖父はもともとミステリー小説が大好きなかなりの切れ者で、そんな祖父の影響もあり、楓もミステリー小説が好きになります。そして、日常で発生する様々な謎を祖父に相談し、ともにその謎についての物語を紡いでいきます。

おすすめ

楓の身の回りでは、密室殺人や人間が消失してしまう事件、幽霊事件など、様々な事件や謎な事態が起きます。
その一つ一つのトリックと、犯人や事件にかかわった人間たちの背景まで読み解き、解決していきます。

この登場人物も非常に魅力的な人たちで、まず、楓の同僚の男性はお菓子作りが得意で、生徒にも人気があり、楓に好意を抱いています。

また、この同僚の学生時代の後輩は劇団員で、ミステリー好きです。

後輩くんのミステリー知識からの考察と、楓とのやり取り、ミステリーに興味はないが、楓のことが好きだから会話には入りたい同僚との三人の掛け合いがとても心地よく感じました。

感想

私は普段あまり本は読まないのですが、テンポよく進んでいくので、そんな人でも読みやすい一冊でした。
一話ごとに事件がちゃんと解決していくので、飽きずに読み進められると思います。

今回のお話は以上となります。
ありがとうございました。

2025年 新入社員ブログ 遠藤02 [人工知能について]

2025年4月入社の遠藤です。

今回はAI(人工知能)についてお話いたします。
研修の際、AIについて面白い話が聞けたので、皆さんにもお伝えしたいと思います。

AI(人工知能)とは

AIとは、機械学習アルゴリズムを用いることですべての動作を明示的に指示しなくても、機械自身が考え、実行できる技術です。
最初からすべてをできるわけではなく、与えられたデータから学習し、様々なことを自らで判断することができるようになっていきます。
AIはその知能レベルによって下記の3種類に大別されます。

・特化型AI(ANI)
特定のタスクに特化したAI。

・汎用AI(AGI)
人間と同等の知能を有したAI。

・超知能AI(ASI)
人間の知能を超えたAI。

現時点のAI

現在のAIの知能レベルはANI、特化型AIの段階です。
業務や私生活でも日常的に使われるようになったAIも、人間には容易にできるが、機械自身が判断するには難しいタスクが存在するという点において、いまだ汎用AIとは呼べない段階です。
しかし、対話型の生成AIによってさまざまなタスクの実行が可能となり、汎用AIへと近づいています。
AIの汎用性は多くの企業の研究によって現在も飛躍的に向上しているのです。

AIの今後

特化型AIである現在のAIが汎用AIとなるには、AIが人間と同程度の知能を有する必要があります。
現時点での課題には、以下のようなものがあげられます。
・少ない情報からの仮説立案
・身体性を伴う情報収集
・感情の理解
etc…
これらの課題を解決するには、自己学習能力の強化、身体性などの要素を獲得する必要があります。
汎用的な働きをするには、遠い未来のような話に聞こえますが、今後10年以内に汎用AIは実現されるとされています。
人やモノとふれあい、情報を自ら取得し、少ない情報からでも判断する知能を有する技術の研究が、日々されています。
また、現段階ではASI、超知能AIはまだ理論的な概念に過ぎませんが、汎用AIが実現すれば超知能AIに進化する可能性が高いと考えられています。

まとめ

技術の進歩はすさまじく、人間の暮らしを快適にする一方で、AIの進化によって、雇用が奪われる等のリスクが生じることもあります。人間の働き方も大きく変わっていくことでしょう。
人と同等の知能を有し、身体性を獲得したとしても、人々に受容されなければ、その価値を発揮することができません。新しい技術との上手な向き合い方も探していかなくてはいけないと感じました。
基礎的な知識を学び、その証明となる「生成AIパスポート」という資格試験も存在するようです。生成AIについて正しく理解するために受験するのもよいかもしれません。

今回のお話は以上となります。
ありがとうございました。

2025年 新入社員ブログ 遠藤01 [フォローアップ研修]

2025年4月入社の遠藤です。

今回はフォローアップ研修についてお話いたします。
われわれ2025年度入社社員一同は4月より、約二か月間外部での研修を受けさせていただいておりました。
そこでは、ITとは何かという情報基礎の学習から、実務で用いるようなコードの書き方、アプリ開発まで多くのことを学びました。
今回の研修は、その後のフォローアップ研修という位置づけで、ビジネス基礎を学びました。社会人としての仕事への姿勢を学ぶことが目的です。

研修で学んだこと

・業務の振り返りと仕事への心構え
入社してから今までの業務を振り返る。
仕事への心構えを再認識し、効率よく円滑に業務に取り組むためにすべきことを改めて考える。

・ビジネスマナー
人間関係を築き、より良い組織づくり。
自分の対応が会社の評価となることを自覚する。

・コミュニケーション
コミュニケーションが組織を守り、自分も守る。
相手に何がどのように伝わったのかを意識する。

・キャリア
地位、役職が同じ人物でも、仕事への興味や、やりがいの違いが個人やチームでの成長への違いとなる。

・ストレスコントロール
ストレスとうまく付き合い、どのように解消できるのか、何が原因なのかを考える。
また、自己効力感を高めることで、そもそものストレスを感じることが減少する可能性がある。
しかし、適度なストレスが達成感や良い緊張感を生み出すこともあるため、一概にすべてのストレスが悪いわけではない。
そのため、ストレスをコントロールすることが重要になる。

今後について

今回の研修で、PDCAサイクルを上手に回すこと、スピードを意識した業務をすることで作業の効率をあげることができると学びました。
スピードを意識することでその業務への集中力が増し、質の高いものを作ることができるという観点は、今まで自分にはなかったものなので新鮮でした。
また、コミュニケーションにおいては、互いに尊重しあい、調和したコミュニケーションを図ることで、誰もが働きやすい環境づくりが大切であると感じました。
できることを増やし、与えられたチャンスを逃さず様々なことに挑戦していくことで、成功も失敗も経験し、すべての出来事を成長につなげていきます。

今回の研修のお話は以上となります。
ありがとうございました。

[PHP]PHP-Parserを用いたメタプログラミングについて

こんにちは。24年度入社の吉岡です。
案件で、システムで用いられているPHPソースコードとフレームワークのバージョンアップ作業を行いっています。作業の内容として大量に同様の変更を行いたい箇所があり、自分たちのチームはPHP-Parserを使用しました。PHP-Parserは今後の案件でも作業の効率化に役立ってくれると思いまので、共有させていただきます。

〇PHP-Parserとは
PHP-Parserは「PHPで書かれたPHPパーサー」のことです。
PHPパーサーはPHPソースコードをAST(抽象構文木)に変換し、変更を加え、変更後のASTをPHPソースコードに出力することができます。
AST(抽象構文木)は指定されたプログラミング言語の文法に従ってソースコードの構造を表す中間プログラムです。ソースコードのアイテムごとに対応するノードを用いて表現されます。

「手作業でよいのでは?」と思われるかもしれませんね。確かに変更箇所が少数であったり複雑な変更を加えたい場合は手作業の方が楽な場合も多いでしょう。
しかし、単純な変更を大量にしなければならない場合はどうでしょうか?
「システム内のすべてのファイルに declare(strict_types=1); を追加したい」「システム内のすべての配列を、array() から [] に記述を統一したい」という場合に、手作業で行うと多くの時間が掛かりミスが生じやすくなってしまうかもしれません。

そんな時はPHP-Parserの使用を検討されてはいかがでしょうか?


〇PHP-Parserを用いた変更処理の流れ
1 PHPソースコードからASTへパース
2 ASTへ変更を加える
3 新ASTから新PHPソースコードへパース


*インストール
パースしたいPHPソースコードのバージョンによって、PHP-Parserのバージョンを選択してください。

・PHP-Parser 4.x
動作環境: PHP7.0以上で動く
サポート範囲: PHP5.2~8.3( PHP5.xの解析を完全にサポート)
https://github.com/nikic/PHP-Parser/blob/4.x/doc/0_Introduction.markdown

・PHP-Parser 5.x
動作環境:PHP7.4以上で動く
サポート範囲:PHP7~8( PHP5.xの解析も部分的にサポート)
https://github.com/nikic/PHP-Parser/blob/master/doc/0_Introduction.markdown

コマンド

1 PHPソースコードからASTへパース
PHPソースコードを取得し、パーサーを用いてASTへパースを行います。

・入力用PHPソースコード (inputSampleData.php)

・パース処理(changePhp.php)

・実行

・実行結果(変換されたAST)
コストコのレシートくらい長いですので、ざっと目を通していただければ十分です。「Stmt_Classってやつはクラス定義のことなんだろうな」「Expr_Array_って書いてあるから配列のなんだろうな」ぐらいでOKです。

ノードを用いて変更箇所を指定して、追加・変更・削除などの変更処理を行います。それぞれのノードクラス定義に関する詳細は、nikic/php-parserの公式ドキュメント(5.x版) または vendor/nikic/php-parser/lib/PhpParser/Node/ ディレクトリ配下から探してください。(どのクラスなのか名前で推測できるものが多いと思います)

2 ASTへ変更を加える
今回の本命である、パースされたASTに対して変更を行います。変更を行うにNodeVisitorクラスを基に任意の操作を行うクラスを作成し、「どのタイミングでどの操作を」定義します。

・変更処理セットして実行(changePhp.php 続き)

・PHPの厳密な型判定を設定する記述を追加するNodeVisitor(StrictModeRevisingVisitor.php)

・配列をarray()から[]に統一するNodeVisitor(ArrayKindRevisingVisitor.php)

これで変更を加えることができました。

3  新ASTから新PHPソースコードへパース

・changePhp.php 続き

・出力ファイル(outputSampleData.php)

変更できました。ただこの記述だとパース時に空欄削除などのフォーマットが行われます。

元のソースコードの書式を保ったままパースする記述を載せておきます。

・変更処理セットして実行(changePhpNoFormat.php)

・実行結果

入力したPHPソースコードと同じく、クラスメソッドが値を返す処理の前に空欄行が残したままにできていますね!

〇おわりに
プログラミングやITの知識だけではなく、「必要な情報を得る力」は本当に重要ですね。特に、ネットの記事で親切丁寧に紹介されていない知識を得たい場合や古いドキュメントから使用を知りたい場合などだと、自分の「必要な情報を得る力」のなさを痛感することが多くあります…
今後AIがより身近になってきて仕事上でも活用しそうだからこそ、検索の仕方や質問の仕方をより一層鍛えていきます!

・参考にさせていただいた記事
https://www.komtaki.com/posts/php-meta-programming-introduction
https://qiita.com/ktplato/items/23ad2893d741bfb564f9meta-programming-introduction

https://qiita.com/ktplato/items/23ad2893d741bfb564f9

[LinuC]Linuxのパーミッションについて

2024年4月入社の吉岡です。以前から「Linuxはコードを書くよりも直感的でないし自分にサーバ・インフラ関係はよくわからない…」と苦手意識を持っていたのですが、苦手なまま避け続けるのは精神衛生によくないと感じ取り組んでみることにしました。現在はLinuCレベル1の取得を目指しており、LinuC公式のテキストとPing-tに取り組んでいます。その中で学んだLinuxのファイルやディレクトリのパーミッションについてまとめさせていただきました。

誰向けの記事か:プログラミング諸学者向け

目次

  • パーミッションとは
  • ディレクトリのパーミッション設定例
  • 特殊なパーミッション
  • デフォルトパーミッションの設定

〇パーミッションとは

パーミッションはアクセス権限のことであり、主に用いられるパーミッションとして、読込権限・書込権限・実行権限の3種類があります。各パーミッションを所有者・グループ・その他ユーザごとに設定することでセキュリティを高め、システムの目的に沿った使用がされやすくなります。

各パーミッションで可能になる動作を下記の表にまとめました。

パーミッションファイルの場合ディレクトリの場合
読込権限(r|4)ファイルの内容を表示ファイルのリストを表示
書込権限(w|2)ファイルの上書きファイル作成・削除
実行権限(x|1)ファイルの実行ディレクトリ内に入れる

「$ls -l ファイル名」 または 「$ls -dl ディレクトリ名」 で10桁のパーミッションコードを確認することができます。
パーミッションコードの左から1番目の記号はファイルの種類を表しており、左から2~4番目が所有者のパーミッション、左から5~7番目がグループのパーミッション、左から8~10番目がその他ユーザのパーミッションを表しています。

パーミッションコード例: -rwxr-x–x
ファイルタイプ:「ファイル」
所有者のパーミッション:「読込権限・書込権限・実行権限」
グループのパーミッション:「読込権限・実行権限」
その他ユーザのパーミッション:「実行権限」

ファイルタイプ記号ファイルタイプ
–ファイル
dディレクトリ
lシンボリックリンク
cキャラクタデバイス(キーボードなど)
bブロックファイル()
sソケット(双方向)
pFIFO(一方向)
?その他

パーミッションを変更したい場合は、chmod コマンド で8進数またはシンボルで変更後のパーミッションをしてすることができます。

・8進数で指定する場合
付与したいパーミッションを読込権限(4)、書込権限(2)、実行権限(1)とした時の合計値でsi表現する。3桁の8進数で指定する場合は左から所有者のパーミッション・グループのパーミッション・その他ユーザのパーミッションを設定し、4桁の場合は左から特殊パーミッション・所有者のパーミッション・グループのパーミッション・その他ユーザのパーミッションを設定する。

・シンボルで指定する場合
付与したいパーミッションを読込権限(r)、書込権限(w)、実行権限(x)、で表現する。所有者のパーミッション(u),グループのパーミッション(g),その他ユーザのパーミッション(o)に対してそれぞれ設定したいパーミッションを設定する。

〇ディレクトリのパーミッション設定例

個人的にディレクトリのパーミッションは動作を行うことができるのかわかりづらいと感じたので、いつくか具体的な例を挙げさせていただきます。

例1:ディレクトリに読込権限はあるが実行権限がない場合
読込権限があるのでディレクトリ自体の情報は参照できるが、実行権限がないのでディレクトリの中には入れずディレクトリのリストの中身を表示できません。

実行権限を付与したら、リストの中身を取得できます。中身を追加していないのでカレントディレクトリと親ディレクトリのみです。

例2:ディレクトリに読込権限と書込権限はあるが実行権限がない場合
ディレクトリの中に入ることができないので、touch コマンドやリダイレクトを用いてファイルの作成やファイル内容の更新や削除はできない。

*ただしディレクトリ中に入る必要がないので、ディレクトリ名の変更はできる。

実行権限を付与したら、ファイルの作成やファイル内容の更新や削除ができるようになりました。今回は「>」 を用いて文字列の標準出力先を指定ファイルにリダイレクト(宛先ファイルが存在しなければ新規作成/存在すれば上書き)を行い、「>>」 を用いてファイルの中身へ追記を行いました。

例3:権限のないファイルの削除
sample2 ディレクトリ : 読込権限と書込権限と実行権限がある。
sample2/sampleA.txt : 読込権限と書込権限と実行権限がない。
この状態でファイルの削除をしようとすると…削除ができてしまうんです!

グループやその他のユーザでも同様なので、ファイル自体のパーミッションを適切に設定していても、ディレクトリのパーミッション次第でファイルの削除ができてしまいます…
例:
sample2 ディレクトリ :所有者 linuc グループ linuc
sample2/sampleA.txt : 所有者 linuc グループ linuc

適切なパーミッション管理のために、特殊なパーミッションを使用することができます。

〇特殊なパーミッション

・Sticky Bit

設定方法:パーミッション指定で1000番台を指定またはその他ユーザの権限に「t」を付与する。
例:
sample2 ディレクトリ : 読込権限と書込権限があり、実行権限にSticky Bitが設定されている。
sample2/sampleB.txt : 読込権限と書込権限と実行権限がない。
Sticky Bitを設定したディレクトリ内は、root権限ユーザまたは作成したユーザーのみが削除できる。

sudo コマンドを用いればrootユーザでなくても削除することは可能です。
sudo コマンドを使用可能かはユーザが「wheel」グループに所属しているかどうかで確認できます。「wheel」グループに所属していない場合、sudo コマンドを使用できません。

rootユーザで「wheel」グループに所属を追加

sudo コマンドでStick Bitを設定しているディレクトリ内のファイルを削除

パーミッションを設定する際はファイルやディレクトリだけでなく、ユーザのグループにも注意が必要です。

Sticky Bitを設定してあるファイル・ディレクトリを探したい場合
$find / -user root -perm -o=t -type f 2>/dev/null

その他の特殊なパーミッション
・SUID(Set User ID)
プログラムが実行されると、そのファイルの所有者の権限でユーザーが実行されるようにする。実行権限がある場合は「s」、実行権限がない場合は「S」で表記される。
設定方法:パーミッション指定で4000番台を指定またはユーザーの権限に「s」または「S」を付与する。

例:passwd コマンドファイルのSUID
passwd コマンドを用いてパスワードを設定すると /etc/shadow ファイルに変更後のパスワードを書き込みを行います。passwd コマンドを用いる場合、root権限でのみ/etc/passwd ファイルと /etc/shadow ファイルへの書き込みができます。(*ディストリビューションによってパーミッションは異なる場合があるので注意してください)

SUIDを剥奪して passwd コマンドでパスワードを設定しようとすると、/etc/passwd ファイル と /etc/shadow ファイルへの書き込み時にエラーが発生します。(rootユーザまたはsudo コマンドを用いるとエラーは発生しません)

SUIDを付与すると正常にパスワードを設定できるようになりました。

SUIDを設定してあるファイル・ディレクトリを探したい場合
$find / -user root -perm -u=s -type f 2>/dev/null

・SGID(Set Group ID)
ファイルが実行されると所有グループ権限でユーザーが実行できるようにする。
設定方法:パーミッション指定で2000番台を指定またはグループの権限に「s」を付与する。
SGIDを設定したディレクトリ内でファイルを作成すると、作成されたファイルのグループにディレクトリのグループが自動的に設定される。
例:
SGIDが設定されたディレクトリ名: sample3
SGIDが設定されたディレクトリのグループ名: yoshioka
ログインユーザ名: linuc

SGIDを設定してあるファイル・ディレクトリを探したい場合
$find / -user root -perm -g=s -type f 2>/dev/null

〇デフォルトパーミッションの設定

デフォルトパーミッションとはコマンドで明示的にパーミッションを指定せずにファイルやディレクトリを作成した際に付与されるパーミッションのことです。基本パーミッションからマスク値を引くことで設定されます。

・umask コマンド
umask コマンドでマスク値を表示・設定することができます。

基本パーミッションからマスク値を引いた値がファイルやディレクトリ作成時のデフォルトパーミッションです。

ファイルディレクトリ
基本パーミッション666(-rw-rw-rw-.)777(drwxrwxrwx.)
マスク値022022
デフォルトパーミッション644(-rw-r–r–.)755(drwxr-xr-x.)

・デフォルトパーミッションの変更

例1:このシェルセッションでのデフォルトパーミッションを変更したい場合
umask コマンド 実行する
8進数でマスク値で指定する。

シンボルでマスク値を指定する。シンボルは8進数に変換され後に各基本パーミッションから引かれます。

例2:ユーザごとにのデフォルトパーミッションを変更したい場合
変更したいユーザのホームディレクトリ/.bashrc のumask値を変更する。
変更前

変更
$vi ~/.bashrc で個人設定ファイルを開き、umask コマンドを追加して保存し、再度読み込む。

変更後
変更したユーザ(ユーザ名:linuc)のマスク値は0111に変更されているが、変更していないユーザ(ユーザ名:yoshioka)のマスク値は0022のままである。

例:3ユーザ全体のデフォルトパーミッションを変更したい場合
/etc/login.defs のumask値を変更する
変更前
$sudo vi /etc/login.defs

変更

変更後
すべてのユーザーのデフォルトパーミッションが0111に変更されている。(rootユーザのマスク値も変更になっているので使用する際は注意が必要だと思われます)

終わりに

自分がLinuxに苦手意識を持ったきっかけがこのパーミッションだったのですが、取り組んでみるとと理解できる部分が意外と増え苦手意識が少し薄れたと感じています。だれてしまわないように目標を設定して、Linuxやサーバ・インフラ関係のインプットとアウトプットを続けていきます!

3度目の基本情報技術者試験を終えて

2024年4月入社の吉岡です。今年の初めに入社して初めて案件にアサインして頂き、必死になっていたらいつの間にか春でした。右も左も分からない状態から少しずつ理解できることが増えるとやりがいを感じ、「もっと理解できることが増えたらもっと充実感を得られるだろう!」と思うようになりました。
そこで昨年度の目標であり未達成に終わってしまった基本情報技術者試験の取得に再度挑戦してきました。自分は情報処理系専門学校(夜間部)の2年次から資格取得に取り組んできましたので、2年間分の反省をしつつ基本技術者試験そのものについてと取得に向けてどのような取り組みをしてきたかについて記事にさせて頂きます。

基本情報技術者試験とは

ITを活用したサービス、製品、システム及びソフトウェアを作る人材に必要な基本的知識・技能をもち、実践的な活用能力を身に付けた者を対象とした国家試験です。基本情報技術者試験は情報処理技術者試験の試験区分のひとつであり、スキルレベル2に位置づけられています。ITの安全な利用を推進する情報セキュリティマネジメント試験(スキルレベル1)や応用的な知識・技能を測る応用技術者試験(スキルレベル3)、各分野の専門知識が問われる高度試験(スキルレベル4)があります。
下記に基本情報技術者試験の受験に関する情報をまとめておきます。

  • 受験に必要な資格はない
  • 比較的安価な受験料(税込7500円 2025/04/30 時点)
  • 通年で試験を実施されている(再受験の場合は前回の受験から30日後)
  • 試験方式は原則CBT方式(全国の試験会場を選択し会場のあるコンピュータ上で実施)
  • 科目A試験と科目B試験を同日受験しそれぞれ60%以上の得点で合格(科目A試験免除制度*を利用する場合を除く)
  • 試験終了後採点結果が画面に表示され、受験の翌月にIPAのウェブサイトに合格者が発表される
  • 取得後の更新期限がない

*科目A試験免除制度はIPA(情報処理推進機構)が認定した所定のカリキュラムの受講を修了し、かつIPAが提供する修了試験に合格することで科目A試験免除になります。この制度を利用することで科目A試験と科目B試験の同日受験をせずによくなりますが、カリキュラムの受講費用および免除試験の受験費用が掛かります。

試験内容について

〇科目A試験(90分 60問)
ITに関する幅広な知識を測る試験で、テクノロジ分野とマネジメント分野とストラテジ分野から計60問が出題されます。

  • テクノロジ分野(約70%)
    回線の使用率計算やビット計算などの基礎理論・コンピュータの仕組み・ネットワークの仕組みなどに関するITの仕組みや技術について問われます。
  • マネジメント分野(約10%)
    プロジェクトマネージメントやサービスマネジメント、システム監査などに関するプロジェクトやサービスのPDCAサイクルについて問われます。
  • ストラテジ分野(約20%)
    システム戦略や企業活動、法務などに関するITと企業の関わりについて問われます。

〇科目B試験(100分 20問)
アルゴリズム分野に関する問題が16問とセキュリティ分野に関する問題が4問出題されます。

  • アルゴリズム分野
    行うデータ操作についての説明がなされそれを実現するプログラムの穴埋めまたは処理後の結果について出題されます。
  • セキュリティ分野
    情報セキュリティの確保に関する問題が出題されます。

**2023年4月以降CBT方式となり出題された問題の公開がされなくなりました。2024年10月以降はシラバスが改訂され、情報セキュリティに関する用語(例 PCI DSSやSOC など)やビジネスインダストリに関する用語(例 生成AIやハルシネーション など)が追加され、出題範囲が広がりました。

試験対策について

〇科目A試験対策

対策テキストで内容をじっくり把握し、過去問道場で実際に出題された問題を解いて理解を深めていくやり方が効率的だと思います。
自分は最初に問題集付きの基本情報技術対策テキストを購入したのですが、学習を始めたころは説明が不足で理解するのに時間がかかり、学習を進めていくうちに内容が物足りないと感じるようになりました。説明に比重を置いている対策テキストをお勧めします。

加えて自分はITや情報処理についての知識不足ゆえに理解が進まない箇所が多くあったので、より広く浅く学ぶためITパスポートのテキストを購入して取り組みました。ITパスポートの取得をしてから再度基本情報技術者試験の対策テキストに取り組むとスムーズに内容を理解できるようになりました。基本情報の対策に取っつきにくいと感じている場合は、ITパスポートのテキストや過去問を参考にしてはどうでしょうか。

科目A試験は必要とされる知識の範囲が広いので学習しても忘れてしまう箇所が出てくると思いますが、何度も復習をすることが近道だと思います。自分はシラバスを単語帳代わりにたびたび復習を行うようになって知識が定着しやすくなったと感じました。(基本情報技術者試験(レベル2)シラバス)

〇科目B試験対策

  • アルゴリズム分野
    いかに素早く処理をトレースできるかが鍵です。説明文で「この値を操作を行ったらこういう結果になった」と示されていればそれをアルゴリズムにあてはめ、示されていなくても自分で値を設定してアルゴリズムを追いかけるやすくなります。
    科目A試験の範囲であるデータの構造(例 木構造、キュー、スタック など)やデータの操作方法(例 二分探索、バブルソート、逆ポーランド記法 など)の知識がないと解答時間が足りないと思います。逆にデータの構造やデータの操作方法ごとの特徴を知っていると、ほとんどトレースせずに解けてしまう問題もありました。
  • セキュリティ分野
    「こういうシステム体制の企業があり、どのようなセキュリティ対策がとれるか」のような出題のされ方が多く、科目A試験の知識があれば解答できる問題です。
    説明の文章は長めなので、先に問題文と選択肢を確認してから説明文を読むとキーになる箇所が確認しやすいと思います。また完全に自分の好みなのですが、セキュリティの問題を解いてからアルゴリズムの問題に解く方が心理的に楽でした。

自分の試験結果

1回目(入社前) 科目A:620点/科目B:410点/結果:不合格
2回目(昨年度) 科目A:550点/科目B:715点/結果:不合格
3回目(今年度) 科目A:810点/科目B:685点/結果:5月中旬結果公開

実際どのくらい実務に役立つか?

基本情報技術者試験の資格が直接実務の役立つ機会は少ないと思います。独占業務がなく取得者も多く実務にあたってより専門的な知識・技能を身に着ける必要があるからです。
資格取得そのものが目的というよりも、プログラマ・エンジニアとしての成長を加速させてくれる土台作りのために資格取得を目指すことは無駄でないと思います。実際に案件にアサインされるようになって「大まかに仕組みや流れがイメージできる!」「この部分が問題なのは…ここら辺がネックになっているのかな?」というような機会がありましたし、少なくとも根気強さは身につきました。

おわりに

ITや情報処理に触れはじめて3年が経ちました。何度も挫折をしつつ、いろいろな方の手助けしていただき励ましていただき何とかやっていけています。体力と単純記憶力があるうちに、応用的な試験やインフラに関するような知識・技能・資格を身に着けてより充実した日々を送っていきます!