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로 지정합니다 (최소한 컴파일 성공) 따라서 사용자는 방금 컴파일 한 프로그램을 실제로 실행할 수 있습니다.
댓글
답변
” 예상 결과 “는 x
비트가 설정된 파일이라고 가정합니다.
기본 ACL (umask와 같은)이 권한을 차단하기 때문에이를 강제 할 수는 없지만 새 디렉토리 나 파일은 open()
또는 mkdir()
호출을 요청합니다.
파일의 경우 일반적으로 읽기 및 쓰기 권한 만 요청되지만 컴파일러가 바이너리 파일을 생성하면 실행 권한도 요청합니다.
Comments
- 영어 관점에서 귀하의 답변이 상당히 혼란 스럽습니다. 수정 해 주시겠습니까? 또한 ‘ 잘 모르겠습니다. 내 코드를보세요. 디렉토리의 경우 항상 작동합니다.파일의 경우 ” x ” 비트를 제외하고 항상 작동합니다. 또한 ‘이 작업을 수행하는 적절한 방법이 아닌 경우 디렉토리에 액세스 할 때마다 umask를 설정하는 것 외에는 무엇입니까?
답변
$ touch file && chmod a+x file
다른 답변의 설명은 훌륭합니다. 실제로 질문에 대한 답을 제공하는 것을 추가하고 싶습니다.
이 문제를 어떻게 해결할 수 있습니까?
특정 코드 포함. @Scott이이 작업을 수행하는 방법에 대해 설명했습니다.
파일을 만든 다음
chmod
파일을 만들어야합니다.p>
제 답변의 코드는이를 수행하는 방법을 보여주고 강조 표시 합니다.
추가 설명
시작하기 위해 간단히 touch
명령, 특히 touch file
는 touch 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
user
,group
및other
ACL 항목. 명명 된 사용자 또는 그룹에 대한 기본 ACL 항목이있는 경우 ‘ 지정된대로 상속됩니다. 그렇지 않습니까?