mycpen

Mycpen

记录学习历程与受益知识
github
telegram
bilibili

14_Linux基礎-ユーザーとグループ1

一。練習#

例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 なぜこのユーザーとグループを導入するのか?#

  1. セキュリティ

  2. 権限管理

  3. リソース管理

ファイルへのアクセス、読み書きを管理できる

プロセスの管理 --> 誰が管理できるか

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 がある

  • 複数のアカウントが同じグループに属することができる

image-20220812074315487

四。ユーザーとグループの関連ファイル#

アカウント関連ファイル

  • /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 番ポートが開いているとは限らない

#注:データリクエストとコマンドリクエストは同じポートではない

image-20220812080812262


十. 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
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。