setfacl을 사용하여 하위 파일 / 디렉토리에 어떤 권한이 있어야하는지 관리 할 때 어떤 이유로 파일에는 실행 ( “x”) 권한을 제외한 모든 권한이 있습니다.

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ getfacl . # file: . # owner: someuser # group: webs # flags: -s- user::rwx group::rwx other::rwx default:user::rwx default:group::rwx default:other::rwx someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rw-rw-rw- 1 someuser webs 0 paź 31 13:35 file 

umask와 관련이 있다고 생각했지만 여러 가지 방법으로 변경하면 무언가 누락되지 않는 한 예상 된 결과를 얻을 수 없습니다.

어떻게 해결할 수 있습니까?

답변

Hauke Laging의 답변 은 다음과 같이 말합니다.

파일 또는 디렉토리를 생성하는 모든 프로그램은 해당 파일이 갖기를 원하는 모드 (권한)를 지정합니다. 이는 거의 항상 C 프로그램 (또는 사용되는 모든 언어)에서 하드 코딩됩니다. ) 사용자가 직접 액세스 할 수 없습니다. 그러면 umask 값과 기본 ACL이 권한 비트를 끌 수 있지만 추가하세요.

문제는 mkdir가 777 (rwxrwxrwx) 모드를 지정하지만 거의 모든 파일을 생성하는 프로그램은 666 (rw-rw-rw-)을 지정합니다. 여기에는 touch, 셸 (I / O 리디렉션 용, 예 : program > file), 편집기 (vi, vim, emacs 등…), dd, split 등입니다. 따라서 ACL로 수행하는 작업에 관계없이 생성 즉시 (이러한 프로그램에 의해) 일반 파일에 대한 rwxrwxrwx 권한을 얻지 못합니다. 파일을 만든 다음 chmod 파일을 만들어야합니다.

이 규칙에는 몇 가지 예외가 있습니다.

  • cp 및 관련 프로그램 (예 : cpio, tar 등)은 -파일을 생성하면 새 파일을 원본 파일과 동일한 모드로 설정 (시도)합니다.
  • 바이너리 실행 파일을 생성하는 컴파일러는 모드를 777로 지정합니다 (최소한 컴파일 성공) 따라서 사용자는 방금 컴파일 한 프로그램을 실제로 실행할 수 있습니다.

댓글

  • user, groupother ACL 항목. 명명 된 사용자 또는 그룹에 대한 기본 ACL 항목이있는 경우 ‘ 지정된대로 상속됩니다. 그렇지 않습니까?
  • 어딘가에서 인용 한 것입니까? 그렇다면 출처를 추가하고 그렇지 않은 경우 인용 서식을 제거하십시오.
  • @terdon : 인용문이 아닙니다. (설명 된대로) Hauke Laging의 답변 을 의역 한 것입니다. 어떻게 처리해야합니까? (1) 다른 답변을 편집 할 수 있었지만 다른 사람의 게시물을 대량으로 다시 작성하면 눈살을 찌푸리는 것을 알고 있습니다. (그리고 FWIW,이 사이트의 내 담당자는 2014 년 10 월에 < 2000이었습니다.) (2) 다른 답변에 대한 댓글로 게시 할 수있었습니다. 또는 > 1200 자이므로 일련의 세 개의 댓글로 게시 할 수도 있습니다. 그러나 그것은 댓글의 목적에 대한 나의 이해와 일치하지 않습니다. … (계속)
  • 안녕하세요. ‘ 불만 사항이 아닙니다. 이것은 좋은 대답이며 같은 것을 궁금해했기 때문에 찾았습니다. 따옴표 형식 만 제거하겠습니다. ‘ 모두입니다. 기존 답변을 명확히하는 답변을 게시하는 것은 원본을 언급하는 한 괜찮습니다. 예, 링크를 추가하는 것은 좋은 생각이지만 ‘별로 중요하지 않습니다. 당신은 그의 대답을 당신의 대답으로 복사하는 것이 아닙니다.
  • 불만이라고 생각하지 않았습니다. 칭찬 주셔서 감사합니다. 그러나 마름모 사람의 요청에는 벨벳 장갑에 철제 주먹의 공기가 있음을 분명히 알고 있습니다. 🙂 추신 귀하의 제안에 따라 제 답변을 수정했습니다.

답변

” 예상 결과 “는 x 비트가 설정된 파일이라고 가정합니다.

기본 ACL (umask와 같은)이 권한을 차단하기 때문에이를 강제 할 수는 없지만 새 디렉토리 나 파일은 open() 또는 mkdir() 호출을 요청합니다.

파일의 경우 일반적으로 읽기 및 쓰기 권한 만 요청되지만 컴파일러가 바이너리 파일을 생성하면 실행 권한도 요청합니다.

Comments

  • 영어 관점에서 귀하의 답변이 상당히 혼란 스럽습니다. 수정 해 주시겠습니까? 또한 ‘ 잘 모르겠습니다. 내 코드를보세요. 디렉토리의 경우 항상 작동합니다.파일의 경우 ” x ” 비트를 제외하고 항상 작동합니다. 또한 ‘이 작업을 수행하는 적절한 방법이 아닌 경우 디렉토리에 액세스 할 때마다 umask를 설정하는 것 외에는 무엇입니까?

답변

$ touch file && chmod a+x file

다른 답변의 설명은 훌륭합니다. 실제로 질문에 대한 답을 제공하는 것을 추가하고 싶습니다.

이 문제를 어떻게 해결할 수 있습니까?

특정 코드 포함. @Scott이이 작업을 수행하는 방법에 대해 설명했습니다.

파일을 만든 다음 chmod 파일을 만들어야합니다.

p>

제 답변의 코드는이를 수행하는 방법을 보여주고 강조 표시 합니다.


추가 설명

시작하기 위해 간단히 touch 명령, 특히 touch filetouch file && chmod a+x file가됩니다.

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file && chmod a+x file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rwxrwxrwx 1 someuser webs 0 paź 31 13:35 file 

여기에서는 내 컴퓨터 (Cygwin)에서 동일한 상황을 설정하여 작동하는지 확인한 다음 가상 Ubuntu 상자에서 동일한 작업을 수행하여 설정의 차이점을 표시합니다. . (문제를 해결하기위한 실제 명령은 변경되지 않습니다. “setfacl에서 발생할 수있는 몇 가지 차이점을 보여주고, 작동하는지 직접 확인하고 싶습니다. .)

$ uname -a | head -n 1 CYGWIN_NT-10.0 my_machine 2.10.0(0.325/5/3) 2018-02-02 15:16 x86_64 Cygwin $ pwd /home/me $ mkdir user294034 $ setfacl -m u::rwx user294034/ $ setfacl -m d:u::rwx user294034/ $ setfacl -m g::rwX user294034/ setfacl: illegal acl entries $ setfacl -m g::rws user294034/ setfacl: illegal acl entries $ # I guess I don"t know how to get the `flags: -s-` on Cygwin $ setfacl -m g::rwx user294034/ $ setfacl -m d:g::rwx user294034/ $ setfacl -m o::rwx user294034/ $ setfacl -m d:o::rwx user294034/ $ cd user294034 $ getfacl . # file: . # owner: me # group: my_group user::rwx group::rwx other:rwx default:user::rwx default:group::rwx default:other:rwx $ # I admitted that I don"t know how to get `# flags: -s-` $ umask 0022 $ umask 0000 $ touch file $ mkdir dir $ # Here, we"ll see the same problem $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rw-rw-rw- 1 me my_group 0 Sep 18 20:31 file $ # Here, we"ll fix the problem $ rm file $ touch file && chmod a+x file $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rwxrwxrwx 1 me my_group 0 Sep 18 20:32 file 

답변

이 간단한 스크립트는 지정된 기본 권한을 제공하여 각 파일 및 디렉토리의 ACL 레코드를 대체 해 볼 수 있습니다.

$ cd ~ $ mkdir .config $ cat <<"EOF" >> .config/dacl user::rwx group::rwx other:r-x default:user::rwx default:group::rwx default:other:r-x EOF $ cat <<"EOF" >> .config/facl user::rw- group::rw- other:r-- default:user::rw- default:group::rw- default:other:r-- EOF $ cd / $ find $1 -type d -exec setfacl -f ~/.config/dacl {} \; $ find $1 -type f -exec setfacl -f ~/.config/facl {} \; $ getfacl . # file: . # owner: MyUser # group: Administrators user::rwx group::rwx other::r-x default:user::rwx default:group::rwx default:other::r-x 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다