새 그룹 ircuser
과 새 사용자를 추가했습니다.ircuser
나는 그 안에 visudo
다음 줄을 넣었다 .
myuser localhost=(ircuser) NOPASSWD: /usr/bin/irssi
ircuser
구성 파일, 캐시 등을 저장해야 하는 디렉터리 는 다음 과 같습니다.
drwxrwx--- 2 ircuser ircuser 4096 Mar 2 10:28 ircuser
명령을 실행할 때:
sudo -Hu ircuser /usr/bin/irssi
또는
sudo -u ircuser /usr/bin/irssi
ircuser
프로그램은 디렉터리 에 구성 파일을 저장할 수 없습니다 .
** ERROR **: Couldn't create /home/myuser/_web/ircuser/.irssi directory
aborting...
Aborted
그러나 작동 방식은 다음과 같습니다 ircuser
.
ps auxw | grep irssi
ircuser 11962 0.0 0.0 23684 2504 pts/6 S+ 11:18 0:00 /usr/bin/irssi
그럼 irssi
실행 은 되지만 ircuser
같은 사용자가 소유한 디렉터리에는 쓸 수 없다는 건가요? 그대로 유지하려면 무엇을 변경해야 합니까?
답변1
문제는 ircuser 홈 디렉터리로 연결되는 상위 디렉터리 중 하나에 eXecute 권한이 없다는 것일 수 있습니다. 모든 사용자가 트래버스(디렉터리를 볼 필요는 없음)할 수 있으려면 사용자에게 그룹 또는 다른 그룹을 통한 실행 권한이 있어야 합니다. 다음 권한이 있는 경우:
drwxrwx--- 2 myuser myuser 4096 Mar 2 10:28 /home/myuser
그리고 ircuser는 myuser 그룹에 속하지 않으므로 해당 디렉터리에 대한 권한이 있어도 ircuser는 그 아래의 모든 파일에 액세스할 수 없습니다. 이것을 시도하면:
drwxrwx--x 2 myuser myuser 4096 Mar 2 10:28 /home/myuser
그런 다음 ircuser는 myuser의 홈 디렉터리를 탐색할 수 없지만 그 아래에 있는 일부 파일에 액세스할 수 있습니다./home/myuser/_web/ircuser
업데이트: 위 설명에서 몇 가지 세부 정보를 생략했습니다. 파일 시스템을 탐색할 때 권한이 평가됩니다. 루트 디렉터리부터 액세스할 수 없는 폴더는 현재 디렉터리부터 액세스할 수 있습니다. 작업 디렉터리를 다른 위치로 변경하면 현재 디렉터리에 대한 핸들이 손실되고 그 안에 있는 파일에 대한 액세스가 손실됩니다. sudo su - ircuser와 같은 명령을 사용하면 su는 루트 권한을 포기하기 전에 ircuser의 홈 디렉터리로 전환합니다. 이 시점에서 ircuser의 홈 디렉터리가 현재 작업 디렉터리이기 때문에 이에 대한 유효한 핸들을 갖게 되었습니다. irssi가 시작되면 ircuser의 홈 디렉터리에서 ircuser로 실행됩니다. 현재 디렉터리에 대한 eXecute 권한이 있기 때문에 .irssi에 액세스하려고 하면 작동합니다. eXecute 권한이 없는 디렉터리를 통과해야 하면 실패합니다. 예를 들어 파일을 열려면 /home/myuser/_web/ircuser/.irssi
현재 디렉터리에서 시작하고 상대 경로를 사용합니다. eXecute 권한이 없는 위치를 ../../_web/ircuser/.irssi
탐색해야 하기 때문입니다 ./home/myuser
답변2
-H
명령을 실행할 때 sudo
"home"이 사용자의 홈 디렉토리로 처리되도록 하는 옵션을 사용하십시오 . sudo 매뉴얼 페이지에서 더 자세한 설명을 확인할 수 있습니다.http://linux.die.net/man/8/sudo
답변3
sudo -iu ircuser /usr/bin/irssi를 시도해 보시겠습니까?
또한 Patkos Csaba가 이미 지적한 것처럼 sudoers에 설정된 env_reset, env_keep 기본값을 확인하세요.
sudoers 맨페이지에서:
As a special case, if sudo's -i option (initial login) is specified,
sudoers will initialize the environment regardless of the value of
env_reset. The DISPLAY, PATH and TERM variables remain unchanged;
HOME, MAIL, SHELL, USER, and LOGNAME are set based on the target user.
On Linux and AIX systems the contents of /etc/environment are also
included. All other environment variables are removed.
따라서 sudo -i는 이러한 값을 우회하도록 환경을 초기화합니다.
편집: Ubuntu 상자에서 설정을 재현했으며 sudo -u ircuser /usr/bin/irssi도 제대로 작동합니다.
내 /etc/sudoers에서
<snipped>
Defaults env_reset, log_output
<snipped>
testing LABUBU01=(ircuser) NOPASSWD: /usr/bin/irssi
버전:
testing@LABUBU01:~$ sudo -V
Sudo version 1.8.3p1
pmplugin policy_plugin 5.6.0 (034)
pmplugin io_plugin 5.6.0 (034)
testing@LABUBU01:~$ uname -a
Linux LABUBU01 2.6.35-28-generic #50-Ubuntu SMP Fri Mar 18 19:00:26 UTC 2011 i686 GNU/Linux
testing@LABUBU01:~$ ls -lap /home/
total 64
drwxr-xr-x 16 root root 4096 2012-03-02 15:57 ./
drwxr-xr-x 22 root root 4096 2011-12-08 15:48 ../
drwxr-xr-x 3 ircuser ircuser 4096 2012-03-02 15:57 ircuser/
/편집하다
편집 2:
귀하의 오류:
** 오류 **: /home/myuser/_web/ircuser/.irssi 디렉터리를 생성할 수 없습니다. 중단 중... 중단됨
상태에서는 ircuser의 홈 디렉터리가 아닌 사용자의 홈 디렉터리에 있는 /home/myuser/_web/ircuser/.irssi를 생성할 수 없습니다. /편집2