사용자에게 특정 파일에만 전체 액세스 권한을 부여하고 싶은데, 이 방법을 알려줄 수 있는 사람이 있나요? 예를 들어, 사용자에게 특정 파일에만 액세스 권한을 부여하도록 sudoer 파일을 수정하고 싶습니다. 감사해요.
답변1
액세스 제어 목록을 사용하여 이를 수행할 수 있습니다.
1) 먼저 파일의 ACL을 확인합니다.
getfacl PATH/files
출력은 다음과 같습니다:
# file: PATH/file
# owner: root
# group: root
user::rw-
group::r--
other::r--
2) 특정 사용자에게 전체 액세스 권한이 설정되도록 파일의 ACL을 설정합니다.
setfacl -m u:USERNAME:rwx PATH/file
3) 이제 파일에 "ls -l" 명령을 실행하면 출력에 더하기 기호(+)가 추가됩니다.
-rw-rwxr--+ 1 root root 0 Nov 10 20:12 file
4) 파일의 ACL을 다시 가져와 변경 사항을 확인합니다(명령은 1단계와 동일). 출력은 다음과 같습니다.
# file: file
# owner: root
# group: root
user::rw-
user:USERNAME:rwx
group::r--
mask::rwx
other::r--
특정 사용자가 이 파일에 대해 소유자 사용자, 소유자 그룹 및 기타 권한과 다른 권한을 갖도록 예외가 선언된 것을 볼 수 있습니다.
귀하의 문제가 곧 해결되기를 바랍니다 :)
답변2
이는 일반적으로 그룹을 사용하여 수행됩니다.
소유권
파일에는 사용자와 그룹이라는 두 명의 소유자가 있습니다. 예를 들어:
$ ls -l file1.txt
-rw-rw-r-- 1 foo foo 6 Nov 9 15:37 file1.txt
여기서는 사용자와 그룹이 모두 입니다 foo
.
다음 명령을 사용하여 파일 소유권을 변경할 수 있습니다
존. 이 링크는 Linux 맨페이지로 연결되지만 chown
상당히 표준이므로 작동할 수도 있습니다. 확실하지 않은 경우 운영 체제 설명서( man chown
)를 참조하십시오.
예를 들어 그룹을 다음으로 변경합니다 bar
.
$ chown :bar file1.txt
$ ls -l file1.txt
-rw-rw-r-- 1 foo bar 6 Nov 9 15:37 file1.txt
bar
그룹이 존재해야 한다는 점에 유의하세요 . 아래에서는 새 그룹을 추가하는 방법을 보여줍니다.
권한
권한은 다음과 같습니다:
-rw-rw-r--
Tuuugggooo
일반 파일 , 디렉토리 , 심볼릭 링크 등 T
의 유형은 어디에 있습니까? 사용자 권한은 읽기, 쓰기입니다. 그룹 권한도 마찬가지입니다. 기타( )는 읽기 전용 액세스 권한을 얻습니다.-
d
l
uuu
rw-
ggg
rw-
ooo
r--
다음을 사용하여 권한을 변경할 수 있습니다.chmod(다시 말하지만, Linux 매뉴얼 페이지이지만 chmod는 꽤 표준입니다.) bar
파일에서 그룹의 쓰기 권한을 제거 하려면 다음을 수행할 수 있습니다.
$ chmod g-w file1.txt
$ ls -l file1.txt
-rw-r--r-- 1 foo bar 6 Nov 9 15:37 file1.txt
새 그룹 추가
특정 파일에 대한 액세스를 관리하기 위해 특별히 그룹을 추가할 수 있습니다. 이것이 수행되는 방법은 플랫폼에 따라 다릅니다. Linux의 경우그룹 추가:
addgroup bar
FreeBSD의 경우비밀번호. 올바른 명령은 운영 체제 설명서를 확인하세요!
그룹에 사용자 추가
이것은 다시 플랫폼에 따라 다릅니다. FreeBSD의 경우 pw
위에서 언급한 명령으로 이 문제를 처리할 수 있습니다. 리눅스의 경우 그렇습니다사용자 모드.
사용자에게는 일반적으로 기본(또는 초기) 그룹과 보조(또는 보충) 그룹이 있습니다. 새 파일을 생성할 때 기본 그룹을 사용합니다.
Linux의 경우 다음과 같이 -a
( ) 사용자를 foo
보조( -G
) 그룹에 추가합니다.bar
$ usermod -G bar -a foo
이제 다음 foo
에 사용자가 로그인하면 해당 그룹이 업데이트됩니다. 다음 명령을 사용하십시오 id
(리눅스 아이디/프리BSD ID: 꽤 표준적임) 그룹 멤버십을 확인하려면 다음을 수행하세요.
$ id
uid=1000(foo) gid=1000(foo) groups=1000(foo),1001(bar)
답변3
참고용, 검사 용 man sudo
등man sudoers
다음은 SYSV Linux 서비스 스크립트를 루트로 실행하도록 sudoers 파일을 구성하는 방법에 대한 Linux 전용 예입니다.
사용자에 대한 sudoers 파일을 편집/생성합니다(사용하겠습니다 theusername
).
visudo /etc/sudoers.d/theusername
형식은
# <user list> <host list> = <operator list> <tag list> <command list>
다음 줄을 추가해야 합니다.
theusername ALL = (root:root) NOPASSWD: /usr/sbin/service
사용자를 그룹 theusername
에 추가해야 할 수도 있습니다 . 자세한 내용은 다른 답변을 참조하세요.sudo
고쳐 쓰다
OP(댓글을 통해)는 다음을 원합니다.
ProcessBuilder ntpProcessBuilder = new ProcessBuilder(
"/bin/sh", "-c",
"echo " + PUB_PASSWORD +
"| sudo -S bash -c \"cp -f " + ntp_conf_file_temp + " " + ntp_conf_file +
"; service ntp reload\"" );
ntp_conf_file
이를 위해서는 루트가 가지고 있다고 가정하는 권한을 재정의할 수 있도록 파일 권한을 설정해야 합니다 . 자세한 내용은 다른 답변을 참조하세요. 그러나 다음은 스크립트를 사용하여 다음 위치에 있는 대체 솔루션입니다 /etc/ntp-update.sh
.
#!/bin/bash
/bin/cp /etc/managed-ntp/temp.conf /etc/ntpd/ntp.conf
/usr/sbin/service ntp reload
보시다시피 보안상의 이유로 파일 경로가 인코딩됩니다.
이를 설정하려면 사용자가 이 스크립트를 루트로 실행할 수 있는 권한을 부여하도록 sudoers 파일을 편집합니다.
theusername ALL = (root:root) NOPASSWD: /etc/ntp-update.sh
디렉토리를 생성합니다:
mkdir /etc/managed-ntp
chmod 2775 /etc/managed-ntp
chown theusername:theusergroup /etc/managed-ntp
in 2
비트는 해당 디렉토리에 생성된 파일이 해당 디렉토리 그룹의 소유임을 보장합니다. 이는 루트로 실행할 때 꼭 필요한 것은 아니지만 유용할 수 있습니다.2775
setgid
이제 애플리케이션은 다음을 수행할 수 있습니다.
// Make sure you write ntp_conf_file_tmp in /etc/managed-ntp/temp.conf!
ProcessBuilder ntpProcessBuilder = new ProcessBuilder(
"/usr/bin/sudo", "/etc/ntp-update.sh"
);