sudo
에서 일할 때마다 사용을 중단하고 싶습니다 /var/www
. 어떻게해야합니까? 모든 사이트를이 디렉토리에 넣고 너무 고통없이 작업하고 싶습니다.
sudo -u www-data
은 sudoers
파일 을 계속 사용 하지만 파일 에서 자신을 sudo www-data
루트 만 할 수 없도록 제한하는 것입니다 . 참조 serverfault.com/questions/295429/...
sudo
에서 일할 때마다 사용을 중단하고 싶습니다 /var/www
. 어떻게해야합니까? 모든 사이트를이 디렉토리에 넣고 너무 고통없이 작업하고 싶습니다.
sudo -u www-data
은 sudoers
파일 을 계속 사용 하지만 파일 에서 자신을 sudo www-data
루트 만 할 수 없도록 제한하는 것입니다 . 참조 serverfault.com/questions/295429/...
답변:
여기에있는 대부분의 답변은 보안을 염두에두고 작성되지 않았습니다. sudo
매번 달리는 것이 그리 현명하지 않다는 느낌을받는 것이 좋습니다. 오타를 만드는 경우 (예 : 잘못된 장소에 단일 공백 : sudo rm -rf / var/www/dir
실행하지 마십시오! ) 시스템이 손상 될 수 있습니다.
참고 : 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
가 파일을 읽을 수 없습니다. 파일이 공개적으로 액세스 가능한 일반 HTML 문서 인 경우, 세계가 파일을 읽을 수 있으면 문제가되지 않을 수 있습니다. 그러나 파일이 비밀번호를 포함하는 PHP 파일 인 경우입니다.참고 : 아래 솔루션에서 www-data
쓰기 권한을 부여했습니다. 그러나 /usr/share/doc/base-passwd/users-and-groups.txt.gz
상태는 다음과 같습니다.
www-data
일부 웹 서버는 www-data로 실행됩니다. 이 사용자가 웹 컨텐츠를 소유하지 않아야합니다. 그렇지 않으면 손상된 웹 서버가 웹 사이트를 다시 작성할 수 있습니다. 웹 서버가 작성한 데이터는 www-data가 소유합니다.
가능 하면 그룹에 쓰기 권한을 부여 하지 마십시오www-data
. 웹 서버가 파일을 제공 할 수 있도록 파일 www-data
을 읽을 수 있어야 합니다. 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
수동 chmod g+w file-or-dir
)
홈 디렉토리에 대한 각 프로젝트에 대한 심볼릭 링크를 만듭니다. 프로젝트가 위치하고 ~/projects/foo
있고 다음 위치에 있고 싶다고 가정하십시오 /var/www/foo
.
sudo ln -sT ~/projects/foo /var/www/foo
홈 디렉토리는 더 비트 (이 하강)을 실행 한 경우 설정되어 있지 other
(보안상의 이유로)로 그룹을 변경 www-data
하지만, 실행 비트 만 설정되어 있지 (더 읽기 / 쓰기). ~/projects
www 이외의 다른 프로젝트를 포함 할 수 있으므로 폴더에 대해서도 동일하게 수행하십시오 . ( sudo
이전에 사용자를 www-data
그룹 에 추가 한 경우 필요하지 않습니다 .)
sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects
그룹을 www-data
on으로 설정하고 ~/projects/foo
웹 서버가 파일 및 파일 + 디렉토리를 읽고 쓰는 것을 허용하고 디렉토리로 내려갑니다.
sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;
더 안전합니다 : 기본적으로 640 및 2750을 사용하고 웹 서버 사용자가 쓸 수있는 chmod 파일 및 디렉토리를 수동으로 사용하십시오. setgid 비트는 새로 생성 된 모든 파일을 ~/projects/foo
그룹이 액세스 할 수 있도록 하려는 경우에만 추가해야합니다 .
이제부터에서 사이트에 액세스 http://localhost/foo
하고 에서 프로젝트 파일을 편집 할 수 있습니다 ~/projects/foo
.
sudo su www-data
하십니까? 다른 색상의 프롬프트와 결합하여 다른 사용자의 쉘임을 분명히하고, 해당하는 xterm을 가상 데스크톱 4와 같은 곳에 배치하는 정책을 통해 사용자에게 익숙해 지도록합니다. 혼란을 피하기 위해?
gedit
. 현재 세션에서 다른 사용자로 GUI 프로그램을 실행하는 것이 안전한지 여부를 연구 한 적이 없습니다. 흥미로운 질문이 될 것입니다.
setfacl -d u::rwX,g::rX /var/www
는 umask가 0이더라도 기본 모드가 0750 (또는 0640) 이되는 재미있는 효과가 있습니다. 세계 기록 가능한 파일을 피하고 싶을 때는 좋은 생각이지만, /var/www
이미 세계에서 액세스 할 수없는 경우 에는 필요하지 않습니다.
/var/www/app01
소유권 app01:app01
이 있고 www-data
사용자 가 app01
그룹에 추가 됩니까? 아니면 뭔가 깨질까요?
웹 사이트를 / 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
그룹에 사용자를 추가 하고 두 번째 행은 엉망인 소유권이있는 파일을 지우고 세 번째 행은 www-data
그룹의 구성원 인 모든 사용자가의 모든 파일을 읽고 쓸 수 있도록합니다 /var/www
.
파일 권한을 777 (세계 쓰기 가능)로 설정하지 마십시오
이는 특히 PHP와 같은 서버 측 스크립팅을 활성화 할 경우 중요한 보안 결함입니다. 권한이없는 프로세스는 웹 사이트에 영향을 줄 파일에 쓸 수 없거나 서버 측 스크립팅을 사용하는 경우 임의의 코드를 실행할 수 없습니다.
www-data 그룹 의 구성원으로 자신을 추가하지 말고 쓰기 권한을 부여하십시오
해당 그룹의 목적은 서버 프로세스가 실행 되는 권한이없는 그룹이라는 것입니다. 위와 같은 이유로 웹 사이트 파일에 대한 읽기 권한 만 있어야합니다.
Apache 프로세스의 권한을 변경하지 마십시오
Apache 하위 프로세스 www-data
는 기본적으로 사용자 및 그룹으로 실행되므로 변경하지 않아야합니다. 이것은 파일 시스템에 대한 쓰기 권한을 부여하지 않는 방법입니다.
특정 상황에서는 서버 측 스크립트가 파일에 쓸 수 있기를 원하며,이 경우 해당 파일 만 쓰기 가능해야하며 www-data
보안을 위해주의를 기울여야합니다.
파일을 자신이 소유하도록 설정
웹 사이트에서 특정 파일을 수정하는 유일한 사람이거나 일반적인 파일 인 경우 해당 파일의 소유권을 가져 오는 것이 좋습니다. 소유자를로 설정하십시오 <your username>
.
파일을 소유 한 경우에도 서버는 계속 읽기 전용 액세스 권한을 가지므로 이에 대한 서버 권한을 수정할 필요가 없습니다.
파일을 저장할 적절한 장소를 선택하십시오 ( DocumentRoot 사용 )
경우 /var/www
이해가되지 않습니다, 당신은 다른 곳을 게재 할 수 있습니다. 이들이 자신의 개발 또는 테스트에 특정한 경우 홈 디렉토리에 배치 할 수 있습니다. 또는에서 일부 디렉토리를 설정할 수 있습니다 /srv
.
그룹에 쓰기 권한 을 부여 하려면 목적에 맞는 새 그룹을 만드십시오.
시스템 그룹은 일반적으로 현재 보안상의 이유로 현재 액세스 권한을 갖도록 설계되었으므로 재사용하지 마십시오.
이 간단합니다. 아파치 'UserDir'(권장하지 않음)을 활성화하거나 'www-data'그룹 (페도라의 경우 아파치 그룹)을 망칠 필요가 없습니다.
내부에 프로젝트 디렉토리를 만드십시오. /var/www/html
cd /var/www/html
sudo mkdir my_project
그런 다음 프로젝트 디렉토리를 사용자에게 숨기십시오.
sudo chown your_username my_project
이제 원하는 편집기 인 IDE를 사용하여 일반 사용자로 프로젝트 폴더 작업을 시작할 수 있습니다. 더 이상 sudos 없습니다 :)
/var/www
자체가 아닌 하위 디렉토리 의 소유권을 변경하십시오 .
소유자가 액세스 할 수있게하려면 www의 / var에있는 chmod를 사용하고 소유자가 소유하고 있는지 확인하십시오. 어리석은 생각이지만 분명히 효과가 있습니다.
/var
단지, /var/www
및 / 또는 그 내용을.
터미널에서 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
예를 들어 소스를 제공합니다.
구별을 돕기위한 추가 도구로서, 항상 사용자의 신원 (테일러 / www-data)에 따라 gedit 또는 mousepad, vim 또는 pico를 가리키는 별명 'edit'또는 symlink를 사용하여 파일을 편집 할 수 있습니다. 또는 다른 편집기 프로파일을 사용할 수 있습니다. 적어도 gedit에서는 기본 설정을 흰색 바탕에 검은 색 텍스트 또는 검은 색 바탕에 흰색 텍스트로 설정할 수 있습니다.
나는 루트로 일하기위한 그러한 정책 만 가지고 있으므로 www-data를 사용하는 것이 얼마나 좋은지 잘 모르겠습니다. 자체 프롬프트가있는 다른 호스트에 대한 ssh-sessions와 결합하여 때로는 잘못되는 것을 막지 못했습니다.
참고 : 프롬프트 스크립트는 부분적으로 bash 맨 페이지의 복사본입니다.