태그 보관물: sudo

sudo

/ var / www에서 작업 할 때 sudo를 사용하지 않는 방법은 무엇입니까? 싶습니다 /var/www. 어떻게해야합니까? 모든 사이트를이

sudo에서 일할 때마다 사용을 중단하고 싶습니다 /var/www. 어떻게해야합니까? 모든 사이트를이 디렉토리에 넣고 너무 고통없이 작업하고 싶습니다.



답변

여기에있는 대부분의 답변은 보안을 염두에두고 작성되지 않았습니다. 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쓰기 권한이 필요한 유일한 경우 는 업로드를 저장하는 디렉토리 및 작성해야하는 다른 위치입니다.

해결책 1

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)

해결책 2

홈 디렉토리에 대한 각 프로젝트에 대한 심볼릭 링크를 만듭니다. 프로젝트가 위치하고 ~/projects/foo있고 다음 위치에 있고 싶다고 가정하십시오 /var/www/foo.

sudo ln -sT ~/projects/foo /var/www/foo

홈 디렉토리는 더 비트 (이 하강)을 실행 한 경우 설정되어 있지 other(보안상의 이유로)로 그룹을 변경 www-data하지만, 실행 비트 만 설정되어 있지 (더 읽기 / 쓰기). ~/projectswww 이외의 다른 프로젝트를 포함 할 수 있으므로 폴더에 대해서도 동일하게 수행하십시오 . ( sudo이전에 사용자를 www-data그룹 에 추가 한 경우 필요하지 않습니다 .)

sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects

그룹을 www-dataon으로 설정하고 ~/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.

또한보십시오


답변

웹 사이트를 / 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 없습니다 🙂


답변

소유자가 액세스 할 수있게하려면 www의 / var에있는 chmod를 사용하고 소유자가 소유하고 있는지 확인하십시오. 어리석은 생각이지만 분명히 효과가 있습니다.


답변

터미널에서 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 맨 페이지의 복사본입니다.