nologin 쉘이있는 사용자로 스크립트 실행


87

nologin/false셸이 표시된 특정 사용자로 특정 스크립트를 실행하기 만하면됩니다 /etc/passwd.

스크립트를 루트로 실행하고 다른 사용자로 실행해야합니다. 달리는:

~# su -c "/bin/touch /tmp/test" testuser

작동하지만 테스트 사용자에게는 유효한 쉘이 필요합니다. 암호를 비활성화 하고이 방법으로 passwd -d testuser셸을 그대로두면 /bin/bash조금 안전하지만 nologin/false셸이 필요하다는 것을 알고 있습니다 .

기본적으로 필요한 것은 쉘에 crontab관계없이 작업이 특정 사용자로 실행되도록 설정하는 것 nologin/false입니다.

추신 :이 스레드를 발견 했습니다. nologin user으로 명령을 실행 하지만 concatenate명령 su -s /bin/sh $user을 실행하는 스크립트에 대한 방법을 모릅니다 .

답변:


119

-s 스위치를 사용하여 su를 사용하여 특정 쉘을 실행할 수 있습니다.

su -s /bin/bash -c '/path/to/your/script' testuser

( 암호가없는 사용자 인 sudo경우 위의 앞에 추가 하십시오 testuser.)


su가 root:root -rwsr-x---어떻게 되나요?
Patryk

1
사용자에게 비밀번호가 없으면 어떻게합니까?
CMCDragonkai

3
@Wesley 암호가없는 사용자를 위해 해당 명령을 실행하려면 루트 사용자 여야합니다.
CMCDragonkai

1
@lain, 사용자가 쉘을 가지고 있지 않다면, 명령과 관련된 프로세스는 bash 프로세스의 자식이 아니어야합니다. 따라서 exec를 사용하여 쉘을 스크립트로 대체해야합니다. 그리고 스크립트를 init의 자식으로 만들고 싶다면 &를 사용하십시오.su -s /bin/bash -c 'exec /path/to/your/script &' test
Facundo Victor

1
내가 사용하여 동일한 결과를 달성하는 방법 운동 20 분 마지막 보냈다 때문에 runuser것을, 내가 지적하고 싶은 su -s SHELL매개 변수가 거의 runuser 명령을 렌더링 쓸모 :) 감사 월!
jirka

12

sudo -u설치 한 경우이 작업을 수행 할 수 있습니다 .

# whoami
root
# sudo -u apache whoami
apache
# getent passwd apache
apache:x:48:48:Apache:/var/www:/sbin/nologin

매개 변수를 sudo -u apache whoami어떻게 전달 합니까?
CMCDragonkai

@CMCDragonkai 명령 후의 모든 매개 변수가 전달됩니다. "sudo [-u apache] [whoami <param1> <param2>]"와 같이 생각할 수 있습니다.
Handyman5

나는 sudo -unologin 사용자로 명령을 실행하는 데 사용 하는 것이 좋지 않다고 생각 SUDO_USER합니다. 실제로 명령을 호출하는 환경을 노출시키기 때문 입니다. 어쩌면 나는 그것을 너무 생각하고 있습니다.
Meow

5

스크립트를 / bin / sh에 실행할 인수로 제공하여 다음을 수행하십시오.

su -s "/bin/sh /your/script/location" username

2

방금 실현 :

su -s "/ bin / bash"-c "/ bin / touch / tmp / testuser"testuser

더 좋은 방법이 있을까요?!


0

실제로 가장 좋은 방법은 runuser를 사용하는 것입니다.

자세한 내용은 맨 페이지를 참조하십시오

이 도구는 개발자가 bolg에서 말한 것처럼 상황을 처리하는 데 사용됩니다.

서비스가 루트로 실행 중이고 쉘을 사용하여 UID를 변경하려면 runuser를 사용해야합니다.

http://danwalsh.livejournal.com/55588.html

나는 많은 궁전 에이 답변을 게시했습니다.이 성가신 것을 발견하면 용서하십시오.


링크 썩음을 방지하기 위해 링크 전용 답변을 게시하지 마십시오. 대신 링크에서 답변에 가장 관련성 높은 정보를 추가하거나 링크 대신 답변 대신 주석으로 링크를 게시하십시오. 자세한 내용은이 serverfault.com/help/how-to-answer 도움말 센터를 참조하십시오.
Federico Galli

@FedericoGalli 가장 관련성이 높은 정보가 이미 추가되었으며, 사용법을 복사하여 붙여 넣을 필요가 없으며, 매뉴얼 페이지는 충분한 정보를 제공합니다
Z-Y00

-1

sudo -u를 사용하여 사용자를 지정하십시오. 또한 -i 플래그를 사용하여 대상 사용자의 환경 변수도 설정하십시오.

sudo -i -u user command

1
이것은 제공합니다This account is currently not available.
knocte

-3

shell -s 및 -c 명령과 함께 su 명령을 사용하십시오. 아래 그림과 같이

 su  exec -l -c '/bin/bash /etc/update_conf.sh' -s /bin/bash

2
이것이 최고 등급의 답변에서 나온 정확한 해결책입니다.
제랄드 슈나이더
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.