-ma 쓰기 가능한 파일에 접근할 수 없습니다

-ma 쓰기 가능한 파일에 접근할 수 없습니다

touch -m이 파일이 그룹 쓰기 가능하고 파일에 제대로 쓸 수 있음에도 불구하고 이 파일을 실행할 때 권한이 거부되는 이유를 누군가 설명할 수 있습니까 ?

~/test1-> id
uid=1000(plyons) gid=1000(plyons) groups=1000(plyons),4(adm),20(dialout),24(cdrom),46(plugdev),109(lpadmin),110(sambashare),111(admin),1002(webadmin)
~/test1-> ls -ld .; ls -l
drwxrwxr-x 2 plyons plyons 4096 Feb 14 21:20 .
total 4
-r--rw---- 1 www-data webadmin 24 Feb 14 21:29 foo
~/test1-> echo the file is writable >> foo
~/test1-> touch -m foo
touch: setting times of `foo': Operation not permitted
~/test1-> lsattr foo 
-------------e- foo
~/test1-> newgrp - webadmin 
~/test1-> id
uid=1000(plyons) gid=1002(webadmin) groups=1000(plyons),4(adm),20(dialout),24(cdrom),46(plugdev),109(lpadmin),110(sambashare),111(admin),1002(webadmin)
~/test1-> touch -m foo
touch: setting times of `foo': Operation not permitted
~/test1-> echo the file is writable >> foo
~/test1-> 

답변1

에서 man utime:

       The  utime()  system  call changes the access and modification times of
       the inode specified by filename to the actime  and  modtime  fields  of
       times respectively.

       If  times  is  NULL, then the access and modification times of the file
       are set to the current time.

       Changing timestamps is permitted when: either the process has appropri‐
       ate  privileges,  or  the  effective  user ID equals the user ID of the
       file, or times is NULL and the process has  write  permission  for  the
       file.

따라서 파일( )의 수정 시간만 변경하려면 해당 파일의 소유자 touch -m foo여야 합니다 .root

파일에 쓸 수 있으면 수정 시간과 액세스 시간을 현재 시간으로 업데이트할 수 있는 권한만 부여되며, 개별적으로 업데이트하거나 다른 시간으로 설정할 수는 없습니다.

답변2

그것은 나도 잡았다.

coreutils 문서또한 다음과 같이 말했습니다.

파일 타임스탬프를 현재 시간으로 설정할 때 touch사용자가 소유하지 않지만 쓰기 권한이 있는 파일의 타임스탬프를 변경할 수 있습니다. 그렇지 않으면 사용자가 파일을 소유해야 합니다. 일부 이전 시스템에는 추가 제한 사항이 있습니다. 액세스 및 수정 시간이 모두 현재 시간으로 설정되지 않은 한 사용자는 파일을 소유해야 합니다.

어쩌면 GNU/Linux는 이미 "일부 오래된 시스템"일 수도 있습니다.

답변3

파일 소유자 네트워크 데이터에는 읽기 권한만 있는 것 같습니다. 이로 인해 오류가 발생합니다.

다음과 같은 권한을 변경해 보세요.

chmod 750 리치

그런 다음 웹 데이터를 su하고 실행하십시오.터치 -m주문하다.

또는 실행터치 -m루트로 명령을 실행하십시오.

관련 정보