зеркало из
				https://github.com/iharh/notes.git
				synced 2025-10-31 05:36:08 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			53 строки
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			53 строки
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| sudo -
 | ||
|     ???
 | ||
| 
 | ||
| su  «substitute user» — заменить пользователя
 | ||
| sudo  «substitute user and do» — подменить пользователя и выполнить
 | ||
| 
 | ||
| su требует пароль целевой учетной записи, на кого переключаемся. 
 | ||
| sudo требует пароль текущего пользователя и запускает от его имени команды, которым требуются права суперюзера.
 | ||
| 
 | ||
| Например, мы сидим под пользователем user и хотим войти под  John:
 | ||
| 
 | ||
| user@dev:/$ su john
 | ||
| Будет запрошен пароль, нужно ввести пароль именно от учетной записи john, а не от user.
 | ||
| 
 | ||
| А вот пример с sudo:
 | ||
| 
 | ||
| user@dev:/$ sudo -u john whoami
 | ||
| А здесь нужно ввести пароль от учетной записи user, а не от John или рута. Но для этого случая сперва необходимо добавить пермишены для пользователя user в файл /etc/sudoers.
 | ||
| 
 | ||
| user ALL=(ALL:ALL) ALL
 | ||
| Редактировать этот файл можно по средствам команды visudo. А свалидировать конфиг можно командой visudo -c. Редактирование этого файла через visodu хорошо тем, что если вы допустите ошибку, то при сохранении, оно сообщит о ней.
 | ||
| А для чего нужен дефис после su?
 | ||
| 
 | ||
| Для очистки переменных и чтобы пользоваться чистой оболочкой при переключении на другого пользователя.
 | ||
| 
 | ||
| Авторизуемся под пользователем user и экспортируем переменную:
 | ||
| 
 | ||
| ssh user@pc
 | ||
| export a="test"
 | ||
| Теперь у пользователя user есть переменная "a" которая = test.
 | ||
| 
 | ||
| Переключаемся на пользователя John и смотрим переменную "a"
 | ||
| 
 | ||
| su john
 | ||
| echo $a
 | ||
| Вывелась строчка test. То есть все что мы задали под user, перекочевало в оболочку john. А теперь добавим дефис:
 | ||
| 
 | ||
| su - john
 | ||
| echo $a
 | ||
| Переменная $a больше не выводится. Чистая оболочка. Кстати с этим дефисом часто косячат и потом долго не могут понять в чем причина. Переменные вроде были заданы, а потом куда-то пропали. 
 | ||
| 
 | ||
| su (с дефисом) — сначала переключается пользователь, а затем запускается shell, зачищаются все переменные.
 | ||
| su (без дефиса) — переключает пользователя, оставляя переменные окружения старого пользователя.
 | ||
| У sudo есть подобные ключи -s -i
 | ||
| 
 | ||
| user@pc:/$ sudo -s
 | ||
| Запустится оболочка с правами root
 | ||
| 
 | ||
| user@pc:/$ sudo -i
 | ||
| Запустится оболочка, но уже с чтением файлов root/.profile/.bashrc и т.п. Можно попробовать добавить экспорт переменной в .profile, сделать sudo -s/-i и увидеть что с ключом -i переменная выведется на экран.
 | ||
| 
 | ||
| По сути sudo -i = команде sudo su -. Но обычно за sudo su - в приличных местах можно получить по шапке. Это плохая практика! Так как это порождает дополнительный процесс и больше гемора с набором самой команды.
 | 
