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와 관련이 있다고 생각하지만, 내가 뭔가를 놓친 것이 아닌 이상 다양한 방법으로 변경하면 결코 예상한 결과를 얻을 수 없습니다.
이 문제를 어떻게 해결하나요?
답변1
호크 라킨의 답변다음과 같이 말해보세요:
cp
cpio
및 파일(예: , 등) 을 복사하거나 재생성하는 관련 프로그램tar
. 새 파일을 원본 파일과 동일한 모드로 설정(시도)합니다.- 바이너리 실행 파일을 생성하는 컴파일러는 모드 777을 지정하므로(적어도 컴파일이 성공한 경우) 사용자는 방금 컴파일한 프로그램을 실제로 실행할 수 있습니다.
파일이나 디렉토리를 생성하는 모든 프로그램은 파일에 부여할 모드(권한)를 지정합니다. 이는 거의 항상 C 프로그램(또는 사용되는 언어)에 하드 코딩되어 있으며 사용자에게 직접 액세스할 수 있는 경우가 거의 없습니다. 그런 다음 umask
값과 기본 ACL은 권한 비트를 끌 수 있지만 추가할 수는 없습니다.
문제는 mkdir
모드가 777( rwxrwxrwx
)로 지정되어 있는데 파일을 생성하는 거의 모든 프로그램이 666( )으로 지정한다는 점입니다 rw-rw-rw-
. 여기에는 touch
, 쉘(예: I/O 리디렉션용), 편집기(,, 등...) 등이 포함됩니다. 따라서 ACL을 어떻게 사용하든 일반 파일이 생성된 직후(이러한 프로그램에서) 파일에 대한 권한을 얻을 수는 없습니다. 파일을 생성한 다음 생성해야 합니다.program > file
vi
vim
emacs
dd
split
rwxrwxrwx
chmod
이 규칙에는 몇 가지 예외가 있습니다.
답변2
"예상 결과"가 무엇인지 언급하지 않았습니다. 비트가 설정된 파일인 것 같습니다 x
.
기본 ACL(예: umask)은 권한만 차단하고 권한을 자체적으로 설정하지는 않기 때문에 이를 강제할 수 없습니다. 새 디렉터리나 파일에는 이를 생성하기 위해 요청되거나 호출된 것보다 open()
더 많은 권한(사용자, 그룹 및 기타 권한)이 부여되지 않습니다.mkdir()
파일의 경우 일반적으로 읽기 및 쓰기 권한만 요청됩니다. 그러나 컴파일러가 바이너리를 생성하면 실행 권한도 요청합니다.
답변3
$ touch file && chmod a+x file
다른 답변의 설명은 훌륭합니다. 실제로 질문에 답하는 내용을 추가하고 싶었습니다.
이 문제를 어떻게 해결하나요?
특정 코드가 있습니다. @Scott는 이를 수행하는 방법을 알려주었습니다.
파일을 생성한 후 생성해야 합니다
chmod
.
내 답변의 코드는 이를 수행하는 방법을 보여줍니다.그리고 강조하세요먼저 넣으십시오.
추가 지침
먼저 간단하게 유지하기 위해 touch
OP에서 제공한 명령에 구체적 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
답변4
이 간단한 스크립트를 사용하여 각 파일 및 디렉터리의 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