一。練習#
例1
---------------------------------------------------------------------------------------------------------------------------------
menu(){
echo "1、メモリ使用状況を監視し、メモリ使用率が80%を超えた場合は警告を出す"
echo "2、ローカルネットワークのIPをスキャンし、どのIPアドレスが使用されているかを確認する"
echo "3、ファイル/etc/passwdが変更されていないかを監視し、5分ごとに監視する"
echo "4、nginxプロセスが存在するかを監視し、存在しない場合は警告を出す"
}
option_1(){
total=`free -m|grep -i mem|tr -s " "|cut -d " " -f2`
#free=`free -m|grep -i mem|tr -s " "|cut -d " " -f4`
used=`free -m|grep -i mem|tr -s " "|cut -d " " -f3`
used_rate=`echo "scale=4;$used/$total" |bc`
#used_1=`echo "$total*0.8"|bc `
result=` echo "$used_rate>0.8"|bc `
#echo $result
if (( $result == 1 ))
then
echo -e "\e[31m使用率が80%を超えました。メモリを拡張してください。無駄な損失を避けるために\e[0m"
else
echo " 何もすることはありません"
fi
}
option_2(){
for ip in `seq 255`
do
( ip_full=192.168.0.$ip
ping -c 1 $ip_full &>/dev/null && echo $ip_full >>up.txt || echo $ip_full >>down.txt
) & # 注:バックグラウンドで子プロセスを実行
done
wait # 親プロセスは子プロセスが実行を完了するまで待機
}
option_3(){
check_num=`diff /etc/passwd /lianxi/passwd |wc -l`
[[ check_num -eq 0 ]] && echo "ファイルは変更されていません" || echo "ファイルは変更されました"
}
option_4(){
pidof nginx && echo "nginxは実行中です" || echo "nginxはダウンしています"
}
menu
read -p "あなたの選択を入力してください:" option
case $option in
1)
option_1
;;
2)
option_2
;;
3)
option_3
;;
4)
option_4
;;
*)
echo "1-4を入力してください"
esac
例2:繰り返し選択
--------------------------------------------------------------------------------------------
繰り返し選択
while :
do
done
echo "#########################"
echo "1.メモリ使用率を確認する"
echo "2.ローカルネットワークのIPをスキャンする"
echo "3.ファイルが変更されているか確認する"
echo "4.nginxプロセスを確認する"
echo "5.終了"
echo "#########################"
while :
do
read -p "あなたの選択を入力してください:" options
case $options in
1)
/root/shell/mem.sh
;;
2)
/root/shell/scan_ip.sh
;;
3)
/root/shell/passwd_test.sh
;;
4)
/root/shell/ngnix_test.sh
;;
5)
echo "終了"
exit
;;
*)
echo "1-4"
esac
done
--------------------------------------------------------------------------------------------
例3:awkを使用して取得
case $options in
1)
memory_monitor(){
total=`free -m |grep Mem |awk '{print $2}'`
used=`free -m |grep Mem |awk '{print $3}'`
use_rate=`echo "scale=2;$used/$total" |bc`
result=`echo "$use_rate>0.8" |bc`
if(( $result == 1 ))
then
echo "メモリ使用率が80%を超えています!!!"
else
echo "メモリの使用状態は良好です!"
fi
}
memory_monitor
;;
二. user group ユーザーとグループ#
2.1 よく使われるコマンド#
id 確認
useradd 作成
userdel 削除
passwd ユーザーパスワードを作成
su ユーザーを切り替える
usermod ユーザー情報を変更
2.2 なぜこのユーザーとグループを導入するのか?#
セキュリティ
権限管理
リソース管理
ファイルへのアクセス、読み書きを管理できる
プロセスの管理 --> 誰が管理できるか
2.3 ユーザーとグループ#
各ユーザーには一意の UID がある
各グループにも一意の GID がある一人のユーザーが異なるグループに属することができる
一つのグループに異なるユーザーがいることができる # 注:多対多の関係ユーザーとグループ --> 権限リソース管理
ユーザーがグループに参加すると、そのグループの権限を持つことができる
デフォルトでは、ユーザーを作成すると、ユーザーと同名のグループが追加される
[root@sanchuang-linux ~]# id chenpeng # 注:idでユーザーとグループ情報を確認
uid=1030(chenpeng) gid=1030(chenpeng) グループ=1030(chenpeng)
--------------------------------------------------------------------------------------------
[root@localhost ~]# useradd sanchuang
[root@localhost ~]# id sanchuang
uid=1000(sanchuang) gid=1000(sanchuang) グループ=1000(sanchuang)
[root@localhost ~]# less /etc/passwd
[root@localhost ~]# less /home/sanchuang/
[root@localhost ~]# passwd sanchuang
ユーザーsanchuangのパスワードを変更します。
新しいパスワード:
無効なパスワード: パスワードが8文字未満です
新しいパスワードを再入力してください:
passwd:すべての認証トークンが正常に更新されました。
[sanchuang@localhost ~]$ # 注:ログイン後のデフォルト位置はユーザーのホームディレクトリ(ユーザーsanchuangでログイン)
[root@localhost ~]# less /etc/shadow # 注:shadowにはユーザーのパスワード情報が保存されている
[root@localhost ~]# less /etc/shadow
shadow shadow-
[root@localhost ~]# less /etc/passwd
passwd passwd-
[root@localhost ~]# diff /etc/passwd /etc/passwd- # 注:passwd-バックアップファイル、毎回最新の操作が一つ少なくなる
21d20 # 注:前のバージョンにロールバックできる
< sanchuang:x:1000:1000::/home/sanchuang:/bin/bash
[root@localhost ~]# diff /etc/shadow /etc/shadow- # 注:shadowd-バックアップファイル、毎回最新の操作が一つ少なくなる
21d20 # 注:前のバージョンにロールバックできる
< sanchuang:$6$dKQsah/D$6sm6owwvDEnVs8BclDWQZ7meYSaMf5Y7AofxzxwxO0PPrvzqHHVCer1G656iY2gE.sUOarUl9beKi2usYdATQ1:18571:0:99999:7:::
[root@localhost ~]# less /etc/group # 注:グループ情報を保存
[root@localhost ~]# less /etc/gshadow # 注:グループパスワード情報を保存
[root@localhost ~]# cd /home/sanchuang/ # 注:新しいユーザーを作成すると、3つの隠しファイルがある
[root@localhost sanchuang]# ls
[root@localhost sanchuang]# ls -al # 注:新しいユーザーアカウントは/etc/skelディレクトリからコピーされる
合計 12
drwx------. 2 sanchuang sanchuang 62 11月 5 10:25 .
drwxr-xr-x. 3 root root 23 11月 5 10:25 ..
-rw-r--r--. 1 sanchuang sanchuang 18 4月 1 2020 .bash_logout
-rw-r--r--. 1 sanchuang sanchuang 193 4月 1 2020 .bash_profile
-rw-r--r--. 1 sanchuang sanchuang 231 4月 1 2020 .bashrc
[root@localhost sanchuang]# cd /etc/skel/ # 注:テンプレート、コピーを作成
[root@localhost skel]# ls -al
合計 24
drwxr-xr-x. 2 root root 62 10月 6 16:33 .
drwxr-xr-x. 77 root root 8192 11月 5 10:27 ..
-rw-r--r--. 1 root root 18 4月 1 2020 .bash_logout
-rw-r--r--. 1 root root 193 4月 1 2020 .bash_profile
-rw-r--r--. 1 root root 231 4月 1 2020 .bashrc
[root@localhost skel]# less /etc/login.defs # 注:アカウントの設定情報について
# Min/max values for automatic uid selection in useradd
#
UID_MIN 1000 # 注:最大で59000のユーザーを作成できる
UID_MAX 60000
# System accounts
SYS_UID_MIN 201
SYS_UID_MAX 999
CREATE_HOME yes # 注:ホームディレクトリを作成
ENCRYPT_METHOD SHA512 # 注:ユーザーパスワードを暗号化する方法を指定
[root@localhost skel]# ls /etc/group # 注:グループにもバックアップファイルがある
group group-
[root@localhost skel]# ls /etc/gshadow
gshadow gshadow-
[root@localhost spool]# cd /var/spool/mail/ # 注:メールディレクトリ
[root@localhost mail]# ls # 注:/var/spool/mail/に同名のファイルを作成
sanchuang
[sanchuang@localhost ~]$ less /etc/shadow # 注:一般ユーザーは/etc/shadowのパスワード情報を確認する権限がない
/etc/shadow: 権限が不足しています # 注:rootユーザーのみが読み取れる
2.4 ユーザー作成に関わるファイル#
アカウント情報関連ファイル
-
/etc/passwd --> ユーザー関連情報を保存
-
/etc/shadow --> ユーザーパスワードを保存
-
/etc/passwd- と /etc/shadow- これは /etc/passwd と /etc/shadow のバックアップファイルで、常に元のファイルよりも一つ少ない操作がある
グループ関連ファイル
-
/etc/group --> グループ情報を保存
-
/etc/gshadow --> グループパスワードを保存
-
/etc/group- と /etc/gshadow- バックアップファイル
ユーザー環境のデフォルト設定
- ユーザーを作成すると、/etc/skel/ のファイルがユーザーのホームディレクトリにコピーされる
ユーザーのホームディレクトリ
- デフォルトでは /home ディレクトリに同名のフォルダが作成される
ユーザーのデフォルト属性設定ファイル
- /etc/login.defs
メールディレクトリ
- /var/spool/mail/ に同名のファイルを作成
2.5 /etc/passwd ファイルの詳細#
[root@localhost mail]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sanchuang:x:1000:1000::/home/sanchuang:/bin/bash
・使用:区切り
・フィールド1:ユーザー名
・フィールド2:パスワードプレースホルダー、通常は「x」または「*」(このファイルは誰でも読めるため、実際のパスワードは/etc/shadowに保存されている)
・フィールド3:ユーザーID # 注:-u指定
・フィールド4:ユーザーが所属する基本グループID # 注:-g指定
・フィールド5:ユーザーの説明情報 # 注:新しいユーザーには設定されていないことが一般的(-cオプション)
・フィールド6:ホームディレクトリ # 注:ホームディレクトリの絶対パス (-dオプション)
・フィールド7:ログインシェルの情報
例
--------------------------------------------------------------------------------------------
[root@localhost ~]# ls -ld /etc/shadow
----------. 1 root root 2330 11月 5 20:51 /etc/shadow # 注:一般ユーザー/グループは読み取り実行できない
[root@localhost ~]# ls -ld /etc/passwd
-rw-r--r--. 1 root root 2006 11月 5 20:51 /etc/passwd
#注:yumでインストールされた設定ファイルは一般的に/etcに置かれる
2.6 練習:システム内の uid が 1000 を超えるユーザーを見つけ、その名前、UID、ホームディレクトリ、シェルを表示#
システム内の uid が 1000 を超えるユーザーを見つけ、その名前、UID、ホームディレクトリ、シェルを表示
[root@sanchuang-linux ~]# awk -F: '$3>1000{print $1,$3,$6,$7}' /etc/passwd
chenpeng 1030 /home/chenpeng /bin/bash
#注:catを使用するのと直接awkを使用するのではメモリ消費はほぼ同じ
#注:構文:awk オプション ‘パターン+アクション’ ファイル # 注:パターンを指定しない場合は全文を取得
2.7 練習:/etc/passwd にどのようなシェル情報があるかを見つける#
/etc/passwd にどのようなシェル情報があるかを見つける
2.8 useradd の詳細#
シェル設定
[root@sanchuang-linux ~]# awk -F: '{print $7}' /etc/passwd |sort|uniq # 注:ソートして重複を排除
/bin/bash # 注:システムのデフォルトユーザーのシェル環境情報 --> 通常使用するシェル
/bin/sync # 注:メモリ内のキャッシュをディスクにフラッシュする --> Pythonのfp.flush()に似ている
/sbin/halt # 注:ログインするとシャットダウン
/sbin/nologin # 注:ユーザーはログインできない(ログインを許可しない)
/sbin/shutdown # 注:ログインするとシャットダウン
--------------------------------------------------------------------------------------------
#注:シャットダウン時にsyncを実行し、メモリ内のキャッシュをディスクにフラッシュする
[root@localhost ~]# sync
--------------------------------------------------------------------------------------------
#注:whichコマンドを使用してコマンドの絶対パスを確認
[root@localhost ~]# which sync
/usr/bin/sync
syncを実行すると、PATH変数のパスを下に探していく
/bin/bashを実行すると、現在のターミナル環境に到達する
三。ユーザーとグループの関係#
-
各アカウントには一意の UID がある
-
各グループにも一意の GID がある
-
複数のアカウントが同じグループに属することができる
四。ユーザーとグループの関連ファイル#
アカウント関連ファイル
- /etc/passwd、/etc/shadow
グループ関連ファイル
- /etc/group、/etc/gshadow
アカウントのホームディレクトリ内のファイルの出所
- 新しいユーザーアカウントを作成すると、
/etc/skel
ディレクトリからコピーされる # 注:ユーザーのホームディレクトリを初期化
デフォルトアカウントの属性ファイル
- /etc/login.defs
ユーザーの基本情報を保存するために使用される
-
ファイル位置:
/etc/passwd
-
各行は 1 つのユーザーのアカウント記録に対応
-
フィールド 1:ユーザーアカウントの名前
-
フィールド 2:ユーザーパスワード文字列またはパスワードプレースホルダー「
x
」 -
フィールド 3:ユーザーアカウントの UID 番号
-
フィールド 4:所属基本グループアカウントの GID 番号
-
フィールド 5:ユーザーの説明情報
-
フィールド 6:ホームディレクトリ
-
フィールド 7:ログインシェル情報
五。ユーザーとグループの関連ファイル#
ユーザーアカウント:
- スーパーユーザー
root
- プログラムユーザー
- 一般ユーザー
UID (User Identity,ユーザー識別番号)
- スーパーユーザー root の UID は
0
- プログラムユーザーの UID は
1-999
- 一般ユーザーの UID は
1000
以上
六。ユーザーの追加と削除#
useradd コマンド
- フォーマット:
useradd [オプション]... ユーザー名
よく使われるコマンドオプション
-u:指定UID番号
-d
:指定ホームディレクトリ、デフォルトは/home/ユーザー名
-e
:アカウントの有効期限を指定-g
:ユーザーの基本グループ名(または GID 番号)を指定-G
:ユーザーの追加グループ名(または GID 番号)を指定- -M:ユーザーのためにホームディレクトリを作成せず初期化しない
-s
:ユーザーのログインシェルを指定- -c:ユーザーの注釈説明情報
- -r: 新しいシステムユーザーを作成し、ホームディレクトリを作成しない
#注:新しいユーザーを作成するたびに、uid は前のユーザーの uid に + 1 される
#注:デフォルトでは新しいユーザーは 1001 から始まる
シェル設定
/bin/bash # 注:システムのデフォルトユーザーのシェル環境情報 --> 通常使用するシェル
/bin/sync # 注:メモリ内のキャッシュをディスクにフラッシュする --> Pythonのfp.flush()に似ている
/sbin/halt # 注:ログインするとシャットダウン
/sbin/nologin # 注:ユーザーはログインできない、sshとsuもログインできない
/sbin/shutdown # 注:ログインするとシャットダウン
例:-s /sbin/nologin
--------------------------------------------------------------------------------------------
#注:このマシンはサービスを実行するため、ログインできない
[root@localhost mail]# useradd -s /sbin/nologin sanchuang2
[root@localhost mail]# echo 123456|passwd sanchuang2 --stdin
ユーザーsanchuang2のパスワードを変更します。
passwd:すべての認証トークンが正常に更新されました。
[root@localhost mail]# ssh sanchuang2@192.168.136.136 #注:sshでローカルのsanchuang2にログイン
……………………………………
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.136.136' (ECDSA) to the list of known hosts.
sanchuang2@192.168.136.136's password:
This account is currently not available. # 注:ユーザーが到達できないことを示すメッセージ、sanchuang2のシェルがnologinであるため、直接ログインできない
Connection to 192.168.136.136 closed.
[root@localhost ~]# su - sanchuang2 # 注:切り替えできない
上回のログイン:四 11月 5 11:49:14 CST 2020から 192.168.136.136pts/2 上
This account is currently not available.
--------------------------------------------------------------------------------------------
[root@localhost ~]# usermod -s /bin/bash sanchuang2 # 注:usermod -sでユーザーのシェル情報を変更
[root@localhost ~]# cat /etc/passwd|grep sanchuang2
sanchuang2:x:1001:1001::/home/sanchuang2:/bin/bash
練習:システム内の uid が 1000 を超え、ユーザー名に sanchuang を含むユーザー情報(ユーザー名、ユーザー Id、ユーザーのホームディレクトリ)を表示#
システム内の uid が 1000 を超え、ユーザー名に sanchuang を含むユーザー情報(ユーザー名、ユーザー Id、ユーザーのホームディレクトリ)を表示
[root@localhost ~]# awk -F: '$3>1000{print $1,$3,$6}' /etc/passwd
sanchuang2 1001 /home/sanchuang2
方法1
[root@localhost ~]# awk -F: '$3>1000{print $1,$3,$6}' /etc/passwd |grep sanchuang
sanchuang2 1001 /home/sanchuang2
方法2
[root@localhost ~]# awk -F: '$3>1000 && $1 ~ /sanchuang/{print $1,$3,$6}' /etc/passwd
sanchuang2 1001 /home/sanchuang2 # 注:$1 ~ /sanchuang/でsanchuangをマッチ
七。プロセス#
プロセス:実行中のプログラム
プログラム:ディスク上にあるコードの集合
プロセスはコンピュータがリソースを配分する基本単位
プロセスの構成コア:プロセス制御ブロック(PCB)
PCB には通常以下が含まれる
1、pid プロセスの一意の識別子
2、有効ユーザー情報 -euid,egid(通常は uid,gid) # 注:プロセスがどのユーザーに属するか
3、プログラムの状態
4、プログラムの優先度
5、プログラムのコンテキスト
八. Python で os モジュールを使用して現在のプロセスのユーザー情報を確認#
Python で os モジュールを使用して現在のプロセスのユーザー情報を確認
>>> import os
>>> os.geteuid() # 注:現在のプロセスユーザーのユーザーuid情報を取得
0 # 注:0であるものはすべてrootユーザー rootユーザーのuid
>>> os.getuid() # 注:通常、uidとeuidは同じである
0
--------------------------------------------------------------------------------------------
一般ユーザーがosモジュールをインポート
[sanchuang2@localhost ~]$ python3
>>> import os
>>> os.geteuid()
1001
>>> os.getuid()
1001
[sanchuang2@localhost ~]$ id sanchuang2
uid=1001(sanchuang2) gid=1001(sanchuang2) グループ=1001(sanchuang2)
九. ftp プロトコル(ファイル転送プロトコル)#
9.1#
vsftpd サービスとローカルユーザー
ftp サービスはファイル転送を行い、指定された場所にファイルをアップロードまたはダウンロードする
ftp はファイル転送サービスで、主にファイルのアップロードとダウンロードを実現し、ファイル共有を行う
匿名ユーザーとローカルユーザーは ftp サービスにログインでき、ログイン後はホームディレクトリ内のファイルやフォルダのみを操作できる
三種類のユーザー:
1、匿名ユーザー
2、ローカルユーザー # 注:ftp 転送には Linux のローカルユーザーを使用できる;ssh ログインにもローカルユーザーを使用できる
3、仮想ユーザー
============================================================================================
1、サービスのインストール
[root@sanchuang-linux ~]# yum install vsftpd
--------------------------------------------------------------------------------------------
2、サービスを起動
[root@sanchuang-linux ~]# service vsftpd restart
Redirecting to /bin/systemctl restart vsftpd.service
[root@sanchuang-linux ~]# ps -ef |grep vsftp # 注:デフォルトでrootユーザーが起動
root 3377 1 0 14:51 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 3379 3184 0 14:52 pts/1 00:00:00 grep --color=auto vsftp
--------------------------------------------------------------------------------------------
3、クライアントのインストール
#注:centos8ではvsftpdサービスはデフォルトで匿名ユーザーのログインを許可しない
匿名ユーザー(ftp)でログインする場合は、/etc/vsftpd/vsftpd.confの設定anonymous_enable=YESを変更する必要がある
#注:設定ファイルを変更した後、vsftpdサービスを再起動する必要がある
ログインすると、デフォルトでシステム内のftpユーザーのホームディレクトリファイルを読み取る
-----------------------------------------------------
[root@sanchuang-linux ~]# yum install lftp -y # 注:lftpはvsftpdのクライアント
[root@sanchuang-linux ~]# yum install ftp -y # 注:ftpもvsftpdのクライアント
#注:これら二つはftpのクライアントである
============================================================================================
[root@sanchuang-linux ~]# lftp ftp@192.168.0.27 # 注:ftpユーザーでプログラムにログイン
パスワード: # 注:ftpはデフォルトユーザー
[root@localhost ~]# ftp 192.168.136.136 # 注:ftpサービスにログイン
………………………………
Name (192.168.136.136:root): ftp # 注:匿名ユーザーftpでログイン
331 Please specify the password.
Password: # 注:エンター
230 Login successful.
………………………………
ftp>
============================================================================================
[root@localhost ~]# cat /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin # 注:vsftpdの匿名ユーザー、公共ユーザー
#注:/var/ftpはftpユーザーのホームディレクトリファイル
============================================================================================
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf # 注:Centos8で匿名ユーザーのログインを許可する
anonymous_enable=YES # 注:centos7では設定する必要がない
#注:設定ファイルを変更した後、vsftpdサービスを再起動する必要がある
============================================================================================
ログインすると、デフォルトでシステム内のftpユーザーのホームディレクトリファイルを読み取る
/var/ftp
-----------------------------------------------------
[root@localhost ~]# cd /var/ftp/
[root@localhost ftp]# ls
pub
[root@localhost ftp]# cd pub
[root@localhost pub]# ls # 注:/var/ftp/pub/は空である
[root@localhost pub]# touch aa bb # 注:ファイルaa bbを作成
--------------------------------------------------------------------------------------------
ftp> ls # 注:現在のパス /var/ftp
…………………………
drwxr-xr-x 2 0 0 26 Nov 05 07:20 pub
ftp> cd pub
…………………………
ftp> ls # 注:ファイルaa bbを表示
…………………………
-rw-r--r-- 1 0 0 0 Nov 05 07:20 aa
-rw-r--r-- 1 0 0 0 Nov 05 07:20 bb
226 Directory send OK.
--------------------------------------------------------------------------------------------
ftp> get aa # 注:ファイルをダウンロード
local: aa remote: aa
…………………………
ftp> !ls # 注:現在のシステムコマンドでどのファイルがあるかを確認
aa addstr.py
ftp> !pwd # 注:現在のシステムコマンドのパスを確認
/root
#注:匿名ユーザーはアップロードできない
============================================================================================
[root@localhost ~]# ftp 192.168.136.136
Name (192.168.136.136:root): sanchuang # 注:ローカルユーザーsanchuangでログイン
Password:
230 Login successful. # 注:230はログイン成功を示す
--------------------------------------------------------------------------------------------
ftp> put first.py # 注:ファイルをアップロード
local: first.py remote: first.py # 注:匿名ユーザーはアップロードできない
…………………………
1097 bytes sent in 0.0157 secs (69.83 Kbytes/sec)
ftp> ls
…………………………
-rw-r--r-- 1 1000 1000 1097 Nov 05 07:34 first.py
226 Directory send OK.
============================================================================================
[root@localhost pub]# less /etc/services # 注:# less /etc/servicesでデフォルトポート番号を確認
ftp 21/tcp # 注:ftpサービスのデフォルトは21番ポート
ftp 21/udp fsp fspd
9.2 匿名ユーザーとローカルユーザーは ftp サービスにログインでき、ログイン後はホームディレクトリ内のファイルやフォルダのみを操作できる#
匿名ユーザーとローカルユーザーは ftp サービスにログインでき、ログイン後はホームディレクトリ内のファイルやフォルダのみを操作できる
三種類のユーザー:
1、匿名ユーザー # 注:匿名ユーザー ftp ; パスワード不要;ホームディレクトリ /var/ftp ; ftp もシステムのローカルユーザーで、システムが自動的に ftp ユーザーを作成し、nologin で、ftp でログインできる
2、ローカルユーザー # 注:Linux システム上のユーザー;ftp ログイン後はローカルユーザーのホームディレクトリ内
3、仮想ユーザー # 注:仮想ユーザーを作成し、ローカルユーザーにマッピングする
#注:/etc/passwd の第 6 フィールドはユーザーのホームディレクトリである
#注:ユーザーのホームディレクトリは /etc/passwd ファイルを確認する
9.3 ftp のよく使われるコマンド#
ftp のよく使われるコマンド
ftp のよく使われるコマンド:
ファイルをアップロード:put # 注:匿名ユーザーはアップロードできない
ファイルをダウンロード:get
確認:ls
パスを切り替える:cd
9.4* ftp の 2 つの動作モード#
ftp の 2 つの動作モード(面接)
質問の際:要約(ポート番号に言及する必要がある)
アクティブモードとパッシブモードはどちらも 21 番ポートを開いて接続する
違いはデータ接続の方法である
アクティブモード:サーバーが 20 番ポートを開いてクライアントとデータ接続を確立し、データを転送する
パッシブモード:クライアントがランダムに開放されたポートを取得し、サーバーにデータ転送を行う。クライアントはこのランダムポートに接続してデータを転送する
一、アクティブモード(デフォルトではアクティブモード)
1、クライアントが ftp サーバーに接続を要求する コマンド接続ポート(21 番ポート)
2、21 番ポートがログイン成功または失敗の情報を返す
3、ログイン成功後、クライアントがデータ転送を要求する(21 番ポートにリクエストを送信し、ランダムポートを開く)
4、サーバーが 20 番ポートを開いて、データをクライアントのランダムポートに送信する
サーバーが 20 番ポートを開いて、クライアントにデータを送信する
二、パッシブモード
1、クライアントが ftp サーバーに接続を要求する コマンド接続ポート(21 番ポート)
#注:21 番ポートはコマンド接続に使用される
2、21 番ポートがログイン成功または失敗の情報を返す
3、クライアントがデータ転送を要求する(クライアントがサーバーにデータ転送を要求する際、pasv コマンドを送信し、サーバーにパッシブモードでの接続を要求する。この時、サーバーはポートを開放し、クライアントにポート番号を返す)
4、サーバーが開放したポート番号を受け取る
5、サーバーのポートに接続し、データ転送を開始する(5555 番ポートに接続する)
もし 5555 が開放されている場合、サーバーは 5555 ポートを開放し、ポートはリスニング状態になり、他の人が接続できるようになる。これにより、このホストと接続を確立し、5555 番ポートを通じてデータを転送できる
#注:パッシブモードは設定が必要で、デフォルトはアクティブモード
アクティブモードでもパッシブモードでも、21 番ポートは必ず開いている必要がある
アクティブモードでは 20 番ポートが開いているが、パッシブモードでは 20 番ポートが開いているとは限らない
#注:データリクエストとコマンドリクエストは同じポートではない
十. usermod userdel#
usermod#
usermod コマンド
フォーマット:usermod [オプション]... ユーザー名
よく使われるコマンドオプション
- -l:ユーザーアカウントのログイン名を変更
- -L:ユーザーアカウントをロック
- -U:ユーザーアカウントのロックを解除
- 以下のオプションは useradd コマンドの意味と同じ
-u、-d、-e、-g、-G、-s
userdel#
userdel コマンド
- フォーマット:
userdel [-r] ユーザー名
- -r オプションを追加すると、ユーザーのホームディレクトリも一緒に削除される # 注:接続することをお勧めします
例
--------------------------------------------------------------------------------------------
[root@localhost ~]# useradd stu01
[root@localhost ~]# ls -ld /home/stu01/
drwx------ 2 stu01 stu01 4096 09-09 12:38 /home/stu01/
[root@localhost ~]# userdel -r stu01 # 注:ユーザーアカウントstu01を削除
[root@localhost ~]# ls -ld /home/stu01/
ls: /home/stu01/: そのファイルまたはディレクトリはありません
十一. useradd#
useradd コマンド
- フォーマット:
useradd [オプション]... ユーザー名
よく使われるコマンドオプション
-u:指定UID番号
-d
:指定ホームディレクトリ、デフォルトは/home/ユーザー名
-e
:アカウントの有効期限を指定-g
:ユーザーの基本グループ名(または GID 番号)を指定 # 注:基本グループは一つだけ-G
:ユーザーの追加グループ名(または GID 番号)を指定 # 注:追加グループは複数指定可能、基本グループ / 追加グループに関係なく、ユーザーはすべての権限を得ることができる- -M:ユーザーのためにホームディレクトリを作成せず初期化しない
-s
:ユーザーのログインシェルを指定- -c:ユーザーの注釈説明情報
- -r: 新しいシステムユーザーを作成し、ホームディレクトリを作成しない
十二。ユーザー#
12.1#
ユーザーアカウント:
- スーパーユーザー
root
# 注:最高権限を持つ - プログラムユーザー # 注:プログラムが実行中に使用する必要があるユーザー
- 一般ユーザー # 注:手動で作成したユーザー
UID (User Identity,ユーザー識別番号)
- スーパーユーザー root の UID は
0
- プログラムユーザーの UID は
1-999
- 一般ユーザーの UID は
1000
以上
例:mysql uid
--------------------------------------------------------------------------------------------
[root@localhost ~]# id mysql
uid=1000(mysql) gid=1000(mysql) グループ=1000(mysql)
[root@localhost ~]# id sanchuang2
uid=1001(sanchuang2) gid=1001(sanchuang2) グループ=1001(sanchuang2)
例
--------------------------------------------------------------------------------------------
#注:デフォルトではuidを指定しない場合、前のユーザーのuidに+1される
[root@localhost ~]# useradd -u 1100 chenpeng1 # 注:ユーザーidを指定
[root@localhost ~]# id chenpeng1
uid=1100(chenpeng1) gid=1100(chenpeng1) グループ=1100(chenpeng1)
[root@localhost ~]# useradd -u 1101 -g 1100 chenpeng2 # 注:ユーザーid、基本グループを指定
[root@localhost ~]# id chenpeng2 # 注:chenpeng1のグループ内にいる
uid=1101(chenpeng2) gid=1100(chenpeng1) グループ=1100(chenpeng1)
例
--------------------------------------------------------------------------------------------
[root@localhost ~]# usermod -u 1200 chenpeng2 # 注:ユーザーidを変更
[root@localhost ~]# id chenpeng2
uid=1200(chenpeng2) gid=1100(chenpeng1) グループ=1100(chenpeng1)
例
--------------------------------------------------------------------------------------------
[root@localhost ~]# useradd -d /var/log/sanchuang6 sanchuang6 # 注:ユーザーのホームディレクトリを指定
[root@localhost ~]# cd /var/log/sanchuang6/
[root@localhost sanchuang6]# ls
[root@localhost sanchuang6]# less /etc/passwd
sanchuang6:x:1201:1201::/var/log/sanchuang6:/bin/bash # 注:第6列 ユーザーのホームディレクトリ
例:追加グループを指定
--------------------------------------------------------------------------------------------
[root@localhost sanchuang6]# useradd -g chenpeng1 -G sanchuang,sanchuang2 sanchuang7
[root@localhost sanchuang6]# id sanchuang7
uid=1202(sanchuang7) gid=1100(chenpeng1) グループ=1100(chenpeng1),1000(sanchuang),1001(sanchuang2)
#注:基本グループchenpeng1 附属グループ sanchuang sanchuang2
#注:-gで基本グループを指定 -Gで追加グループを指定
============================================================================================
・-c:ユーザーの注釈説明情報
/etc/passwdの第5列で説明情報を確認できる
12.2 userdel ユーザー削除#
userdel コマンド
フォーマット:userdel [-r] ユーザー名
-r オプションを追加すると、ユーザーのホームディレクトリも一緒に削除される
例1
--------------------------------------------------------------------------------------------
[root@localhost ~]# useradd stu01
[root@localhost ~]# ls -ld /home/stu01/
drwx------ 2 stu01 stu01 4096 09-09 12:38 /home/stu01/
[root@localhost ~]# userdel -r stu01 # 注:ユーザーアカウントstu01を削除
[root@localhost ~]# ls -ld /home/stu01/
ls: /home/stu01/: そのファイルまたはディレクトリはありません
例2
--------------------------------------------------------------------------------------------
[root@localhost sanchuang6]# userdel sanchuang7
[root@localhost sanchuang6]# less /etc/passwd # 注:削除された
[root@localhost sanchuang6]# cd /home/sanchuang7 # 注:削除されていない
[root@localhost sanchuang7]# ls /var/spool/mail/sanchuang7 # 注:削除されていない
/var/spool/mail/sanchuang7
十三. usermod ユーザー変更#
usermod コマンド
フォーマット:usermod [オプション]... ユーザー名
よく使われるコマンドオプション
- -l:ユーザーアカウントのログイン名を変更
- -L:ユーザーアカウントをロック
- -U:ユーザーアカウントのロックを解除
- 以下のオプションは useradd コマンドの意味と同じ
-u、-d、-e、-g、-G、-s
例:-L:ユーザーアカウントをロック
--------------------------------------------------------------------------------------------
#注:ロックするとパスワードでログインできなくなる
#注:本質的にはshadowのパスワードの前に!マークを追加し、ログイン時にパスワード検証が失敗するようにする
[root@localhost sanchuang7]# id sanchuang6
uid=1201(sanchuang6) gid=1201(sanchuang6) グループ=1201(sanchuang6)
[root@localhost sanchuang7]# usermod -L sanchuang6 # 注:ユーザーアカウントをロック
[root@localhost sanchuang7]# less /etc/shadow # 注:パスワードの暗号文の前に1つの感嘆符が追加された
chenpeng2:!$6$P3yFUy.H$UOfUIbl8V3h1ng4J/OdVV1aWc3Cx3s5bldkysl33aDyrigsgK0VQ3nzrC4mojDNotpE9w61NbVQmZFqDDRfpl.:18571:0:99999:7:::
[root@localhost sanchuang7]# diff /etc/shadow /etc/shadow-
25c25
< chenpeng2:!$6$P3yFUy.H$UOfUIbl8V3h1ng4J/OdVV1aWc3Cx3s5bldkysl33aDyrigsgK0VQ3nzrC4mojDNotpE9w61NbVQmZFqDDRfpl.:18571:0:99999:7:::
---
> chenpeng2:$6$P3yFUy.H$UOfUIbl8V3h1ng4J/OdVV1aWc3Cx3s5bldkysl33aDyrigsgK0VQ3nzrC4mojDNotpE9w61NbVQmZFqDDRfpl.:18571:0:99999:7:::
#注:sha512暗号技術 密文 明文
--------------------------------------------------------------------------------------------
[root@localhost ~]# ssh chenpeng2@192.168.0.188
chenpeng2@192.168.0.188's password: # 注:ロックするとパスワードでログインできなくなる
Permission denied, please try again.
…………………………
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
十四. /etc/shadow#
パスワード文字列、パスワードの有効期限などの情報を保存するために使用される
-
ファイル位置:
/etc/shadow
# 注:パスワードを保存するファイルで、root ユーザーのみが確認できる -
各行は 1 つのユーザーのパスワード記録に対応
-
フィールド 1:ユーザーアカウントの名前
-
フィールド 2:暗号化されたパスワード文字列情報 # 注:フィールド 2 はパスワードを保存するフィールドで、暗号化されたパスワードが保存されている。sha512 アルゴリズムで暗号化
-
フィールド 3:最後にパスワードを変更した日付
-
フィールド 4:パスワードの最短有効日数、デフォルト値は 0
-
フィールド 5:パスワードの最長有効日数、デフォルト値は 99999
-
フィールド 6:パスワードが期限切れになる前にユーザーに警告する日数、デフォルト値は 7
-
フィールド 7:パスワードが期限切れた後にユーザーを無効にする日数
-
フィールド 8:アカウントの有効期限、デフォルト値は空
-
フィールド 9:予約フィールド(未使用)
十五. passwd#
passwd コマンド
- フォーマット:
passwd [オプション]... ユーザー名
よく使われるコマンドオプション
- -d:ユーザーのパスワードをクリアし、パスワードなしでログインできるようにする
- -l:ユーザーアカウントをロック
- -S:ユーザーアカウントの状態を確認(ロックされているかどうか)
- -u:ユーザーアカウントのロックを解除
- --stdin:他のコマンドの stdout を stdin 標準入力として受け取り、パスワードを設定する
rootユーザーはすべてのユーザーのパスワードを変更でき、複雑さは要求されない
一般ユーザーは自分のパスワードのみを変更でき、複雑さが要求される
例
--------------------------------------------------------------------------------------------
[root@localhost sanchuang7]# passwd -d sanchuang6 # 注:ユーザーパスワードをクリア
ユーザーsanchuang6のパスワードをクリアします。
passwd: 操作成功
[root@localhost sanchuang7]# useradd sanchuang5 # 注:登録 未給パスワード
[root@localhost mail]# less /etc/shadow
sanchuang6::18571:0:99999:7::: # 注:ユーザーパスワードをクリアしたため、パスワードフィールドは空
sanchuang5:!!:18571:0:99999:7::: # 注:パスワードが未給の場合、パスワードフィールドはデフォルトで2つの感嘆符
#usermodとpasswdでアカウントをロックするのは、アカウントのshadow暗号フィールド情報を変更することで、ログイン時にパスワードが一致しなくなり、ロック状態になる
#usermod -L には1つの!マークを追加 # 注:shadowのパスワードフィールドの前に!マークを追加してユーザーをロック
#passwd -l には2つの!マークを追加 # 注:shadowのパスワードフィールドの前に2つの!マークを追加してユーザーをロック
#注:ユーザーがパスワードを設定しているかどうかを確認するには、/etc/shadow情報を確認する
例:usermod -L と passwd -l でユーザーをロック
--------------------------------------------------------------------------------------------
[root@localhost mail]# useradd chen001
[root@localhost mail]# useradd chen002
[root@localhost mail]# useradd chen003
[root@localhost mail]# echo 123456|passwd chen001 --stdin
[root@localhost mail]# echo 123456|passwd chen002 --stdin
[root@localhost mail]# echo 123456|passwd chen003 --stdin
[root@localhost mail]# usermod -L chen002 # 注:chen002をロック
[root@localhost mail]# passwd -d chen003 # 注:chen003をクリア
ユーザーのパスワードをクリアします。
passwd: 操作成功
[root@localhost mail]# less /etc/shadow
chen001:$6$y……k1q.yk8U1gOGp/:18571:0:99999:7:::
chen002:!$6$u……YF0.:18571:0:99999:7:::
chen003::18571:0:99999:7:::
------------------------------------------------------------------------
[root@localhost ~]# ssh chen003@192.168.136.136 # 注:ログインできない
chen003@192.168.136.136's password:
…………
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[root@localhost ~]# ssh chen002@192.168.136.136 # 注:ログインできない
chen002@192.168.136.136's password:
…………
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[root@localhost ~]# ssh chen001@192.168.136.136 # 注:操作を行っていないため、リモートログイン成功
chen001@192.168.136.136's password:
[chen001@localhost ~]$
十六. /etc/group#
/etc/group
フィールド一:グループ名
フィールド二:パスワードフィールド
フィールド三:グループ id
フィールド四:現在のグループが附属グループの場合、どのユーザーがいるかを保存
例
--------------------------------------------------------------------------------------------
[root@localhost ~]# less /etc/group
tech:x:200:b1,b2,a1,a2