Linuxの基本操作④
はじめに
4月からプログラミングを学んでおります。ポレインと申します。
私事ではございますが、7月からインフラエンジニアとして働くことになりました。
転職する前はプログラミングスクールにて主にHTML、CSS、Ruby、MySQL等について学びました。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
↑↑まだ見ていない方はこちらから↑↑
<参考>↓
【Linuxの基礎知識】ディレクトリ構造とファイルシステムについて! | Beエンジニア
ジョブの制御
ジョブとはコマンドラインで実行したプロセスのことを指します。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】で強制で終了)
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 | 変更されるデータ(内容が常に変化するファイル群が格納) |
特殊なビット
パーミッションは3桁だけを使用する場合がほとんどですが実は4桁目のパーミッションが存在します。
8進数表記 | 記号 | 許可属性 |
---|---|---|
4000 | s | suid |
2000 | s | sgid |
1000 | t | 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 ...
ジョブの定期実行(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がシステムの不具合により起動しなかった場合等のもしもの事態に役立ちます。
アカウントの切り替え(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
以上