/var/www
で作業するたびにSudo
を使用する必要がなくなります。どうやってやるの?すべてのサイトをこのディレクトリに配置し、あまり苦労せずに作業したいだけです。
ここでの回答のほとんどは、セキュリティを考慮して書かれたものではありません。毎回Sudo
を実行するのはあまり賢くないと感じるのは良いことです。タイプミス(たとえば、間違った場所にある単一の空白:Sudo rm -rf / var/www/dir
do not execute!)を行うと、システムが破壊される可能性があります。
注:Apache 2.4.7/Ubuntu 14.04以降、/var/www
は/var/www/html
に移動しました。それに応じてこの回答のコマンドを調整してください。
見る:
悪いアイデア:
chmod 777
(sagarchalise)-これにより、システムにアクセスできるすべてのユーザーがディレクトリとファイルに書き込み、侵入者がwww-data
ユーザーの下で任意のコードを実行できるようになります。chgrp -R www-data $HOME
(cob)-これにより、www-data
がホームディレクトリ内のファイルを読み書きできます。これは、最小特権ルールを考慮していないchown -R $USER:$USER /var/www
(kv1dr)-ワールドが/var/www
の読み取り許可を持たない限り、www-data
の下で実行されているWebサーバーはファイルを読み取る(提供する)ことができません。ファイルがパブリックにアクセス可能なプレーンHTMLドキュメントである場合、世界中の人がファイルを読み取ることができれば問題にはなりません。ただし、ファイルがパスワードを含むPHPファイルである場合はそうです。NOTE:以下のソリューションでは、www-data
書き込み権限を付与しました。ただし、/usr/share/doc/base-passwd/users-and-groups.txt.gz
状態:
www-data
一部のWebサーバーはwww-dataとして実行されます。このユーザーがWebコンテンツを所有しないでください。所有していると、侵害されたWebサーバーがWebサイトを書き換えることができます。 Webサーバーによって書き込まれたデータは、www-dataが所有します。
可能な場合は、notwww-data
グループに書き込み許可を付与します。 www-data
は、ファイルをreadできる必要があるだけなので、Webサーバーはそれを提供できます。 www-data
が書き込み権限を必要とする唯一のケースは、アップロードが保存されるディレクトリと、書き込みが必要なその他の場所です。
www-data
グループに自分を追加し、/var/www
ディレクトリのsetgidビットを設定して、新しく作成されたすべてのファイルもこのグループを継承するようにします。
Sudo gpasswd -a "$USER" www-data
以前に作成したファイルを修正します(/var/www
の唯一のユーザーであると仮定):
Sudo chown -R "$USER":www-data /var/www
find /var/www -type f -exec chmod 0660 {} \;
Sudo find /var/www -type d -exec chmod 2770 {} \;
(さらに安全:640
または2750
を使用し、Webサーバーによる書き込みが必要なchmod g+w file-or-dir
を手動で使用します)
各プロジェクトのホームディレクトリへのシンボリックリンクを作成します。プロジェクトが~/projects/foo
にあり、/var/www/foo
に配置する場合、次を実行します。
Sudo ln -sT ~/projects/foo /var/www/foo
ホームディレクトリにother
(セキュリティ上の理由で)に実行ビット(下降)が設定されていない場合、そのグループをwww-data
に変更しますが、実行ビットのみを設定します(読み取り/書き込み不可)。 ~/projects
フォルダーにも同じことを行います。これには、www以外のプロジェクトが含まれている可能性があります。 (以前にwww-data
グループにユーザーを追加した場合、Sudo
は不要です。)
Sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects
グループをwww-data
の~/projects/foo
に設定し、Webサーバーがファイルおよびファイル+ディレクトリの読み取りと書き込みを許可し、ディレクトリに降りることを許可します。
Sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;
さらに安全:デフォルトで640および2750を使用し、webserverユーザーが書き込み可能にする必要があるファイルとディレクトリを手動でchmodします。 setgidビットは、~/projects/foo
で新しく作成されたすべてのファイルにグループがアクセスできるようにする場合にのみ追加する必要があります。
これから、http://localhost/foo
でサイトにアクセスし、~/projects/foo
でプロジェクトファイルを編集できます。
Webサイトを/ var/wwwに保存するのではなく、ホームフォルダーにあるサイトへのリンクを配置します。自分のサイトにページを自由に編集または追加できます。変更に満足したら、ドメイン名がリンクしているホスティング会社にFTPで転送します。
/ var/wwwをそのグループによって書き込み可能にし、グループに自分自身を追加する場合、かなり安全でありながらSudoを使用する必要はありません。これを試して:
Sudo adduser <username> www-data
Sudo chown -R www-data:www-data /var/www
Sudo chmod -R g+rw /var/www
これで、/var/www/
ファイルを手間をかけずに編集できるようになります。
最初の行はwww-data
グループに追加し、2行目は所有権が乱れたファイルを消去し、3行目はwww-data
グループのメンバーであるすべてのユーザーが読み書きできるようにします/var/www
内のすべてのファイル。
これは簡単です。 Apache 'UserDir'(非推奨)を有効にする必要も、 'www-data'グループ(Fedoraの場合はApacheグループ)を台無しにする必要もない
/var/www/html
内にプロジェクトディレクトリを作成するだけです
cd /var/www/html
Sudo mkdir my_project
次に、プロジェクトディレクトリをユーザーに登録します。
Sudo chown your_username my_project
これで、任意のエディターIDEを選択して、通常のユーザーとしてプロジェクトフォルダーで作業を開始できます。これ以上sudos:)
ファイルのアクセス許可を777(world-writable)に設定しないでください
これは、特にPHPなどのサーバー側スクリプトを有効にしている場合、重大なセキュリティ上の欠陥です。特権のないプロセスは、Webサイトに影響を与えるファイルに書き込むことはできません。また、サーバー側のスクリプトを使用している場合は、任意のコードを実行する必要があります。
www-dataグループのメンバーとして自分を追加して書き込み権限を付与しないでください
そのグループの目的は、unprivilegedグループがサーバーが処理することですとして実行します。上記と同じ理由で、可能であればWebサイトファイルへの読み取りアクセス権のみが必要です。
Apacheプロセスの許可を変更しないでください
Apacheの子プロセスは、デフォルトでwww-data
ユーザーおよびグループとして実行されます。これは変更しないでください。これは、ファイルシステムへの書き込み許可を与えない方法です。
特定の状況では、サーバー側のスクリプトがファイルに書き込みできるようにする必要があります。その場合、onlyこれらのファイルはwww-data
によって書き込み可能にする必要がありますセキュリティを確保するために取られる必要があります。
自分で所有するファイルを設定する
Webサイト上の特定のファイルを変更するのが自分だけであるか、通常のユーザーである場合は、それらのファイルの所有権を取得するだけで十分です。所有者を<your username>
に設定します。
ファイルが所有されている場合でもサーバーは読み取り専用アクセスを取得し続けるため、サーバーのアクセス許可を変更する必要はありません。
ファイルを格納する適切な場所を選択します(DocumentRoot)を使用)
/var/www
が意味をなさない場合は、他の場所に配置してもかまいません。独自の開発またはテストに固有の場合は、ホームディレクトリに配置できます。または、/srv
にいくつかのディレクトリを設定できます。
group書き込みアクセス権を付与する場合は、new目的のためのグループ
システムグループを再利用しないでください。これらは通常、セキュリティ上の理由から、現在持っているアクセス権を持つように設計されています。
wwwの/ varにあるchmodで所有者のアクセスを許可し、chownで所有者であることを確認します。おそらく愚かな考えですが、それは間違いなく動作します。
ターミナルでwww-sessionを開始するには
Sudo su www-data
別のユーザーのシェルであることをより明確にするために、異なる色のプロンプト*と組み合わせて、対応するxterm(およびエディターなど)を常に置くポリシー-たとえば-仮想デスクトップ4混乱を避けるために、あなたはそれに慣れます。
*)異なる文字の異なる色のプロンプトの場合、次のようなファイル/ etc/Promptを作成します。
# PROMPTING
# When executing interactively, bash displays the primary Prompt PS1 when it is ready to read a command, and the sec-
# ondary Prompt PS2 when it needs more input to complete a command. Bash allows these Prompt strings to be customized
# by inserting a number of backslash-escaped special characters that are decoded as follows:
# \a an ASCII bell character (07)
# \d the date in "Weekday Month Date" format (e.g., "Tue May 26")
# \D{format}
# the format is passed to strftime(3) and the result is inserted into the Prompt string; an empty format
# results in a locale-specific time representation. The braces are required
# \e an ASCII escape character (033)
# \h the hostname up to the first `.'
# \H the hostname
# \j the number of jobs currently managed by the Shell
# \l the basename of the Shell's terminal device name
# \n newline
# \r carriage return
# \s the name of the Shell, the basename of $0 (the portion following the final slash)
# \t the current time in 24-hour HH:MM:SS format
# \T the current time in 12-hour HH:MM:SS format
# \@ the current time in 12-hour am/pm format
# \A the current time in 24-hour HH:MM format
# \u the username of the current user
# \v the version of bash (e.g., 2.00)
# \V the release of bash, version + patchelvel (e.g., 2.00.0)
# \w the current working directory
# \W the basename of the current working directory
# \! the history number of this command
# \# the command number of this command
# \$ if the effective UID is 0, a #, otherwise a $
# \nnn the character corresponding to the octal number nnn
# \\ a backslash
# \[ begin a sequence of non-printing characters, which could be used to embed a terminal control sequence
# into the Prompt
# \] end a sequence of non-printing characters
#
# The command number and the history number are usually different: the history number of a command is its position in
# the history list, which may include commands restored from the history file (see HISTORY below), while the command
# number is the position in the sequence of commands executed during the current Shell session. After the string is
#
# colors:
# \[...\] wird benötigt, damit die Shell weiß, daß hier kein printable output ist, und die Umbrüche richtig plaziert.
#
# ANSI COLORS
CRE="\[
[K\]"
NORMAL="\[[0;39m\]"
# RED: Failure or error message
RED="\[[1;31m\]"
# GREEN: Success message
GREEN="\[[1;32m\]"
# YELLOW: Descriptions
YELLOW="\[[1;33m\]"
# BLUE: System messages
BLUE="\[[1;34m\]"
# Magenta: Found devices or drivers
Magenta="\[[1;35m\]"
# CYAN: Questions
CYAN="\[[1;36m\]"
# BOLD WHITE: Hint
WHITE="\[[1;37m\]"
#
# default:
# postgres, Oracle, www-data
#
# PS1=$BLUE"machine]->"$NORMAL\\w"$BLUE ø $NORMAL"
PS1=$BLUE"machine]:"$NORMAL\\w"$BLUE > $NORMAL"
#
# root, stefan:
#
case "$UID" in
'0')
PS1=$RED"machine:"$NORMAL\\w"$RED # $NORMAL"
;;
'1000')
PS1=$GREEN"machine:"$BLUE\\w$YELLOW" > "$NORMAL
;;
# default)
# ;;
esac
そして、例えば/etc/bash.bashrc
からソースします。
区別を支援する追加のツールとして、エイリアス「edit」またはシンボリックリンクを使用してファイルをいつでも編集できます。これは、アイデンティティ(taylor/www-data)に応じて、geditまたはmousepad、vimまたはpicoを指します。または、少なくともgeditでは、たとえば、白地に黒のテキスト、または黒地に白のテキストを設定できます。
私はrootとして働くためのそのようなポリシーしか持っていないので、www-dataでの作業にどの程度適合するかはわかりません。独自のプロンプトを持っている異なるホストへのsshセッションと組み合わせることで、時々間違っていることを止めることはできませんでしたが、もしそれが起こった場合、私は速く、何が間違っているか、そしてめったに起こりません。
注:プロンプトスクリプトの一部は、bashのマンページのコピーです。