ぽれいんのブログ

エンジニアになるために覚えたことを日記に付けます。

Linux基本コマンド④

1.はじめに

4月からプログラミングを学んでおります。ポレインと申します。

私事ではございますが、7月からインフラエンジニアとして働くことになりました。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

Linuxの基本操作  - エンジニアへの道

Linuxの基本操作② - エンジニアへの道

Linuxの基本操作③ - エンジニアへの道

↑↑まだ見ていない方はこちらから↑↑ 

 

2.ジョブの制御

ジョブとはコマンドラインで実行したプロセスのことを指します。Linuxで生成されたプロセスには、プロセスIDが割り当てられますが、シェルから呼び出されたコマンドラインにはプロセスIDとは別にシェルによってジョブ番号が割り当てられます。

フォアグラウンドジョブとバックグラウンドジョブ

 通常、コマンドを実行した場合、フォアグラウンドで実行され、そのジョブが終了するまで次の操作はできません。しかし、プロセス上にはユーザが実行している以外のプロセスも存在しています。このようなプロセスはバックグラウンドジョブで実行されています。キーボードから入浴して実行するプロセスもバックグラウンドで起動することができます。コマンドの最後に”&”(アンパサンド)を付加することで、バックグラウンドでそのジョブを実行することができます。バックグラウンドジョブが実行されているかどうかは、”jobs”コマンドで確認できます。

less /etc/resolv.conf &
[1]12345
[1]+ 停止         less/etc/resolv.conf
jobs
[1]+ 停止 less/etc/resolv.conf

ジョブの制御

フォアグラウンドで実行したジョブをバックグラウンドに移動させることもできます。

fg %1             「%1」はジョブ番号の指定
bg %1       

※実行したコマンドが思ったより時間がかかっている場合などはフォアグラウンドジョブを【Ctrl】+【z】で一時停止させ”bg”コマンドでバックグラウンド移動させることができます。(【Ctrl】+【c】で強制で終了)

3.Linuxファイルシステム構造

 CentOSをはじめ最近のLinuxディストリビューションは多数のファイルおよびディレクトリの名前を定義したFHSに基本従っています。

ファイルのシステム構造

ディレクトリ名 用途
/ ルートディレクト
/bin

基本コマンド(cat,cp,ls等)

/boot 起動に必要なファイル(カーネル、初期RAM)
/dev バイスファイル(usb,cdrom,disk等)
/etc

設定ファイル。/etcにはバイナリファイルを配置しない

/home ユーザのホームディレクト
/lib 32bit 版のライブラリー(基本コマンドの実行に必要なライブラリ群)
lib64 64bit 版のライブラリー(64bit版はこっち)
/lost+found 破損ファイルの断片が格納される
/media リムーバブルメディア用マウントポイント(cdrom等のマウントポイント)
/mnt ハードディスク等の一時的なマウントポイント
/opt アプリケーションソフトウェアパッケージのインストール先
/proc カーネルやプロセス情報
/root root用ホームディレクト
/run 実行時の可変データ群。再起動時に消去される
/sbin システム管理用コマンドなど(ip, shutdown, reboot など)
/srv HTTP、FTP 用データが置かれている。
/sys バイスやドライバーの設定ファイルなど
/tmp 一時的なファイル(再起動時に消去される)
/usr ユーザーが使用する各種プログラムなど
/var 変更されるデータ(内容が常に変化するファイル群が格納)

 

4.特殊なビット

 パーミッションは3桁だけを使用する場合がほとんどですが実は4桁目のパーミッションが存在します。

8進数表記 記号 許可属性
4000 suid
2000 sgid
1000 sticky

suidとsgid

これらのビットは実行権限に対して付加することができます。suidとsgidが設定されたファイルを実行すると誰が実行しても実行ファイルの所有ユーザ/所有グループの権限で動作します。これにより特定のプログラムの制御化で特定のユーザ/グループ権限を与えることが可能になります。例えば所有ユーザがrootの実行ファイルにsuidビットを設定すると誰が実行してもそのプログラムは所有ユーザであるrootの権限で実行されます。そのため、不必要に実行ファイルにsuidビットを設定するとセキュリティホールになることが多くあります。

ls -l /bin/cat
-rwxr-xr-x ...
chmod 4755 /bin/cat ....元々の755に4000(suid)を設定
ls -l /bin/cat
-rwsr-xr-x ...

または

chmod u+s /bin/cat

これで一般ユーザでもrootユーザの権でcatコマンドを実行でき、/etc/shadowファイルが閲覧できるようになります。

/bin/catにsuidビットを立てたままでは、パーミッションの設定に意味がなくなりますので、元に戻しておきます。
exit
chmod u-s /bin/cat
ls -l /bin/cat
-rwxr-xr-x ...

システム中にはすでに多くの実行ファイルにsuidやsgidビットがデフォルトで設定されています。

ディレクトリに対するsgid

sgidビットは、実行ファイルだけでなく、ディレクトリに対しても設定することができます。ディレクトリに設定するとそのディレクトリ直下で作成するファイルの所有グループは全て、そのディレクトリの所有グループになります。

このビットはあるグループで共同作業したい場合、そのグループが所有グループのディレクトリを作成しそれにsgidビットを設定させておけばそこで作成したファイルは誰が作成したものであってもグループのに所属していれば編集することが可能になるため便利です。

useradd sasaki   →ユーザ佐々木を追加
useradd matsuda   →ユーザ松田を追加
passwd sasaki   →佐々木のパスワードを設定
passwd matsuda   →松田のパスワードを設定
groupadd project   →グループプロジェクトを追加
usermod -G project sasaki   →佐々木(松田)をprojectグループに
usermod -G project matsuda    所属させる(セカンダリグループ)
mkdir /tmp/project  →プロジェクトグループ共有のディレクトリを作成
chown .project /tmp/project →所有グループをrootからprojectに変更
chmod g+s /tmp/project   →projectにsgidビットを設定
ls -ld /tmp/project   →projectディレクトリの表示
drwxr-sr-x ...

sticky

ディレクトリの「その他のカテゴリ」に書込権限がある場合、そこにあるファイルは所有者以外のユーザでも削除することができます。しかし、stickyビットをそのディレクトリに設定しておくと自分にファイルは作成/削除せきても、他人の作成したファイルは削除できなくなります。(rootユーザは制限を受けません)

普通、/tmpはstickyビットが初めから設定されています。

ls -ld /tmp
drwxrwxrwt ...

5.ジョブの定期実行(cron)

 cron(クーロンとは)

定期実行を行う場合は、cronを使います。cronとは、予め指定した時間サイクルでサーバ上のプログラムを自動実行させるために機能です。時計合わせや定期的なバックアップ、暇な時間を見計らってのコンパイル作業などをcronでスケジューリングさせておくと便利です。RPMパッケージファイルでインストールしたサービスが、定期的に実行して使うサービスだと/etc/crontabファイルによって定期実行されます

vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

#run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * * root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

上4行によって、『使用するシェル』『PATH』『出力内容を送るユーザのmailアドレス』『ホームディレクトリ』の設定をし、下4行では『周期』『実行ユーザ』『実行コマンド』を設定しています。

↓↓以下書式↓↓

分 時 日 月 曜   実行ユーザ   コマンド

曜日に関しては日曜日~土曜日が0~6に対応します。

”は全てマッチします。

, ”で区切ってリストできます。

システムのcron

cron.hourly   1時間に1回実行   毎時1分

cron.daily    1日に1回実行   毎日A.M.4:02

cron.weekly   1週間に1回実行   毎週日曜日A.M4:22

 cron.monthly  1か月に1回実行   毎月A.M4:42

crontabコマンド

ユーザ毎にスケジュールしたい場合は”crontab”コマンドを使用します。

crontabオプション

-e     環境変数EDITORで設定されるエディタでユーザのcronの設定を行います。

-l      現在設定されているユーザのcronをリスト表示します。

-r       ユーザのcronを策k所します。

crontab -e

anacron

anacronはcronによって更新されていないジョブを探してきて実行します。具体的には/var/spool/anacron/cron.dailyに前回更新したタイムスタンプがあり、これをもとに動作します。anacronが起動されるのは以下の2通りの場合です。

  • 起動時に/etc/rc.d/init.d/anacronによって
  • /etc/cron.daily/0anacronによって

anacronの設定ファイル(/etc/anacrontab)

1    65    cron.daily         run-parts/etc/cron.daily

この設定ファイルはシステムが停止していた場合、システム起動後、65分後に/etc/cron.dailyにあるファイルのうち更新されていないものが実行されます。

いつ使うんだよってなる方もいたかもしれませんが、crontabがシステムの不具合により起動しなかった場合等のもしもの事態に役立ちます

6.アカウントの切り替え(sudo)

 rootユーザの制限

システム運用の場面では、特権ユーザであるrootユーザの使用に制約を設けるのが一般的です。そのため、rootユーザのパスワードを知っている人を制限することが必要になりますが、パッケージのインストール等rootの権限が必要なケースはちょくちょく出てきます。その際、一般ユーザからrootユーザへのアカウント切り替え時にセキュリティを手軽に向上させられ、運用管理に役立つ情報を出力できる”sudo”の仕組みをご紹介します。

ユーザアカウントの切り替え

一般ユーザからrootユーザの切り替え方法の代表は”su”コマンドです。

su - ユーザ名

su”コマンドを使用してrootユーザに切り替えた場合はログファイルに切り替え情報がタイムスタンプを含め出力されるので、rootユーザで直接コンソールにログインするよりも管理されていると言えます。

sudo コマンド

”su”コマンドと同様にユーザアカウントを切り替えるコマンドに、”sudo”コマンドがあります。”su”コマンドと比較して"sudo"コマンドの一番のメリットは、一般ユーザはrootユーザのパスワードを知らなくても良いということです。

sudo 何かしらのコマンド

※”sudo”コマンドでシェルを実行した場合、そのシェル上で実行したコマンドの履歴はログに残らないので注意が必要です。

※”sudo”コマンドの実行に失敗すると、SECURITY infomation… という件名のメールがローカルのroot宛に送信されます。

その他の設定

”sudo”コマンドでは入力されたパスワードは一定期間キャッシュされるようになっています。つまり、連続して"sudo"コマンドを実行する際は1度入力した後、パスワードは問われないようになっております。これは便利ではありますが、セキュリティ上のリスクでもあります。

以下を/etc/sudoersファイルに追記すればOK!

visudo
--------------以下を追記-------------
Defaults timestamp_timeout = 0
---------------ここまで--------------

 

7.システムの終了と再起動

システムを終了し電源をきるには”shutsown”コマンドに”-h”オプションを付けて実行します。(rootユーザでしか実行できません)

shutdown -h now

再起動の場合は”-r”オプションを使用します。

shutdown -r now
もしくは
reboot

 

↓↓参考↓↓

【Linuxの基礎知識】ディレクトリ構造とファイルシステムについて! | Beエンジニア

                                   以上