20210613のLinuxに関する記事は8件です。

[Linux初心者] ファイルの読み取り権限があるのに読めない

はじめに Linux初心者の私が、ファイルやディレクトリの権限について分かりにくかった点をまとめました。 つまづいた点 user_aの所有するファイルを別のユーザー(user_b)から読み取ってみます。 該当ファイルはtempディレクトリにあり、他のユーザーからも読み取れるように権限が設定されています。 user_a@raspberrypi:/home $ ls -l /home/user_a/temp 合計 4 -rw-r--r-- 1 user_a user_a 10 6月 13 19:36 file tempディレクトリにも読み取り権限が設定されています。 user_a@raspberrypi:/home $ ls -l /home/user_a 合計 4 drwxr-xr-- 2 user_a user_a 4096 6月 13 20:08 temp この状態で、別のユーザー(user_b)から同ファイルを読もうとするとエラーとなります。 user_b@raspberrypi:~ $ cat /home/user_a/temp/file cat: /home/user_a/temp/file: 許可がありません 何が問題だったのか? tempディレクトリの権限を変更して、別のユーザーに(読み取り権限に加えて)実行権限を与えてみます。 user_a@raspberrypi:/home $ chmod 755 /home/user_a/temp user_a@raspberrypi:/home $ ls -l /home/user_a 合計 4 drwxr-xr-x 2 user_a user_a 4096 6月 13 20:08 temp この状態なら、別のユーザー(user_b)から同ファイルを読むことができます。 user_b@raspberrypi:~ $ cat /home/user_a/temp/file aaabbbccc つまり、ファイルを読むためには、同ファイルの置かれたディレクトリに実行権限が必要だということになります。 追加で検証 次にtempディレクトリの権限を変更して、別のユーザーには(読み取り権限は与えず)実行権限だけを与えてみます。 user_a@raspberrypi:/home $ chmod 751 /home/user_a/temp user_a@raspberrypi:/home $ ls -l /home/user_a 合計 4 drwxr-x--x 2 user_a user_a 4096 6月 13 20:08 temp この状態でも、別のユーザー(user_b)から同ファイルを読むことができます。 user_b@raspberrypi:~ $ cat /home/user_a/temp/file aaabbbccc まとめ ファイルを読み取るためには、同ファイルの読み取り権限に加え、同ファイルの置かれたディレクトリの実行権限が必要です。 また、ファイルへの書き込みについても同様のことが成り立ちます。 ファイルに書き込みをするためには、同ファイルへの書き込み権限に加え、同ファイルの置かれたディレクトリの実行権限が必要です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxで行番号を付けてファイルを表示させる

行番号を付けてファイルを表示させる方法としては、catコマンドのオプションかnlコマンドがある 空行に番号を付ける場合と付けない場合を整理しておく テスト用ファイル # cat file あいうえお かきくけこ さしすせそ 空行に番号を付ける場合 # cat -n file 1 あいうえお 2 3 4 かきくけこ 5 6 7 さしすせそ # nl -b a file 1 あいうえお 2 3 4 かきくけこ 5 6 7 さしすせそ 空行に番号を付けない場合 # cat -b file 1 あいうえお 2 かきくけこ 3 さしすせそ # nl file 1 あいうえお 2 かきくけこ 3 さしすせそ # nl -b t file 1 あいうえお 2 かきくけこ 3 さしすせそ 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

uniqコマンド基本

uniqコマンドについて確認 テスト用のファイルを用意 # cat file aaa aaa bbb ccc ddd ddd オプションなしでコマンド実行すると重複行は一つの行にまとめられる # uniq file aaa bbb ccc ddd -uオプションを使用してコマンドを実行すると重複していない行のみ表示される # uniq -u file bbb ccc -dオプションを使用してコマンドを実行すると重複している行のみ表示される # uniq -d file aaa ddd
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UbuntuでSSDを完全消去(Secure Erase)する

概要 Linuxコマンドを用いて,SATA接続のSSDのデータを二度と復元できないように完全消去する方法について紹介します. 注) Secure EraseはSSD内部で行われる操作のため失敗すると最悪の場合SSDが文鎮化します.くれぐれも自己責任でお願いします. 検証環境 OS Ubuntu Desktop 20.04 LTS SSD SANDISK SDSSDH3-1T00-G25 はじめに (方法だけを知りたい方は飛ばしてください) SSDにゼロ埋めは意味がない 一般に,OS上でファイルを削除したとしてもディスク上ですぐに消えるわけではない1 ことはご存知かと思います. そこで,ディスクを破棄するとき・他人に譲るときなどは情報漏えいを防ぐためにディスクの完全消去を実施する必要があります. HDDの場合は以下のように全てのセクタに0を書き込む作業(通称ゼロ埋め)をすれば解決します. ゼロ埋め dd if=/dev/zero of=/dev/sda しかし,SSDはブロック単位でデータを扱うのでHDDと仕組みが異なる上に,ウェアレベリングというSSDの寿命を向上させるための技術2 が搭載されているため,上記のような方法では正しく上書きできません. このため,近年のSSDにはSSD自らデータの完全消去を行うための仕組みであるSecure Eraseが搭載されています. Secure Eraseのしくみ Secure EraseはSSDに内蔵された機能であり,これを外から呼び出すことによって使用します. SSDのコントローラの内部には「どの位置にどのデータを記録したか」の対応を記憶しておくマッピングテーブルと呼ばれるものが搭載されています. Secure Eraseの実行命令が来ると,SSDはこのマッピングテーブルを消去することによってフラッシュメモリに保存されたデータの読み取り方を忘れ,解読ができない状態にします.また,Enhanced Secure Erase3 に対応したSSDの場合は,ウェアレベリングを解除した後に全ブロックを消去することができます. 作業手順 1. 準備 まず,SSDをUSB-SATAなどの変換端子を用いずにSATAケーブルによってマザーボードに直接マウントします.4 ターミナルにおいてls -l /dev/sd*を実行し,目的のSSDのデバイスファイルを確認してください.以下では/dev/sdbであったものとして進めます. 次に,SSDの状態を確認するため,以下のコマンドを実行します. SSDの情報を出力 hdparm -I /dev/sdb すると以下のような出力を得ます. hdparmの出力 /dev/sdb: ATA device, with non-removable media Model Number: SANDISK SDSSDH3-1T00-G25 Serial Number: XXXXXXXXXXXXX Firmware Revision: XXXXXXX Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0 Standards: Used: unknown (minor revision code 0x0110) Supported: 8 7 6 5 Likely used: 8 (中略) Security: Master password revision code = 12345 supported not enabled not locked frozen not expired: security count supported: enhanced erase 2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT. 上記の最後にある"Security"に注目してください.それぞれの項目の意味は, enabled: SSDのセキュリティ機能がONになっているかどうか frozen: SSDがSecure Eraseが実行できないように保護されているかどうか locked: SSDがパスワードでロックされているかどうか supported: enhanced erase : 表示される場合はEnhanced Secure Eraseに対応している x min for ~: Secure Erase, Enhanced Secure Eraseにかかる時間の予想 となっています.Secure Eraseは,悪意あるプログラムなどに勝手に実行されないために通常状態では制限がかかっており,まずはこの制限を解除する必要があります. 実際に今回の出力ではSSDがfrozenになってしまっています.これは一旦Ubuntuをサスペンドして再びログインすることで解除できます. サスペンド sudo systemctl suspend 復帰したら再びhdparm -I /dev/sdbを実行し,not frozenとなっていることを確認してください. 2. 消去の実行 まずはSSDにパスワードを設定する必要があります.正常にSecure Eraseが完了した場合はこのパスワードは消去後にリセットされるため適当なものでOKです. パスワード設定 hdparm --user-master u --security-set-pass <パスワード> /dev/sdb 成功すると以下のような出力を得ます. パスワード設定完了 security_password=<パスワード> /dev/sdb: Issuing SECURITY_SET_PASS command, password=<パスワード>, user=user, mode=high hdparm -I /dev/sdbを実行し,Securityがenabledとなっていることを確認してください. 最後に,1. で確認したSSDの機能に応じて,Secure EraseかEnhanced Secure Eraseを開始します. SecureEraseの実行 hdparm --user-master u --security-erase <パスワード> /dev/sdb EnhancedSecureEraseの実行 hdparm --user-master u --yes-i-know-what-i-am-doing --sanitize-block-erase <パスワード> /dev/sdb あとは終了するのを待ちます.Enhanced Secure Eraseの場合は 進捗状況確認 hdparm --sanitize-status /dev/sdb を実行することで進捗が確認できます. これでディスクは一切復元できなくなりました.お疲れ様でした. ハマったところ SSDにパスワードを設定できない hdparm --user-master u --security-set-passを実行すると, パスワード設定時のエラー SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 ...(略) なるエラーが出てうまく設定できませんでした. SSDをSATA-USB変換ケーブルを使わずに直接接続することで解決しました. Secure EraseしたSSDが認識されなくなった Secure Eraseを実行したあと変換ケーブルを用いてWindowsにUSB接続したところ,デバイスマネージャからは見えるものの"ディスクの管理"では表示されませんでした.Linuxマシンに接続し直して起動後dmesgコマンドを実行すると カーネルログ (略) Buffer I/O error on dev sdb, logical block 0, async page read ssd I/O error, dev sdb, sector 0 op 0x0:(READ) flags 0x0 phys_seg (略) のようなI/Oエラーが大量に出ていました. SSDがロックされているためロックを解除し,セキュリティ設定をOFFにする必要があります. 念の為hdparm -I /dev/sdbとしてSSDがlockedになっていることを確認した後, ロック解除&セキュリティ無効化 hdparm --user-master u --security-unlock <設定したパスワード> /dev/sdb hdparm --user-master u --security-disable <設定したパスワード> /dev/sdb とすることでアクセスできるようになりました. (Secure Eraseの終了後にパスワードが自動で解除されないことがあるようです) 番外編: この記事を書くときにハマったところ Qiitaにおいて注釈は[^5]のように書くことで右上に緑色で表示されます5が,この記事を執筆中はなぜかそのまま[^5]と記事中に表示されていました.細かく編集しながら様子を見たところ,複数行のコードブロック中に~~中略~~のように波線に囲まれた文字列を別行立てで書くと注釈文字としての設定が解除されてしまうようです.30分返せ 株式会社バッファロー,データ復旧はなぜ可能?データ消去はなぜ必要?HDDのデータ保存と削除の仕組み, https://www.buffalo.jp/topics/trouble/detail/recovery_0039.html ↩ 株式会社ジャングル,SSDデータ消去の仕組みについて,https://www.diskdeleter.jp/ssd-process/ ↩ sanitizeとも呼ばれます. ↩ Secure Eraseは本来USB-SATA接続でもできるようですが,私の環境ではエラーが出てしまいうまく行きませんでした. ↩ 正しい注釈です. ↩
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Linux]シンプルなシェルスクリプトまとめ

はじめに シェルスクリプトについて学びましてので簡単にまとめていきます! なお、より詳しい内容や文法については、また後日まとめるつもりです。 今回は、「シェルスクリプトってなんだろう」レベルを「なんとなくわかった」レベルにすることを目的としている点をご了承ください。 シェルスクリプトとは シェルスクリプトとは、シェルのコマンドラインをあらかじめ記述しておくファイルのことです。どんなコマンドであっても、毎回入力することなくファイルさえ読み込ませれば簡単に実行することができます。また、ミスを減らすことも可能です。 どのシェルで書けばいいのか 結論、shではなくbashで書くことがおすすめです。 現代のLinuxではほぼデフォルトでbashがインストールされてます。bashで書かれたシェルスクリプトは高い互換性・移植性をもつ上に、便利な機能がたくさん用意されています。そうした観点からも、特段の理由がなければbashで書くことがおすすめです。 シェルスクリプトの作成 それでは実際に作成していきます。 まずはhomesize.shというファイルを作成し、以下のように記述します。 homesize.sh #!/bin/bash du -h ~ | tail -n 1 とりあえず解説は後にして、このファイルに実行権限をつけましょう。 terminal % chmod +x homesize.sh これで実行権限がつきました。 では実行してみましょう。 terminal % ./homesize.sh 12M /home/tochikawa なお、ファイル名で指定する際は、ファイル名の前に./をつけますので注意してください! 実行形式 さて、とりあえず実行まではできました! でも理解はまだですね、解説します。 homesize.sh #!/bin/bash du -h ~ | tail -n 1 さきほど、ファイル名を指定して実行した。すると、Linuxカーネルは記述された#!/bin/bashという一文から「このシェルスクリプトは/bin/bashで動かします」と言う宣言を読み取り、それ以下のコマンドを実行します。 なお、この宣言の一文をシバンといいます。 このシバンがあるおかげで、実行の際にいちいち、 terminal % /bin/bash ./homesize.sh とする必要はなくなるわけです。 その他実行方法(sourceコマンド) 実は、他の方法でも実行することができます。 例えば、sourceコマンドを使えば以下のようなシバンがない記述でも実行が可能です。 homesize.sh du -h ~ | tail -n 1 sourceコマンドは、指定したファイルの内容をそのままコマンドラインに入力したときと同じように実行します。なお、sourceコマンドはあくまで記述したファイルの内容を一行づつシェルに読み込ませているだけで、ファイル自体は読み込んでないので、実行権限は不要です。また、sourceコマンドで実行したコマンドはカレントシェルに影響を与えるため注意が必要です。(例えば、アイリアスの設定がシェルスクリプトに書かれていたとして、sourceコマンドを実行した後、そのエイリアスの設定はずっと有効になります。) なんでそんなことが起きるのかというと、soruceコマンドではカレントシェルでシェルスクリプトが実行されるのに対して、ファイル名で実行した場合はサブシェルで実行されるためです。サブシェルは現在のシェルから起動される子プロセスのシェルでカレントシェルとは別物であるため。環境変数の変更を引き継ぎません。 自分だけのシェルスクリプトの置き場を作る 今後様々なシェルスクリプトを作ると思います。その際に、cd,lsのようなコマンドみたいにできると便利ですよね。 というわけで、独自コマンドを作ってみます! terminal % mkdir ~/bin % mv homesize.sh ~/bin #サーチパスに~/binを追加 % PATH="$PATH:~/bin" #設定を有効化 % source ~/bish_profile このようにすると、あたかも通常のコマンドのように実行できます terminal % homesize.sh おわりに 次回はもっと詳しく解説したいと思います!!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

CIFS SAMBAでfstabに設定したのに書き込めない時に見るページ

フォルダを writable = yes writeable = yes としているか?同じようで違う単語、機能は同じなのかまでは調べていない。 fstabでマウント設定を書いた後、mount -aでcifsは前のマウントをumountしてくれない。手動でumountすべし。その後、再度mount -aや。 例: sudo umount /mnt/cifs sudo mount -a
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SSHのパブリックキー認証でパスワードを要求される

SSHログインでパスワードが求められる! ある計算機(クライアント)から別の計算機(サーバー)へSSHでログインする際にパスワード入力を省略するために,クライアントのユーザーのRSA公開鍵をサーバー側の ~/.ssh/authorized_keys に追加したけれど,相変わらずパスワード入力を求められる。 ~/.ssh/authorized_keys のパーミッションは 600 に,~/.ssh/ は 700 にしている。 原因 原因は,サーバー側計算機の当該ユーザーのホームディレクトリそのもののパーミッションが 777 となっていたこと。これを 755 としたらパスワード入力なしでログインできるようになった。 環境 ・CentOS 7.5 Qiita,ssh の man ページを含め調べてみたが,この情報は見当たらなかったので書いておく。 → sshd (8) の man ページに記述があった。( angel_p_57 さんよりコメント,ありがとうございます。) リンク ・Qiita: 「SSHの公開鍵ってなに?」の「公開鍵の登録」の章
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Linux入門】LinuC level1【勉強方法~私の場合】

Linux初心者がLinuC level1に合格できた話 IT転職を目指して、Linux初心者がLinuC level1を受け 101試験 102試験に合格し、無事LinuC level1を取得できました。 勉強期間は101、102それぞれ約3週間の計約6週間です。 LinuCの紹介 LinuCはLPI-JAPANが認定しているLinux技術者のための資格です。 LinuCには大きく3つのレベルに分かれており、下から LinuC level1 (101,102) →主に物理/仮想Linuxサーバーの構築と運用に関する知識 LinuC level2 (201,202) →仮想マシン・コンテナを含むLinuxシステム、ネットワークの設定・構築についての知識 LinuC level3は3つの独立した試験 300 303 304 から構成され、それぞれより専門的な分野に分かれています。 →300:Linux、Windows、Unixが混在するシステムの設計、構築、運用・保守 →303:セキュリティレベルの高いコンピュータシステムの設計、構築、運用・保守 →304:クラウドコンピューティングシステム(クラウド)の設計、構築、運用・保守 勉強方法 私はインフラ系のITスクールに通い、Linuxのインストールなど基本的なことを学んでから同時進行でLinuCの資格勉強をしました。 ITスクールに通わない場合は、udemyなどのeラーニングでハンズオン形式でLinuxの概要を学べば似たような勉強ができると思います。 使用教材 Ping-t (メイン教材) Linux教科書 LinuCレベル1 Version 10.0対応 (サブ教材-通称"あずき本") Linux教科書 LinuC レベル1 スピードマスター問題集 Version10.0対応 (問題集-通称"白本") Ping-tの学習順序 まずは101です。101は主題5つに分かれており、それぞれ関係する内容にまとまってます。学習順序は主題1から順番にでもいいと思いますが、私のおすすめは主題2→主題3→主題1→主題4→主題5の順番です。 理由は主題2と3がLinuxの基本的はコマンドについての問題だからです。Linux初心者にとってある程度基本的なコマンドを先に学んだほうが後の学習もスムーズにいくと思います。 さらに、いきなりPing-tをやるのではなく、学習する主題の範囲を先にあずき本で一読(あずき本も主題ごとに解説されてます)してからPing-tに入ることで、初心者でもある程度問題が解けるかと思います。 102は101が合格できればある程度基本的なことは理解できたと思うので、上から順番にあずき本を併用しつつ進めていきました。 学習計画 1週間スパンの計3週間で学習計画を組みステップアップしていきます。 101試験 1週目 あずき本を読みながらPing-tの問題を解き、ヒット100%を目指します。(ヒットとはPing-tで正解した問題に与えられるスタンプです。) 2週目 ヒット100%を達成したら、Ping-tの模試を1回受けてみます。そこで現段階の自分の理解度が分かります。そしてコンボ100%を目指します。(コンボとはPing-tで同じ問題を2回連続で正解したら与えられるスタンプです。) コンボが50%くらいから1日1回はPing-t模試をやるようにしました。 3週目 ヒット100%、コンボ100%を達成したら白本に移ります。1日、白本2主題とPing-tの模試1回以上が1日の勉強目安です。 3週目後半くらいに白本の模試を始めました。この時点でPing-tの模試は正答率90%以上は安定していました。 3週目が終わる段階で、Ping-t40レベル(全てのスタンプの獲得)、Ping-t模試正答率90%以上、白本模試正答率90%以上出せていたら合格は十分可能だと思います。また本試験の出題形式はPing-tよりも白本に近いので、白本の模試は正答率100%近く出せていればなお安心と思われます。 102試験 全体の流れは101と変わりません。しかし102試験は101試験に比べ、記述式問題が多く出る傾向にあります(目安:101は5問程度、102は10~25問程度)。 そこで活躍する教材がPing-tのコマ問です。コマ問はすべて記述式の問題集となっております。なので学習方法としては上の101試験の学習計画にその日学習してる主題のコマ問が追加される感じです。 学習する内容は多くなってしまいますが、102試験は101試験に比べ出題範囲がやや狭いのでそこまで大きな負担にはならないかなと思います。 受験してみて思ったこと Linux初心者にとって一番の障害は、学習を進めていく中である程度自走できるようになるまでだと思います。自走できるようになるまで正直自分が今なにを学習しているのか分からない。そのためにLinuCの資格勉強はうってつけだと思いました。しかしこの資格勉強もITスクールやudemyでLinuxの基本を学ぶことが前提かなと思います(独学でも十分可能だとは思いますが)。単に私がバカということもありますが、誰かに何かを学ぶということはそれくらい多くの経験値が得られるような気がします。 まとめ 今回は約2ヶ月間という勉強期間でしたが、私よりも時間を多くとれる人だったり、そもそもの頭が良い方だともっと早く取得できる難易度だと思います。 私はIT転職のためにこの資格を取得しましたが、大事なのはこの勉強で学んだことをしっかり実務で活かせることだと思うので、引き続きLinuC level2の取得を目指していきたいと思います。 本記事が私の様な、少しでも多くのLinux初心者の方たちの力になれれば幸いです。 (まとめになってない気がする・・・)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む