Linuxでこれらの特権がどのように機能するのか、私には本当にわかりません。
MySQLサーバーを起動するには、mysqld
プログラムは.pid
ファイルを/var/run/mysqld/
ディレクトリに書き込む必要があります。しかし、 FHS(Filesystem Hierarchy Standard) から次のことがわかります。
このディレクトリの下のファイルは、ブートプロセスの開始時にクリアする必要があります(必要に応じて削除または切り捨て)。
mysqld
toは/mysqld
の下に/var/run/
ディレクトリを作成します_every timeMySQLサーバーが起動します。
/var
の所有者とグループはroot
であり、/var
は次のとおりです。
drwxr-xr-x 13 root root 4096 may 20 23:41 var.
また、FHS(Filesystem Hierarchy Standard)から次のこともわかっています。
/ var/runは、権限のないユーザー(rootまたはデーモンを実行しているユーザー)に対して書き込み不可にする必要があります。ユーザーがこのディレクトリに書き込むことができる場合、これは重大なセキュリティ問題です。
したがって、mysqld
はディレクトリに書き込むことができません。実際、mysqld
を実行してMySQLサーバーを起動すると、常にエラーが発生します。
user@user-desktop:~$ Sudo mysqld --console
130720 23:43:02 [ERROR] Can't start server : Bind on unix socket: Permission denied
130720 23:43:02 [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?
130720 23:43:02 [ERROR] Aborting
問題は、標準で書き込み用にこのディレクトリを開くことを禁止している場合、mysqld
が.pid
ファイルを/var/run/mysqld/
に書き込む方法です。これは明らかな矛盾ですよね?
私の質問は:mysqld
が/var/run/mysqld/
ディレクトリの権限を変更せずに/var/run
にファイルを作成して書き込むようにする方法ですか?今のところ、私は唯一の方法を見ています:
user@user-desktop:$ Sudo chmod a+w /var
しかし、それは規格によって禁止されています。
/ var/runは、非特権ユーザーに対して書き込み不可にする必要がありますは、rootおよびSudoアカウント(これらは特権ユーザーであるため)が書き込みを許可されることを意味します。
MySQLの起動スクリプトはルートとして起動され、/var/run
にファイルまたはディレクトリを作成できます。そして、このファイルは、構成で設定された許可で作成されます。これは/etc/my.cnf
である必要があり、 このようなもの になります。
[mysqld]
user = mysql
socket = /var/lib/mysql/mysql.sock
/etc/init.d
にmysqlに関連するものがあるはずです。MySQLサーバーをインストールした後、次のようになります。
MySQL Clientをインストールしていませんか?