루트가 아닌 다른 사용자로 sudo를 실행하고 해당 사용자의 홈 디렉터리에 저장합니다.

루트가 아닌 다른 사용자로 sudo를 실행하고 해당 사용자의 홈 디렉터리에 저장합니다.

새 그룹 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

관련 정보