제 리눅스 데몬 프로그램에 문제가 있습니다. 루트 권한으로 시작하여 일부 구성을 수행 한 다음 일부 사용자 및 그룹으로 전환하여 권한을 영구적으로 삭제하고 계속 작업합니다. 비 특권 사용자로의 전환은 다음과 같이 수행됩니다setuid 이후 ptrace가 프로세스에 연결되지 않는 이유는 무엇입니까?
void switch_to_user_group(std::string const& username, std::string const& groupname)
{
// Switch to user/group
gid_t gid = getgid();
if (!groupname.empty())
{
gid = get_group_id(groupname);
if (0 != setgid(gid))
{
std::cout << "Failed to switch to group " << gid << std::endl;
std::abort();
}
}
if (!username.empty())
{
uid_t uid = get_user_id(username);
if (initgroups(username.c_str(), gid) != 0)
{
std::cout << "initgroups failed" << std::endl;
std::abort();
}
if (0 != setuid(uid))
{
std::cout << "Failed to switch to user " << uid << std::endl;
std::abort();
}
}
}
스위치가 제대로 수행, 내 사용자로 추신과 최고의 실행의 과정을 볼 수 있습니다. 문제는 권한을 삭제 한 후에도 gdb에서이 프로세스에 연결할 수 없다는 것입니다. 출력은 : 나도 같은 사용자로 GDB를 실행 해요
Attaching to process 15716
Could not attach to process. If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf
ptrace: Operation not permitted.
프로세스가로 전환, 나는 처음에 그 사용자 아래에서 시작된 다른 프로세스에 첨부 할 수 있어요. 나는 쿠분투 13.10 (YAMA는 사용 불가), 데비안 6과 7에서 같은 결과를 보았습니다.
그래서 제 질문은 다음과 같습니다
- 이유는 GDB와 같은 효과적이고 실제 UID가있는 프로세스에 연결 ptrace 할 수없는 이유는 무엇입니까?
- 권한이없는 gdb에서 내 프로그램에 첨부 할 수 있도록 내 프로그램의 권한을 삭제할 수 있습니까? 방법?
감사합니다.