

以下の3名でウェブサーバーを運用するとします。

  * suzuki
  * tanaka
  * yamada

アプリケーションのディレクトリのパーミッションはユーザーに依存しないようにしたいのですが、  
この場合は全員が自分のアカウントでログインしたあとrootになって作業するという形で問題ないでしょうか。

それともrootではなく作業用ユーザーを作成して、ログイン後に`su`で切り替えて作業するのが望ましいでしょうか。

状況によってかわかるかと思いますが、どういうことに気をつけていけばよいか教えて下さい。


CC BY-SA 3.0
2016-01-28T08:45:37.907
21438
2016-01-28T12:48:28.407
9149
question
php linux centos apache nginx
複数人でサーバーを管理するとき


１） 管理者のユーザグループを作成し、ディレクトリのパーミッションはユーザグループに対するものにする。  
２）
管理者であるユーザ(suzuki,tanaka,yamada)を管理者のユーザグループに追加すれば、3人がそれぞれのユーザとしてログインして管理者の業務を行うことができる。  
というのが適切かと思います。

この方法では、ディレクトリのパーミッションが特定のユーザに依存しませんし、管理するユーザが変わってもユーザグループのメンバー変更で対処できます。

suやrootになって操作すると何でもできて便利なのですが、誤ってシステムのファイルを消してしまうなど不慮の事故を起こす可能性があるので、権限が必要十分な範囲に収まるようにすべきです。


CC BY-SA 3.0
2016-01-28T10:32:49.867
21444
2016-01-28T10:32:49.867
217
21438
answer


原則は

  * 自分のユーザーでログインする 
  * root権限が必要な作業はsudoで行う
  * root権限のshellは使わない

です。rootでのログイン、suでのroot化は使ってはいけません。

共同作業環境の作り方はおおむね次のような形です

## 0\. 必要であればグループを作成する

wwwとかapacheとか既存のグループでも用が足りるのであれば不要です。

## 1\. 0.のグループにユーザーを追加する

/etc/group のグループのエントリの末尾にユーザー名をカンマ区切りで列挙する

[code]

    www:*:80:suzuki,tanaka
    
[/code]

## 2\. ディレクトリのグループを2.のものにしsetgidする

[code]

    chown :www /var/www/html
    chmod g+s /var/www/html
    
[/code]

これにより、/var/www/html以下でファイルを作成すると、グループが`www`になり、ディレクトリにさらにsetgidされます。既存のファイルがある場合はこれに合わせて変更してください。

## 3\. 各ユーザーでumaskを設定する

.bashrc などで、

[code]

    umask 002
    
[/code]

とします。

2のsetgidだけだと、グループはつけ替わる物の、パーミッションがrしかないのであまり意味がありません。上記のumaskを設定することで、groupにwが付くので、編集ができるようになります。

[code]

    % touch a
    % umask 002
    % touch b
    % ll
    total 1
    -rw-r--r--  1 foo  www  0  1月 28 21:40 a
    -rw-rw-r--  1 foo  www  0  1月 28 21:40 b
    
[/code]

これで、

  * groupに所属するユーザーであればファイルの作成更新ができる
  * 他のユーザーが作ったファイルでも編集ができる

と言うことが実現出来ます。

* * *

別案としては、バージョン管理ツールを使ってファイルを管理し、/var/www/htmlなどはデプロイツールがバージョン管理ツールから取得したファイルを書き込むだけのwrite
only運用にする方法が考えられます。


CC BY-SA 3.0
2016-01-28T12:48:28.407
21450
2016-01-28T12:48:28.407
5793
21438
answer