다른 사용자의 파일에 그룹 권한 부여

다른 사용자의 파일에 그룹 권한 부여

저는 Debian 7을 사용하고 있으며 다음 htdocs 디렉토리를 사용하여 새 사용자(웹 사이트)를 만들었습니다.

$ sudo adduser website
$ sudo mkdir -p /home/website/htdocs
$ sudo chown -R website /home/website

이제 다른 그룹(개발자)의 사용자가 해당 사용자의 디렉터리에 액세스할 수 있기를 바랍니다. 나는 시도했다:

$ sudo chown -R :developers /home/website

그룹이 할당되어 있고( ls -la또는 사용 stat) 사용자가 그룹에 속해 있지만 액세스 권한이 없는 것을 볼 수 있습니다.

drwxr-xr-x     3     website     developers     4096 May 3 09:09     website

내가 너무 할:

  • 다른 "계약자" 그룹이 웹 사이트 파일에 액세스하도록 허용

  • 웹사이트 사용자가 자신의 홈 디렉토리에만 접근하도록 제한

  • 새 웹사이트 파일이 이러한 권한을 상속하는지 확인하세요.

액세스 제어 목록을 사용해야 합니까? 아니면 이를 수행하는 더 좋은 방법이 있습니까(예: 사이트마다 별도의 사용자를 사용하지 않는 등)?

답변1

운영 체제나 배포판을 모르면 정확한 명령을 내리기가 어렵습니다. ACL은 작동할 수 있지만 표준 접근 방식이 있습니다.

adduser및 를 사용하면 useradd배포판에서 이들 중 하나가 자동으로 사용자의 홈 디렉터리를 생성할 수 있습니다. 그렇다면 디렉터리의 내용이 /etc/skel/사용자의 홈 디렉터리에 복사되고 권한이 설정되며 다른 적절한 작업이 수행될 수 있습니다.

"직원"과 같은 사전 정의된 공유 그룹이 있을 수 있지만 공유를 위해 자체 그룹을 생성하려는 경우 문제가 되지 않습니다. 따라서 새 그룹을 만들거나 기존 그룹을 사용하세요. 이 그룹 usermod의 구성원인 moduser사용자가 운영 체제를 사용하여 정의되었는지 확인하십시오 vigr. 현재 로그인한 각 사용자는 로그아웃한 후 다시 로그인해야 새 그룹의 구성원이 됩니다.

모든 사용자에게 공통적인 디렉터리(예: /home/share_directory/상황에 가장 적합한 디렉터리)를 만듭니다. 관련 모범 사례는 디렉터리를 사용하지 않는 것입니다.이내에모든 사용자의 홈 디렉터리. 소유자와 그룹 외에는 누구도 디렉터리의 파일을 볼 수 없는 경우 디렉터리에 대한 권한을 0770으로 변경합니다. "other"를 읽을 수 있으면 0775가 사용됩니다. 이 디렉토리의 소유자는 거의 확실하게 루트입니다.

chown root:group_name /home/share_directory/

다음으로 setuid 비트를 변경합니다.

chmod +s /home/share_directory/

어떤 사용자도 다른 사용자의 파일을 수정할 수 없도록 해야 하는 경우에도 고정 비트를 설정하십시오.

chmod +t /home/share_directory/

이 예에서는 다음을 사용하여 setuid 및 고정 비트를 모두 설정합니다.8진수 표기법.

chmod 5775 /home/share_directory/

또는

chmod 5770 /home/share_directory/

ACL은 새로운 문제에 적합한 도구인 것 같습니다. 이제 대부분의 Linux 배포판 acl에는 이 옵션이 옵션에 포함되어 있습니다 defaults. 배포판에 acl기본적으로 이 옵션이 포함되어 있지 않은 경우 이 옵션을 사용하려면 몇 가지 작업을 수행해야 합니다. 먼저 acl/etc/fstab의 옵션을 사용하여 파일 시스템을 마운트합니다 .

sudo vim /etc/fstab
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults,acl 0 1

필요한 경우 파일 시스템을 다시 마운트합니다. sudo mount -o remount,acl /. 그런 다음 이 목적을 위해 사용자가 속할 수 있는 그룹을 만듭니다. ACL 도구를 설치해야 할 수도 있습니다 apt-get install acl.

sudo groupadd developers
sudo usermod -a -G developers $username

(또는 그룹이 "계약자"일 수도 있습니다.) 현재 로그인한 사용자는 로그아웃한 후 다시 로그인해야 새 그룹의 구성원이 됩니다. 물론 /var/www 디렉토리의 내용을 유지하려면 이렇게 하지 마세요. 그러나 이는 시작을 위한 설정을 설명하기 위한 것입니다.

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root:developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -d -m u::rwx,g:contractors:rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g:contractors:rwx,o::r-x /var/www/public

위 명령의 차이점 setfacl은 다음과 같습니다. 첫 번째 인스턴스는 기본 그룹(디렉토리의 그룹 소유자)을 사용하는 반면 두 번째 인스턴스는 명시적으로 그룹을 지정합니다. 이 스위치는 디렉터리의 모든 새 파일 시스템 개체에 대한 -d기본 마스크()를 설정합니다 . 그러나 ACL을 디렉터리 자체에 적용 -m하지 않고 명령을 다시 실행해야 합니다 . -d그런 다음 구성 파일에서 "/var/www"에 대한 참조를 "/var/www/public"으로 바꾸고 다시 로드합니다.

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

파일을 생성한 사용자를 제외한 모든 사용자에게 삭제 및 이름 바꾸기를 제한하려는 경우: 이 sudo chmod +t /var/www/public방법으로 Apache 문서 루트 외부에 프레임워크용 디렉터리를 생성하거나 서버 쓰기 가능 디렉터리를 생성하려는 경우에는 여전히 쉬운.

Apache 쓰기 가능 로그 디렉터리:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Apache에서 읽을 수 있는 라이브러리 디렉터리:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/logs
sudo chmod 0750 /var/www/logs

중요하지 않은 디렉토리에서 약간의 "연주"를 하면 귀하의 상황에 맞게 작동하는 데 도움이 될 것입니다.

제한 사항 측면에서 저는 두 가지 다른 접근 방식을 사용합니다. 쉘은 rsshSCP/SFTP 액세스를 제공하도록 설계되었지만 SSH 액세스는 제공하지 않습니다. 또는 홈 디렉터리의 사용을 제한하기 위해 /etc/ssh/sshd_config.

Subsystem sftp internal-sftp

Match group sftponly
  ChrootDirectory /home/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp

sftponly라는 그룹을 만듭니다. 사용자를 sftponly 그룹의 구성원으로 만듭니다. /chroot로 인해 홈 디렉토리를 . /home/username 디렉토리는 루트가 소유해야 합니다. SSH 액세스를 방지하기 위해 사용자의 셸을 /bin/false로 설정할 수도 있습니다. 나는 주로 대화형 액세스에 관심이 있으므로 일반적으로 그 rssh경로를 따릅니다. (그들은 내가 정의한 쓰기 기능 외에는 어디에도 쓸 수 없습니다.)

관련 정보