|
Linuxメモ
RHEL9 超基本
lftp(FTPSクライアント)関連
SSHとSFTP(クライアント)関連
RHEL9 ユーザー管理関連
RHEL9 セキュリティ関連
SELinux関連
RHEL9 その他の色々
Ubuntu21 on WSL2
その他古い内容
RHEL9 超基本
超基本の基本
rootになる
sudo su
または
sudo -i
sudo権限を持つユーザーが他のユーザーになる
sudo su - tomcat
他のユーザーになって指定したコマンドを実行する
sudo -u tomcat11 /home/tomcat11/tomcat/bin/startup.sh
タイムゾーン設定
timedatectl set-timezone Asia/Tokyo
|
dnfコマンドの基本的な使い方
インストール可能なパッケージを表示
sudo dnf list available | grep php
※root権限が必要。
インストール
sudo dnf install -y php php-pdo php-mbstring php-devel php-gd php-pear
インストール済のパッケージを表示
dnf list installed | grep php
利用可能な全てのセキュリティ更新を表示
sudo dnf check-update --security
利用可能な全てのセキュリティ更新をインストール
sudo dnf update --security
アンインストール ※uninstallではないので注意
sudo dnf remove mysql
|
サーバ環境の確認方法(システム全体・CPU)
RHELのバージョン確認
cat /etc/redhat-release
※CentOSだとcentos-releaseのように、RedHat系の他のLinuxの場合も確認方法は類似です。
※Debian系の場合、/etc/debian-version。またどのOSでも/etc/issueに何か書かれていることが多いです。
または
cat /proc/version
uname -a
ハードウェア情報全般の確認
sudo dmidecode
CPU情報の確認
lscpu
CPUモデルの確認
cat /proc/cpuinfo | grep "model name"
ケーパビリティ…rootが持つ権限を細かく分け、必要な物を付与できるようにしたもの。
capsh --print
今実行しているプロセスが持つケーパビリティの確認
grep Cap /proc/$$/status
カーネルConfigを検索。一例でACLに関する設定を見る
grep -i acl /boot/config*
同様に SELinuxに関する設定
grep -i selinux /boot/config*
現在のSELinux設定を確認
getenforce
起動時のSELinux設定を確認
cat /etc/selinux/config
システムが使用している名前空間の一覧を表示
sudo lsns
システムが使用しているCGROUPの一覧を表示
systemctl status
システムログを端末に流し続ける
sudo tail -f /var/log/messages
指定した期間内のジャーナルログを表示
sudo journalctl --since "1 day ago"
基本的なメトリクスの表示
uptime
プロセス負荷状態を表示
top -U user1
topだけなら全プロセスを表示する。
ファイルの詳細情報を表示
stat /path/of/hello.txt
|
サーバ環境の確認方法(メモリ)
メモリ情報を知る。Hugepagesのサイズも分かる
cat /proc/meminfo
メモリ状態
free -ht
-hは読みやすい単位で表示、-tはMem+Swap=Total行も表示
vmstat 3
引数は3秒置きに表示を更新する意味。
|
サーバ環境の確認方法(デバイス・ディスク)
ディスクの状態の確認
cat /proc/diskstats
マウント済デバイスの一覧を見る
mount
ファイルシステムをツリー形式で見る。ドライブsdaにパーティションsda1や2があるなど。
/boot/efiなどでブートパーティションがどれなのかも分かる
lsblk
ブロックデバイスのUUIDなどの情報を見る
blkid
パーティションごとのサイズや使用率を確認
findmnt -D
df -kT
ほぼ同じ表示になる。ファイルシステム種別(xfs,vfat等)はdfは-Tで表示できる。
|
サーバ環境の確認方法(ネットワーク)
ネットワークインターフェース情報を知る。eth0とかens4とか
ip link
ifconfig
ifconfigの方が古いコマンド。UP,RUNNINGと出れば運用中のインターフェースと分かる。
ルーティング情報を表示
sudo route -n
sudo ip route
使用しているソケットの一覧
ss -s
|
bashスクリプトの望ましい書き方
! /usr/bin/env bash
set -o errorexit
set -o nounset
set -o pipefail
arg=${1:defaultValue}
...
|
それぞれ
- エラーがあったらスクリプト全体を終了する
- 設定されていない変数の参照はエラーにする
- pipeの途中のコマンドがエラーを返したら停止する
の意味です。なお、以下もほぼ同義で、この方が短く書けて慣例になっているようです。
lftp(FTPSクライアント)関連
一度に1ファイルだけputするlftpコマンドを1行で書きたい
このように-eの中に複数のFTPSコマンドを記述できます。
lftp -u ユーザー名,パスワード ftps://ホスト名:ポート \
-e "set ftp:ssl-force true; set ftp:ssl-protect-data true; put /ローカル/パス/ファイル名 -o /リモート/ディレクトリ/ファイル名; bye"
# sftpでもmputでもこのように可能です。
lftp sftp://ruser01:${PASSWORD}@ftpserver1 -e "mput /home/user01/*.gz; bye"
|
lftpを自動スクリプトで行う
lftpコマンドで対話的なやりとりをせず、全自動でファイルの送受信をするには、 次のようなシェルスクリプトを書けばOKです。
% lftp >> $LOGFILE 2>&1 << EOF
open ftpserver1.nsnhnkmmkk.co.jp:2121
user user1 pass1
lcd "/path/of/local/dir"
cd "path/of/remote/dir"
bin
put local_file.dat remote_file.dat
dir remote_file.dat
quit
EOF
|
または、user行の代わりにopenの中に「-u user1,pass1」と書く方法も可能です。
lftpの中で複数のリモートファイルをグロブ指定でサブディレクトリに移動させたい
FTPのrenコマンドはグロブ(ワイルドカード)に対応していませんが、
lftp独自のmmvというコマンドで可能です。
ただし「移動しつつ改名」はできません。あくまで移動のみが可能です。
lftpでサブディレクトリがない場合のみmkdirしたい
FTPの標準では、mkdir対象のディレクトリが既に存在する場合はエラーになってしまいます。
これに対して、lftpでFTPSのサーバに接続する場合はmkdirの代わりに「mkdir -p」
とすれば、対象のディレクトリが存在する場合は何もせず、エラーにもなりません。
lftpでSFTPのサーバに接続する場合は「mkdir -p」も使えませんが、
代わりに下のように、lsコマンドとORで連結することで、
lsがエラーを返す場合、つまりディレクトリがまだ存在しない場合のみmkdirする、という処理が可能です。
ls subdir1 || mkdir subdir1
|
lftpでサブディレクトリ名だけを指定してputしたい
putコマンドでリモートのサブディレクトリを付けてputしたい場合は、
put data1.txt subdir1/data1.txt
|
と指定します。プログラム処理上の都合でリモートのサブディレクトリを省略したい場合、単に
としてもうまくいきません(これはローカルのdata1.txtとsubdir1の2つのファイルをリモートにputしようとします)。
正しくは-oオプションを付けて
put data1.txt -o subdir1/
|
これなら、リモートの subdir1/data1.txt に putされます。
SSHとSFTP(クライアント)関連
ユーザーがSSH公開鍵認証でログインできるようにする
最も基本的な手順です。まずユーザー(クライアント)が行う作業の例です。WindowsでもLinuxでもほぼ変わりません。
ssh-keygen -t ed25519 -m PEM
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\{WindowsLogonUserName}/.ssh/id_ed25519): testuser1
Enter passphrase (empty for no passphrase): (そのままEnter)
Enter same passphrase again: (そのままEnter)
|
これで作業ディレクトリにtestuser1(秘密鍵)とtestuser1.pub(公開鍵)というファイルが作られます。
これらは移動、改名しても構いません。特にtestuser1はtestuser1-private.pem と改名することにします。
次に管理者によるサーバー側の作業の例です。
sudo su - testuser1
mkdir .ssh
chmod 0700 .ssh
cd .ssh
nano authorized_keys
(先ほど作成したtestuser1.pubの内容をコピーペーストする)
chmod 0600 authorized_keys
|
以上で設定完了。再びユーザー側が接続を試します。Windowsのssh.exeやLinuxのsshならば以下でOK
ssh -i C:\the\path\of\test1-private.pem testuser1@falcon.nhnknkmmkk.co.jp
|
TeraTermの場合、ユーザー名: testuser1、
RSA/.../ED25519鍵を使う を選択し、「秘密鍵」に先ほどの testuser1-private.pem のパスを設定すればログインできます。
なお公開鍵認証の場合、passwdコマンドのパスワードの有無に関係なく、パスワードは聞かれません。
WindowsのSSHのコマンドライン
ssh -i .\private.pem -p 9922 appuser@falcon.nsnhnkmmkk.co.jp
|
-iで秘密鍵ファイルのパス、-pでSSHのポートを指定します。
WindowsのSFTPのコマンドライン(バッチファイル実行)
まず次のようにSFTPコマンドを記述したファイルを作ります。ここでは sendfile-cmd.txt というファイル名にします。
cd app/java
put C:\usr\java\my-projects\app01\target\app01-1.0.0.jar
quit
|
次にコマンドラインです。ポートの指定は-pではなく大文字の-Pなので注意してください。
sftp -i .\private.pem -b .\sendfile-cmd.txt -P 9922 appuser@falcon.nsnhnkmmkk.co.jp
|
WindowsでSSH/SFTP実行時に「Host key verification failed.」というエラーになる
次のコマンドを打ってから再度試してください。
rsyncを使ってサーバ間でディレクトリとファイルを同期する
rsync -e ssh -avc --delete --dry-run --exclude='old/' --itemize-changes --log-file=/home/user1/work/rsync.log user1@remote.server.mycompany.co.jp:/users/user1/data/ /home/user1/data
|
各オプションの意味は次の通りです。
| オプション | 意味 |
| -e ssh | SSHで通信する。ほとんどの環境で今はデフォルトですが、まれに違うそう。またsshdのポートが22以外の場合はここで指定します。 |
| -a | アーカイブモード。次の指定の詰合せです。
- ディレクトリの中を再帰的に転送する。
- シンボリックリンクをそのまま維持する。
- 各ファイルのパーミッション、所有者、グループ、最終編集日時を維持する。
- デバイスファイル、特殊ファイルもそのまま維持する。
|
| -v | 情報を詳細に表示する |
| -c | チェックサムモード。転送元と転送先の差分を各ファイルのチェックサムで判定します。
これを指定しない場合、各ファイルは日付とサイズだけで比較されるため、同一サイズで異なる内容のファイルが処理対象になることがあります。
-cを指定するとそれを防止できますが、代償としてチェックサムの計算には処理時間が掛かります。
|
| --delete | 転送元にないファイルは転送先から削除される。付けない場合は削除されません。 |
| --dry-run | シミュレーション(練習)モード。転送されるファイルを表示するが、実際の転送は行わない |
| --exclude='old/' | oldサブディレクトリとその中は転送しない。複数の場所を除外する場合は複数指定すればOKです。 |
| --itemize-changes | 各ファイルの更新内容を詳細に表示する。
この表示では、転送先に新規作成されるファイルと既存で上書き更新されるファイルが区別できる
|
| --log-file=... | ログファイルのパス |
転送元、転送先はこの順に指定します。
上の例では転送元の方にホスト名やリモートユーザーを付与しているので、
「リモートからローカルへ転送する」、つまりファイルやディレクトリを「getしてくる」処理を表します。
重要な注意が一つ。ディレクトリを転送する場合、転送元のディレクトリの末尾に/を付けるか付けないかで処理が変わります。
/を付けると、転送先と転送元が同じ階層で同期されます。
つまり上の例では、/users/user1/data の中のファイルが /home/user1/data に転送されます。
/を付けない場合、/home/user1/data/data というディレクトリが作られ、
/users/user1/data の中のファイルはその中に転送されます。
なお、転送「先」の方は、末尾に/を付けても付けなくても処理は同じです。
RHEL9 ユーザー管理関連
ユーザー情報の確認
ユーザーのuidやgid、グループ名などを知るにはidコマンドを使います。
ユーザー名を省略すると操作している自分自身に関する情報を出します。
useradd時に新規ユーザーが所属するグループのデフォルトを指定したい
ユーザー作成時のデフォルト値は「useradd -D」コマンドで表示できます。RHEL9のデフォルトでは
となっていて、gid=500、/etc/groupで確認すると「users」というグループに設定されています。
これを一例でgid=2000で「app」というグループにしたい場合は以下のように同じくuseraddコマンドで設定できます。
groupadd -g 2000 app
useradd -D -g app
|
ただしRHELではこれだけでは思った通りになりません。
/etc/login.defs を編集して、「USERGROUPS_ENAB yes」となっている行を
にする必要があります。
yes ... 新規ユーザーには独自の新しいグループが組で作られる
no ... 新規ユーザーのグループは /etc/default/useradd のGROUPの値になる
という違いがあるためです。
useradd時の新規ユーザー用ホームディレクトリのパーミッションのデフォルト値を指定したい
多くのLinux系OSで、新規ユーザーのホームのパーミッションのデフォルト値は/etc/login.defsのUMASKで変更できます。
077だと作成されるディレクトリのパーミッションは700になり、022にすると755、027にすると750になります。
ただしRHEL9の場合はUMASKではなくて、そのすぐ下にHOME_MODEという設定があり、そちらが優先されます。
これはマスクではなくてそのまんまの値なので、ここを0750や0755に変えると次のuseradd実行時から即反映されます。
useradd時に新規ユーザーのホームディレクトリに初期配置される.bashrcなどのひな型を変えたい
これも上で出てきた「useradd -D」で表示されるうちの「SKEL」の値のパスに、
新規ユーザーのホームディレクトリに初期配置される.bashrcなどが置かれています。
SKELの初期値は /etc/skel となっています。ここに
ls -a /etc/skel
.bashrc .bash_profile .bash_logout
|
とあるので、これらを変更・追加すればOKです。
なお初期配置されている.bashrcは、/etc/bashrcをsourceしています。
/etc/bashrcの方を変更すると、既に作成済ユーザーの.bashrcの挙動も変更できます。
SFTP専用のユーザーを作りたい
SFTP専用のユーザーグループsftponlyを作り、これをサブグループとするSFTP専用ユーザー userf を作る例です。
PW認証でホームは /home/userf、ここにchrootし、/home/userf/data 以下を読み書き可能にしたいと思います。
ポイントは二点
- chrootディレクトリは root:rootで0755でなければならない。
- chrootするには/etc/ssh/sshd_config でinternal-sftpが必須。
なのでこれを守る必要があります。以下の例ではsudoは全て省略します。
# ユーザーとグループの作成
groupadd sftponly
useradd userf
usermod -aG sftponly userf
chown root:root /home/userf
chmod 0755 /home/userf
mkdir /home/userf/data
chown userf:userf /home/userf/data
passwd userf
※任意のパスワードを設定
# sshdの設定を変更
sudo nano /etc/ssh/sshd_config
------
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match Group sftponly
ChrootDirectory /home/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
PasswordAuthentication yes
------
# sshdを再起動
systemctl restart sshd
|
ユーザーの~/public_htmlを公開したい
dnfでインストールしたApacheの場合、/etc/httpd/conf.d/userdir.conf を編集して
#UserDir disabled
UserDir public_html
|
を切り替えます。さらに適宜以下の設定も見直します。
<Directory "/home/*/public_html">
AllowOverride FileInfo AuthConfig Limit Indexes
##Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Options SymLinksIfOwnerMatch
Require method GET POST OPTIONS
</Directory>
|
さらにSELinuxを適用している場合、以下も必要です。
setsebool -P httpd_enable_homedirs on
restorecon -R /home/*/public_html
|
これで、
これで各ユーザーの~/public_htmlにHTML文書を作って、動作確認します。
RHEL9 セキュリティ関連
セキュリティ関連 超基本
ユーザー別の最新ログイン日時を確認
lastlog
直近ログインユーザー、日時、接続元を確認
last
認証に成功した履歴を確認
cat /var/log/secure|grep sshd|grep Accepted
|
setfaclによるアクセス権制御
groupadd users
groupadd tomcat
useradd -g users user1
useradd -g tomcat tomcat11
useradd -g tomcat tomcat12
useradd -g tomcat tomcat13
chown -R user1:users /var/data
chmod 0700 /var/data
setfacl -m g:tomcat:rwX /var/data
setfacl -m d:g:tomcat:rwX /var/data
|
この例では、/var/dataの所有者をuser1とし、所有者であるuser1以外に、
tomcatグループに属する全ユーザー(tomcat11,12,13)に /var/data内のファイルの作成・上書き更新・削除権限を付与しています。
setfaclコマンドの実行例の -m が権限の追加変更を、g:tomcat がグループに対する変更を
(ユーザーに対しての変更ならば u:tomcat11 のようになります)、rwXがファイルの読み書き・実行を表します。
で、似たようなsetfaclコマンドを2回実行していますが、これは次のような使い分けになります。
まず「d:」が付かない方は、/var/dataディレクトリに対するtomcatグループの権限を直接付与しています。
/var/data内部に新規ファイルを作成したり、既存ファイルを削除したりするにはこれが必要です。
一方「d:」が付く方は「デフォルトACL」のことで、
ディレクトリに対してのみ指定でき、新規に作成されるファイルにこの設定が適用されます。
/var/data内部にこれ以降新規に作成されたファイルをtomcatグループのユーザーが上書きで更新するには、これが必要です。
この例では付けていませんが、-Rオプションを付けると、既存のファイルやディレクトリにも再帰的に適用されます。
-Rはchmodやchownと同じですね。
なお、chownはrootユーザーのみ実行可能、またchgrpは自身が所有者で自身が属するグループへの変更しかできないのに対して、
setfaclは自身が所有者のディレクトリやファイルならばrootになれないユーザーでも実行できます。
ユーザーによってSSHログインの公開鍵認証とパスワード認証を切り替えたい
RHEL9のデフォルトでは、SSHでログインするには全ユーザー公開鍵認証が必須になっています。
方針を変更して、例えば重要なユーザーには公開鍵認証を継続し、重要ではない(超失礼)ユーザーにはパスワード認証を許可したい場合、
/etc/ssh/sshd_config ファイルを編集して sshd.serviceを再起動します。
ちなみに、RHELやAmazon Linuxでは、このファイルは
#PubkeyAuthentication yes
|
とあったら、このコメントを解除しなくても、この値はyesがデフォルトだという意味です。
したがって、値を変えたい場合はこの行を残したまま、別の(コメントではない)行を追加する方法を取るのが作法らしいです。
それで書き換えるのは一番末尾の部分です。
PasswordAuthentication no
|
に続けて次のように
PasswordAuthentication no
Match User testuser1
PasswordAuthentication yes
|
として
passwd testuser1
(推測されにくいPWを付ける)
systemctl restart sshd
|
を実行すれば、testuser1だけがパスワード認証が許可されます。
TeraTermの場合は、ホスト名、ポート:SSH(22)、ユーザーは公開鍵認証の場合と同様に入力し、
「プレーンパスワードを使う」を選択し、「パスフレーズ」欄にパスワードを入力して接続すればOKです。
なお、
Match Group app
PasswordAuthentication yes
|
とグループも指定できます。これはappグループに属する全ユーザーにパスワード認証を許可しています。
また複数人を指定するにはカンマで区切ればOKです。また接続元IPの制限も可能です。例えば
Match User testuser1,testuser2 Address 192.168.*.*
PasswordAuthentication yes
|
と指定すれば、社内IPからのtestuser1とtestuser2だけパスワード認証が許可されます。
SSHログイン時の公開鍵認証とパスワード認証の両方を要求したい
sshd_configを編集するとこれも可能です。
Match User testuser1
PubkeyAuthentication yes
PasswordAuthentication yes
AuthenticationMethods publickey,password
|
と編集して、
passwd testuser1
(推測されにくいPWを付ける)
systemctl restart sshd
|
を実行します。これでユーザーが公開鍵認証の場合と同じコマンドライン
ssh -i C:\the\path\of\test1-private.pem testuser1@falcon.nhnknkmmkk.co.jp
|
を実行すると今度はパスワードも聞いてくるので、正しく入力したときのみログインできます。
この方法の場合一点重大な注意があります。なんとTeraTermはこの方法に非対応で、
裏技的な方法でしか入れなくなってしまいます。Puttyの方は対応しているとの事ですが、私は未試験です。
SSHのポート番号を変える
ここではデフォルトの22から3344に変えてみます。
まず /etc/ssh/sshd_config を編集します。
環境によってはfirewalldやSELinuxの設定も必要になります。
sudo firewall-cmd --add-port=3344/tcp --zone=public --permanent
sudo firewall-cmd --reload
getenforce
Enforcing
# SELinuxが有効なのにsemanageコマンドがない場合は下記でインストールする
sudo dnf install policycoreutils-python-utils
sudo semanage port -a -t ssh_port_t -p tcp 3344
|
設定が終わったらsshdを再起動します。
この後、AWSにおけるセキュリティグループなど、クラウド環境固有のファイアウォール設定がある場合はそれも変更して、
ポート3344へのアクセスを許可してから、接続を確認します。
SELinux関連
SELinuxで止められているかを調べる
このファイルを見るべかめれ
sudo tail /var/log/audit/audit.log
|
PHPから別サーバー上のDBに接続できない
PDO->__construct() が「Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Permission denied」
になる場合、以下を実行します。
getsebool httpd_can_network_connect_db
httpd_can_network_connect_db --> off
sudo setsebool -P httpd_can_network_connect_db 1
|
-Pは永続的に設定するオプションです。
collectedが他サーバにログを送信できない
ぬぬーん。これもSELinuxのせいか。
setsebool collectd_tcp_network_connect on
|
Apacheが読むディレクトリのパーミッションは問題ないのに403 Forbiddenになる
error_logに「AH00132: file permissions deny server access: /var/www/html/index.html」
のように表示される場合、こうします。
chcon -R -h -t httpd_sys_content_t /var/www/html
|
ちなみにchconは一時的な変更らしく、永続的に行うには
semanage fcontext -a -t httpd_sys_content_t /var/www/html
|
とするそうです。
なお、httpd_sys_content_t は「読取りだけ」の許可になります。
読み書き両方の権限が必要な場合は、代わりに httpd_sys_rw_content_t を許可する必要があります。
RHEL9 その他の色々
文字コードがSJISのサーバからUTF-8のサーバへ、大量の日本語名のファイルをコピーしたい
まずOS標準のtarでもGNU tarでも、tarコマンド自身には日本語ファイル名の文字コードを変換しながら処理する機能はありません。
一旦はSJISのファイル名でtarで固めて新サーバへ持っていき、展開した後に、
UTF-8だとlsで見ると当然化け化けの状態になっていますが、
その状態にしてから「convmv」というフリーウェアでファイル名だけを一括変換します。
convmvはRHEL等だと「sudo dnf install convmv」でインストールできます。以下は実行例です。
convmv -r -f sjis -t utf8 --notest ./data/*
|
-rは指定したディレクトリ以下を再帰的に検索するオプション、
--notestは事前シミュレーションを行わない(=本当に実行する)オプションです。
--notestを付けないと、変換前後のファイル名が並べて標準出力に表示されるので、事前確認に使えます。
なお--notestを付けても変換結果は標準出力に出力されます。
複数ファイルの文字コードを一括変換したい
今度はファイルの「内容」の文字コード変換です。
以下の例では/home/me/bin-sjis/*.sh の文字コードをシフトJIS(CP932)からUTF-8に変換して、
それぞれ同じファイル名で/home/me/binに出力しています。
find /home/me/bin-sjis -type f -name "*.sh" -exec sh -c 'sed "s/\r$//" "{}" | iconv -f CP932 -t UTF-8 > "/home/me/bin/$(basename "{}")"' \;
|
ここで重大な注意が一つ。iconvに指定できるシフトJISっぽいエンコーディングには「SJIS」という物もありますが、
SJISを指定すると、半角チルダと半角バックスラッシュが変な文字に変換されてしまいます。
「CP932」または「Windows-31J」を指定するのが多くの場合正解なようです。
複数ファイルの内容を指定した文字列で一括変換したい
Perlスクリプトでも以前ご紹介した処理です。sedでも以下のように可能です。
find . -type f | xargs sed -i -e "s/before/after/g"
|
スワップメモリの作成
rootで作業します。sudoは省略します。
dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
chmod 0600 /swapfile
swapon /swapfile
free -lm
(Swap:が表示されることを確認)
swapon --show
(/swapfileが表示されることを確認。Swap領域がない場合何も表示されない)
|
また、/etc/fstabに追記することで、次回OS起動後も有効になるようにします。
cd /etc
cp -i fstab fstab.orig
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
|
REMIリポジトリのインストールと有効/無効切替
dnf repolist
dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
## 普段は無効にする
dnf config-manager --disable epel remi-modular remi-safe
dnf repolist
## また有効にする
dnf config-manager --enable epel remi-modular remi-safe
|
Postfixの最小限の設定
sudo dnf install postfix
sudo setsebool -P httpd_can_sendmail 1
sudo nano /etc/postfix/main.cf
------
myhostname = host01.sales.mycompany.com
mydomain = sales.mycompany.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 10.23.45.0/24{送信元として接続を許可するIP範囲}, 127.0.0.0/8
relayhost = [smtp.center.mycompany.com{リレー先SMTPサーバ}]:587
------
# ↓何も表示されなければチェックOKの意味
postfix check
sudo systemctl start postfix
sudo systemctl enable postfix
echo "Test mail from Postfix" | mail -s "Test Postfix" user@example.com
# s-nailコマンドの場合
echo "Test mail from s-nail" | s-nail -s "Test s-nail" user@example.com
|
Postfixの設定ファイルは「main.cf」です。「mail.cf」ではないのでタイプミスに注意してください。
これ以外に、接続元からこのサーバーにポート25で接続を許可するファイアウォール設定が必要です。
なおrelayhostは、[]で囲むとそのホストを直接参照します。囲まないと、DNS MXレコードを使用して解決を試みます。
ちなみにポート番号部(上の":587")は[]で囲んではいけません。[]の右側に出す必要があります。
これはpostfix checkコマンドでも検知できないので注意が必要です。
WSL2の超基本
デフォルトでインストール可能なディストリビューションの一覧を見る
wsl --list --online
インストール済ディストリビューションと状態を見る
wsl --list --verbose
または
wsl -l -v
デフォルトのディストリビューションを選択
wsl --set-default Ubuntu
起動する
wsl -d Ubuntu
最新に更新
wsl --update
シャットダウン
wsl --shutdown Ubuntu
今入っているディストリビューションのWindows上の領域を確認
Ubuntuの場合はここ
C:\Users\{ログオンユーザー}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState
領域を圧縮する
diskpart
DISKPART>というプロンプトになる。
select vdisk file="C:\Users\{ログオンユーザー}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
|
Ubuntu21 on WSL2
ApacheのSSL対応
# [1] 作業用ディレクトリ
mkdir ~/work/sslwork
cd ~/work/sslwork
# [2] 秘密鍵作成 パスフレーズを聞かれるので任意で
openssl genrsa -aes128 2048 > server.key
# [3] CSRの作成 色々聴かれるので入力する。Email Addressからの3項目は空欄でOK
openssl req -new -key ./server.key > server.csr
------
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Kanagawa
Locality Name (eg, city) []:Yokohama
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Nishinihon Kmmkk Systems
Organizational Unit Name (eg, section) []:dev1
Common Name (e.g. server FQDN or YOUR name) []:wslubuntu1
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
------
# [4] 証明書の作成(オレオレ。本来は正式な認証局に発行してもらった.crtファイルを入手する)
openssl x509 -in ./server.csr -days 365000 -req -signkey ./server.key > server.crt
------
Enter pass phrase for ./server.key:
Certificate request self-signature ok
subject=C = JP, ST = Kanagawa, L = Yokohama, O = Nishinihon Kmmkk Systems, OU = dev1, CN = wslubuntu1
------
# [5] ApacheのSSL設定を変更 workじゃない場所が良ければファイルを移動して設定する
cd /etc/apache2/sites-available
sudo vi default-ssl.conf
------
SSLCertificateFile /home/dayuser/work/sslwork/server.crt
SSLCertificateKeyFile /home/dayuser/work/sslwork/server.key
#SSLCertificateChainFile /etc/dayuser/ssl.crt/server-ca.crt
------
↑本当は一番下の認証局のルート証明書も設定が必要
# [6] SSLを有効にする
sudo a2ensite default-ssl
------
Enabling site default-ssl.
To activate the new configuration, you need to run:
service apache2 reload
------
sudo a2enmod ssl
------
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Enabling module socache_shmcb.
Enabling module ssl.
See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
service apache2 restart
------
# [7] httpdを起動
sudo service apache2 start
------
* Starting Apache httpd web server apache2
Enter passphrase for SSL/TLS keys for DESKTOP-ZZZZZZ.:443 (RSA):
------
秘密鍵のパスフレーズを聞かれるので入力する。
# [8] ブラウザでhttpsアクセス
https://localhost/
「この接続ではプライバシーが保護されません」という警告が出るが詳細設定からUbuntu Apache2 Default Pageが表示されればOK
# [9] 確認したら停止する。
sudo service apache2 stop
|
Tomcat9のSSL対応
上のApache用に作成したファイルをそのまま使います。
# [1] PEM形式の秘密鍵と証明書からPKCS12形式のキーストアを作成
# 秘密鍵のパスフレーズを聞かれた後、生成するkeystoreのパスワードを聞かれるので任意に入力します。
cd ~/work/sslwork
openssl pkcs12 -export -inkey ./server.key -in ./server.crt -name fortomcat -out ./server.pkcs12
------
Enter pass phrase for ./server.key:
Enter Export Password:
Verifying - Enter Export Password:
------
# [2] JKS形式のキーストアに変換する
keytool -importkeystore -srckeystore ./server.pkcs12 -destkeystore ./server.keystore \
-srcstoretype pkcs12 -deststoretype jks -srcalias fortomcat -destalias fortomcat
------
キーストア./server.pkcs12を./server.keystoreにインポートしています...
出力先キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
ソース・キーストアのパスワードを入力してください:
Warning:
JKSキーストアは独自の形式を使用しています。
"keytool -importkeystore -srckeystore ./server.keystore -destkeystore ./server.keystore -deststoretype pkcs12"
⇒を使用する業界標準の形式であるPKCS12に移行することをお薦めします。
------
作成するJKS形式キーストアのPW入力後、PKCS12形式ファイルのPWを聞かれるのでそれぞれ入力する。両者のPWは別でもOK
# [3] $CATALINA_HOME/conf/server.xmlの編集 ******部分はJKS形式キーストアのPW
------
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true"
maxParameterCount="1000"
scheme="https" secure="true"
keystoreFile="/home/dayuser/work/sslwork/server.keystore" keystorePass="******"
clientAuth="false" sslProtocol="TLS" />
------
# [4] Tomcatを起動し動作を確認
ブラウザで https://localhost:8443/ にアクセスし、「保護されていない通信」とバーに出るがTomcatの猫のホームページが出ることを確認する。
|
Linux用バイナリ配布ソフトウェアの使い方
Opera 7.23
www.opera.comからtar.gzをダウンロードし、rootになってinstall.shを実行。
2回の質問にyと答える。
LinuxやKDE固有のツールの使い方
rpmで入っているパッケージを削除する
% rpm -qa | grep -i apache
% rpm -qa | grep -i postgresql
% rpm -e パッケージ名
|
LinuxやKDE固有のトラブルシューティング
(KDE)dcopserverが動作しているか確認して下さい!
ハングして再起動し、同じユーザで入り直したら
Could not read network connection list.
/home/me/.DCOPServer_mouse__0.
dcopserverが動作しているか確認して下さい!
|
とダイアログが出て、KDEが使えない場合、/tmp/.ICE-UNIX, ~/.DCOPserver*, ~/.ICE*を削除します。
日本語入力
KInput2の変換開始キーを変更する。
初期値は SHIFT+SPACE ですが、Emacsを使っているとき、
意図していないのにかな漢字変換が始まってしまうことが多いので、
漢字(全角/半角)キーに変更してみます。
-
~/.Xmodmap ファイルに、次の1行を追加(ファイルがなければ作成)します。
(全ユーザで共通に変更する場合 /usr/X11R6/lib/X11の下にあるxinitrcに書くか、
適当な場所で xmodmap /the/path/of/.Xmodmap する)
なお、49というのがTabの上にあるキーを指します。
これ以外のキー、例えば左Ctrlと左Altの間にあるキーを指定したければ、49の代わりに115とします。
-
~/.Xresources (全ユーザで共通に変更する場合 /usr/X11R6/lib/X11/app-defaults/Kinput2)
に次の1行を追加します。Kinput2を変更する場合は*ConversionStartKeysエントリが既にあるので、
書き換えます。
*ConversionStartKeys: <Key>Kanji
|
Emacs+Wnn環境で「たまご」を使って単語登録する
Ctrl-Xで登録単語の開始位置をセットし、単語全体を選択状態にします
(最近のEmacsだと選択領域の色が変わる)。
その状態でEsc X egg-toroku-regionと打ちます。
USBメモリを使う
USBメモリはSCSIデバイスとして認識されるので、デバイス名は大抵/dev/sda1、/dev/sda2などになります。
USBメモリを差した後、まずdmesgを実行すると、認識状況が分かります。
認識されていたら、任意のマウントポイントを自分で作り(ここでは/mnt/usbdisk)、
マウントします。
mkdir /mnt/usbdisk
mount -t vfat /dev/sda1 /mnt/usbdisk/
|

(first uploaded 2003/01/18 last updated 2026/07/15, URANO398)
|