Como executar um comando com privilégios de administrador e acesso aos arquivos do usuário logado?

7

Eu tenho alguns problemas para entender sudo . Estou logado em um terminal como um usuário não administrador / não root. Este usuário "normal" não está no arquivo sudoers (e não deveria estar, na minha opinião).

Agora eu tento executar um comando que precisa de privilégios de admin / root e também acesso aos diretórios do meu usuário normal - portanto, não posso para simplesmente su em um administrador ou usuário root.

No meu entendimento sudo -u root deve fazer o truque - no entanto ele não aceita a senha para root (ou admin se eu tentar com o meu normal usuário admin). Ele só aceita a senha do usuário "normal" que parece para indicar que a opção -u username não funciona da maneira que eu esperava trabalhos.

Minha expectativa é de que sudo -u root some_command execute some_command com os privilégios de root e por isso pede também a senha do root. Obviamente não.

TL; DR: Como executo qualquer comando que requeira administração privilégios E tem acesso aos arquivos do "usuário logado (normal)" sem adicionando o usuário normal ao arquivo sudoers?

Eu ativei o usuário root no Mac OS X 10.7.

    
por robertj 13.09.2011 / 16:21

4 respostas

13

sudo sempre requer a senha do usuário em execução (e exige que você tenha permissões específicas para fazer isso, ou seja, são um dos sudoers ).

su requer a senha da conta de destino ( root por padrão, mas a conta raiz não tem senha no OS X por padrão). Se você usar su , poderá inserir a senha da conta de destino e executar um comando usando os privilégios desse usuário.

su -c some_cmd # as root
su username -c some_cmd # as username

Isso funciona passando todos os argumentos após o nome de usuário para o shell de login da conta de destino. Os shells geralmente suportam -c <commands> arguments. No GNU coreutils su , há um argumento -c command real para su que pode ser colocado antes do nome do usuário.

Você pode su para outra conta de usuário (usando a senha da outra conta de usuário) e sudo de lá, desde que outra conta seja um sudoer .

Se você não quiser inserir a senha de outra conta nem atribuir à sua conta normal sudoers permissões, estará praticamente sem opções, a menos que considere o SSH com autenticação de chave ou algo assim.

    
por 13.09.2011 / 16:31
5

A menos que você realmente "precise" manter um usuário root separado no Mac OS X, geralmente é muito mais fácil apenas obter um shell de root usando sudo -s

No seu caso, usuários não administradores não são incluídos em / etc / sudoers - então você teria que adicionar manualmente os usuários / grupos que você pretende que o sudo aceite.

# User privilege specification
root    ALL=(ALL) ALL
%admin  ALL=(ALL) ALL

Uma vez feito isso, o sudo irá herdar quase todas as coisas boas do seu shell como o PATH e outras variáveis, mas eleva instantaneamente o seu usuário não-administrador para o root. A desvantagem de ativar o root é o tempo e o risco de segurança de alguém realmente fazer login local ou remotamente como root.

Tenha em mente que sudo está solicitando a senha do usuário que efetuou login na tela de login. su - quer a senha da conta root, sudo -s usa o escalonamento de privilégios para usar a senha do usuário atual para se tornar root sem precisar de nenhuma senha raiz (ou, no seu caso, a atual ).

    
por 13.09.2011 / 18:31
2

Se você estiver usando uma conta padrão (geralmente por motivos de segurança) e souber um nome de usuário e senha de administrador, poderá fazer su -l admin_user . Depois de digitar a senha, você está agora, para todos os efeitos, agindo como aquele administrador. Então você pode sudo para o conteúdo do seu coração. Agora, apenas logout para voltar para sua conta simples original.

    
por 26.05.2013 / 04:09
0

o meu executável do terminal não pode conseguir o que ele próprio, mas fazendo essa operação irritante:

Abra o aplicativo > Utilitário > Terminal.app;

~ usuário $ sudo / PATH_TO_TERMINAL_EXEC

Obtenha privilégios de administrador;

Feito.

... Isso é o que está dentro do terminal_executável

#!/bin/bash

echo PATCHING HOSTS FILE...!
echo  >> /etc/hosts
echo \# IsPatched >> /etc/hosts
echo 127.0.0.1 somewebsite.com >> /etc/hosts

... O que eu já tentei é

#!/bin/bash

tmpvar=$(whoami)
echo TRYING!
su $tmpvar echo 127.0.0.1 somesite.com >> /etc/hosts

ou

su cuskus -c sudo -s echo 127.0.0.1 somesite.com >> /etc/hosts

acabou de obter a janela #! / bin / bash depois de pedir a senha, mas não pode executar nenhum código por causa de privilégios.

    
por 29.07.2016 / 13:31